blob: 23c582b0a2e4446a3ec1feee5e86e442d8852833 [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 Clark2a8c48b2018-02-15 17:31:24 -05008## <a name="Overview_Subtopic"></a> Overview 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 |
Cary Clark2a8c48b2018-02-15 17:31:24 -050014| <a href="#Constructor">Constructor</a> | functions that construct <a href="#SkPaint">SkPaint</a> |
Cary Clark4855f782018-02-06 09:41:53 -050015| <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
Cary Clark2a8c48b2018-02-15 17:31:24 -050021options outside of the <a href="SkCanvas_Reference#Clip">Canvas Clip</a> and <a href="SkCanvas_Reference#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| --- | --- |
Cary Clark2a8c48b2018-02-15 17:31:24 -050050| <a href="#Alpha_Methods">Alpha Methods</a> | get and set <a href="undocumented#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> |
61| <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 |
62| <a href="#Filter_Quality_Methods">Filter Quality Methods</a> | get and set <a href="undocumented#Filter_Quality">Filter Quality</a> |
63| <a href="#SkPaint_Flags">Flags</a> | attributes represented by single bits |
Cary Clark2a8c48b2018-02-15 17:31:24 -050064| <a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | custom sized bitmap <a href="undocumented#Glyph">Glyphs</a> |
Cary Clark5081eed2018-01-22 07:55:48 -050065| <a href="#Font_Metrics">Font Metrics</a> | common glyph dimensions |
Cary Clark2a8c48b2018-02-15 17:31:24 -050066| <a href="#Full_Hinting_Spacing">Full Hinting Spacing</a> | glyph spacing affected by hinting |
Cary Clark5081eed2018-01-22 07:55:48 -050067| <a href="#SkPaint_Hinting">Hinting</a> | glyph outline adjustment |
68| <a href="#Image_Filter_Methods">Image Filter Methods</a> | get and set <a href="undocumented#Image_Filter">Image Filter</a> |
69| <a href="#Initializers">Initializers</a> | constructors and initialization |
Cary Clark2a8c48b2018-02-15 17:31:24 -050070| <a href="#LCD_Text">LCD Text</a> | text relying on the order of <a href="undocumented#RGB">Color RGB</a> stripes |
71| <a href="#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 -050072| <a href="#Management">Management</a> | paint copying, moving, comparing |
73| <a href="#Mask_Filter_Methods">Mask Filter Methods</a> | get and set <a href="undocumented#Mask_Filter">Mask Filter</a> |
74| <a href="#Measure_Text">Measure Text</a> | width, height, bounds of text |
75| <a href="#Miter_Limit">Miter Limit</a> | maximum length of stroked corners |
76| <a href="#Path_Effect_Methods">Path Effect Methods</a> | get and set <a href="undocumented#Path_Effect">Path Effect</a> |
77| <a href="#Shader_Methods">Shader Methods</a> | get and set <a href="undocumented#Shader">Shader</a> |
78| <a href="#Stroke_Cap">Stroke Cap</a> | decorations at ends of open strokes |
79| <a href="#Stroke_Join">Stroke Join</a> | decoration at corners of strokes |
80| <a href="#Stroke_Width">Stroke Width</a> | thickness perpendicular to geometry |
81| <a href="#SkPaint_Style">Style</a> | geometry filling, stroking |
Cary Clark2a8c48b2018-02-15 17:31:24 -050082| <a href="#Style_Fill">Style Fill</a> | fill and stroke |
83| <a href="#Style_Hairline">Style Hairline</a> | lines and curves with minimal width |
84| <a href="#Style_Stroke">Style Stroke</a> | lines and curves with width |
85| <a href="#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 |
Cary Clark2a8c48b2018-02-15 17:31:24 -050087| <a href="#Text_Encoding">Text Encoding</a> | text encoded as characters or <a href="undocumented#Glyph">Glyphs</a> |
Cary Clark5081eed2018-01-22 07:55:48 -050088| <a href="#Text_Intercepts">Text Intercepts</a> | advanced underline, strike through |
Cary Clark2a8c48b2018-02-15 17:31:24 -050089| <a href="#Text_Path">Text Path</a> | geometry of <a href="undocumented#Glyph">Glyphs</a> |
Cary Clark5081eed2018-01-22 07:55:48 -050090| <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> |
Cary Clark78de7512018-02-07 07:27:09 -050094| <a href="#Utility">Utility</a> | rarely called management functions |
Cary Clark5081eed2018-01-22 07:55:48 -050095| <a href="#Vertical_Text">Vertical Text</a> | orient text from top to bottom |
Cary Clark12799e12017-07-28 15:18:29 -040096
Cary Clark4855f782018-02-06 09:41:53 -050097## <a name="Constant"></a> Constant
Cary Clark12799e12017-07-28 15:18:29 -040098
Cary Clark5081eed2018-01-22 07:55:48 -050099| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500100| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500101| <a href="#SkPaint_Align">Align</a> | glyph locations relative to text position |
102| <a href="#SkPaint_Cap">Cap</a> | start and end geometry on stroked shapes |
103| <a href="#SkPaint_Flags">Flags</a> | values described by bits and masks |
Cary Clark5081eed2018-01-22 07:55:48 -0500104| <a href="#SkPaint_Hinting">Hinting</a> | level of glyph outline adjustment |
105| <a href="#SkPaint_Join">Join</a> | corner geometry on stroked shapes |
106| <a href="#SkPaint_Style">Style</a> | stroke, fill, or both |
107| <a href="#SkPaint_TextEncoding">TextEncoding</a> | character or glyph encoded size |
Cary Clark08895c42018-02-01 09:37:32 -0500108| _anonymous | number of <a href="#SkPaint_Style">Style</a> defines |
109| _anonymous_2 | number of <a href="#Text_Align">Text Align</a> values |
Cary Clark12799e12017-07-28 15:18:29 -0400110
Cary Clark4855f782018-02-06 09:41:53 -0500111## <a name="Class_or_Struct"></a> Class or Struct
Cary Clark12799e12017-07-28 15:18:29 -0400112
Cary Clark5081eed2018-01-22 07:55:48 -0500113| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500114| --- | --- |
115| <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 -0400116
Cary Clark4855f782018-02-06 09:41:53 -0500117## <a name="Constructor"></a> Constructor
Cary Clark12799e12017-07-28 15:18:29 -0400118
Cary Clark5081eed2018-01-22 07:55:48 -0500119| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500120| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500121| <a href="#SkPaint_empty_constructor">SkPaint()</a> | constructs with default values |
122| <a href="#SkPaint_move_SkPaint">SkPaint(SkPaint&& paint)</a> | moves paint without copying it |
123| <a href="#SkPaint_copy_const_SkPaint">SkPaint(const SkPaint& paint)</a> | makes a shallow copy |
Cary Clark08895c42018-02-01 09:37:32 -0500124| <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 -0400125
Cary Clark4855f782018-02-06 09:41:53 -0500126## <a name="Operator"></a> Operator
Cary Clark12799e12017-07-28 15:18:29 -0400127
Cary Clark5081eed2018-01-22 07:55:48 -0500128| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500129| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500130| <a href="#SkPaint_notequal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | compares paints for inequality |
131| <a href="#SkPaint_move_operator">operator=(SkPaint&& paint)</a> | moves paint without copying it |
132| <a href="#SkPaint_copy_operator">operator=(const SkPaint& paint)</a> | makes a shallow copy |
133| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | compares paints for equality |
Cary Clark12799e12017-07-28 15:18:29 -0400134
Cary Clark4855f782018-02-06 09:41:53 -0500135## <a name="Member_Function"></a> Member Function
Cary Clark12799e12017-07-28 15:18:29 -0400136
Cary Clark5081eed2018-01-22 07:55:48 -0500137| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500138| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500139| <a href="#SkPaint_breakText">breakText</a> | returns text that fits in a width |
140| <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> | returns true if settings allow for fast bounds computation |
141| <a href="#SkPaint_computeFastBounds">computeFastBounds</a> | returns fill bounds for quick reject tests |
142| <a href="#SkPaint_computeFastStrokeBounds">computeFastStrokeBounds</a> | returns stroke bounds for quick reject tests |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500143| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="undocumented#Glyph">Glyphs</a> |
144| <a href="#SkPaint_countText">countText</a> | returns number of <a href="undocumented#Glyph">Glyphs</a> in text |
Cary Clark5081eed2018-01-22 07:55:48 -0500145| <a href="#SkPaint_doComputeFastBounds">doComputeFastBounds</a> | returns bounds for quick reject tests |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500146| <a href="#SkPaint_getAlpha">getAlpha</a> | returns <a href="undocumented#Alpha">Color Alpha</a>, color opacity |
Cary Clark5081eed2018-01-22 07:55:48 -0500147| <a href="#SkPaint_getBlendMode">getBlendMode</a> | returns <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with <a href="undocumented#Device">Device</a> |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500148| <a href="#SkPaint_getColor">getColor</a> | returns <a href="undocumented#Alpha">Color Alpha</a> and <a href="undocumented#RGB">Color RGB</a>, one drawing color |
Cary Clark5081eed2018-01-22 07:55:48 -0500149| <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 |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500181| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="undocumented#Glyph">Glyphs</a> into text |
Cary Clark5081eed2018-01-22 07:55:48 -0500182| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | returns true if Anti-alias is set |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500183| <a href="#SkPaint_isAutohinted">isAutohinted</a> | returns true if <a href="undocumented#Glyph">Glyphs</a> are always hinted |
184| <a href="#SkPaint_isDevKernText">isDevKernText</a> | returns true if <a href="#Full_Hinting_Spacing">Full Hinting Spacing</a> is set |
Cary Clark5081eed2018-01-22 07:55:48 -0500185| <a href="#SkPaint_isDither">isDither</a> | returns true if <a href="#Dither">Dither</a> is set |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500186| <a href="#SkPaint_isEmbeddedBitmapText">isEmbeddedBitmapText</a> | returns true if <a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is set |
Cary Clark5081eed2018-01-22 07:55:48 -0500187| <a href="#SkPaint_isFakeBoldText">isFakeBoldText</a> | returns true if <a href="#Fake_Bold">Fake Bold</a> is set |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500188| <a href="#SkPaint_isLCDRenderText">isLCDRenderText</a> | returns true if <a href="#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 Clark2a8c48b2018-02-15 17:31:24 -0500190| <a href="#SkPaint_isSrcOver">isSrcOver</a> | returns true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
191| <a href="#SkPaint_isSubpixelText">isSubpixelText</a> | returns true if <a href="#Subpixel_Text">Subpixel Text</a> is set |
Cary Clark5081eed2018-01-22 07:55:48 -0500192| <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 |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500204| <a href="#SkPaint_setAlpha">setAlpha</a> | sets <a href="undocumented#Alpha">Color Alpha</a>, color opacity |
Cary Clark5081eed2018-01-22 07:55:48 -0500205| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | sets or clears Anti-alias |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500206| <a href="#SkPaint_setAutohinted">setAutohinted</a> | sets <a href="undocumented#Glyph">Glyphs</a> to always be hinted |
Cary Clark5081eed2018-01-22 07:55:48 -0500207| <a href="#SkPaint_setBlendMode">setBlendMode</a> | sets <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with destination |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500208| <a href="#SkPaint_setColor">setColor</a> | sets <a href="undocumented#Alpha">Color Alpha</a> and <a href="undocumented#RGB">Color RGB</a>, one drawing color |
Cary Clark5081eed2018-01-22 07:55:48 -0500209| <a href="#SkPaint_setColorFilter">setColorFilter</a> | sets <a href="undocumented#Color_Filter">Color Filter</a>, alters color |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500210| <a href="#SkPaint_setDevKernText">setDevKernText</a> | sets or clears <a href="#Full_Hinting_Spacing">Full Hinting Spacing</a> |
Cary Clark5081eed2018-01-22 07:55:48 -0500211| <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 |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500213| <a href="#SkPaint_setEmbeddedBitmapText">setEmbeddedBitmapText</a> | sets or clears <a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> |
Cary Clark5081eed2018-01-22 07:55:48 -0500214| <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 |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500219| <a href="#SkPaint_setLCDRenderText">setLCDRenderText</a> | sets or clears <a href="#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 |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500229| <a href="#SkPaint_setSubpixelText">setSubpixelText</a> | sets or clears <a href="#Subpixel_Text">Subpixel Text</a> |
Cary Clark5081eed2018-01-22 07:55:48 -0500230| <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 |
Cary Clark12799e12017-07-28 15:18:29 -0400239
Cary Clark08895c42018-02-01 09:37:32 -0500240## <a name="Initializers"></a> Initializers
Cary Clark12799e12017-07-28 15:18:29 -0400241
Cary Clark493df1f2017-08-25 13:14:33 -0400242<a name="SkPaint_empty_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400243## SkPaint
244
Cary Clarka560c472017-11-27 10:44:06 -0500245<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400246SkPaint()
247</pre>
248
Cary Clark8cc16c72017-08-25 11:51:49 -0400249Constructs <a href="#Paint">Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400250
251| attribute | default value |
252| --- | --- |
Cary Clarka560c472017-11-27 10:44:06 -0500253| Anti-alias | false |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500254| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400255| <a href="undocumented#Color">Color</a> | <a href="undocumented#SK_ColorBLACK">SK ColorBLACK</a> |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500256| <a href="undocumented#Alpha">Color Alpha</a> | 255 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400257| <a href="undocumented#Color_Filter">Color Filter</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400258| <a href="#Dither">Dither</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400259| <a href="undocumented#Draw_Looper">Draw Looper</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400260| <a href="#Fake_Bold">Fake Bold</a> | false |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500261| <a href="undocumented#Filter_Quality">Filter Quality</a> | <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a> |
262| <a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400263| <a href="#Automatic_Hinting">Automatic Hinting</a> | false |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500264| <a href="#Full_Hinting_Spacing">Full Hinting Spacing</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400265| <a href="#SkPaint_Hinting">Hinting</a> | <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400266| <a href="undocumented#Image_Filter">Image Filter</a> | nullptr |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500267| <a href="#LCD_Text">LCD Text</a> | false |
268| <a href="#Linear_Text">Linear Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400269| <a href="#Miter_Limit">Miter Limit</a> | 4 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400270| <a href="undocumented#Mask_Filter">Mask Filter</a> | nullptr |
271| <a href="undocumented#Path_Effect">Path Effect</a> | nullptr |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400272| <a href="undocumented#Shader">Shader</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400273| <a href="#SkPaint_Style">Style</a> | <a href="#SkPaint_kFill_Style">kFill Style</a> |
274| <a href="#Text_Align">Text Align</a> | <a href="#SkPaint_kLeft_Align">kLeft Align</a> |
275| <a href="#Text_Encoding">Text Encoding</a> | <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> |
276| <a href="#Text_Scale_X">Text Scale X</a> | 1 |
277| <a href="#Text_Size">Text Size</a> | 12 |
278| <a href="#Text_Skew_X">Text Skew X</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400279| <a href="undocumented#Typeface">Typeface</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400280| <a href="#Stroke_Cap">Stroke Cap</a> | <a href="#SkPaint_kButt_Cap">kButt Cap</a> |
281| <a href="#Stroke_Join">Stroke Join</a> | <a href="#SkPaint_kMiter_Join">kMiter Join</a> |
282| <a href="#Stroke_Width">Stroke Width</a> | 0 |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500283| <a href="#Subpixel_Text">Subpixel Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400284| <a href="#Vertical_Text">Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400285
286The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500287paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400288build system.
289
290### Return Value
291
Cary Clark8cc16c72017-08-25 11:51:49 -0400292default initialized <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400293
294### Example
295
296<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
297
298---
299
Cary Clark73fa9722017-08-29 17:36:51 -0400300<a name="SkPaint_copy_const_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400301## SkPaint
302
Cary Clarka560c472017-11-27 10:44:06 -0500303<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400304SkPaint(const SkPaint& paint)
305</pre>
306
Cary Clark8cc16c72017-08-25 11:51:49 -0400307Makes 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 +0000308<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 -0400309between 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 -0400310their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400311
Update Docs949cfd42018-01-22 05:50:26 +0000312The 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 -0400313<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 -0400314This 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 -0400315
316### Parameters
317
Cary Clark73fa9722017-08-29 17:36:51 -0400318<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 -0400319original to copy</td>
320 </tr>
321</table>
322
323### Return Value
324
Cary Clark73fa9722017-08-29 17:36:51 -0400325shallow copy of <a href="#SkPaint_copy_const_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400326
327### Example
328
329<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
330
331#### Example Output
332
333~~~~
334SK_ColorRED == paint1.getColor()
335SK_ColorBLUE == paint2.getColor()
336~~~~
337
338</fiddle-embed></div>
339
340---
341
Cary Clark73fa9722017-08-29 17:36:51 -0400342<a name="SkPaint_move_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400343## SkPaint
344
Cary Clarka560c472017-11-27 10:44:06 -0500345<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400346SkPaint(SkPaint&& paint)
347</pre>
348
Cary Clarkd0530ba2017-09-14 11:25:39 -0400349Implements a move constructor to avoid increasing the reference counts
Cary Clark73fa9722017-08-29 17:36:51 -0400350of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400351
Cary Clark73fa9722017-08-29 17:36:51 -0400352After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400353
354### Parameters
355
Cary Clark73fa9722017-08-29 17:36:51 -0400356<table> <tr> <td><a name="SkPaint_move_SkPaint_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400357original to move</td>
358 </tr>
359</table>
360
361### Return Value
362
Cary Clark73fa9722017-08-29 17:36:51 -0400363content of <a href="#SkPaint_move_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400364
365### Example
366
367<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
368
369#### Example Output
370
371~~~~
372path effect unique: true
373~~~~
374
375</fiddle-embed></div>
376
377---
378
Cary Clark493df1f2017-08-25 13:14:33 -0400379<a name="SkPaint_reset"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400380## reset
381
Cary Clarka560c472017-11-27 10:44:06 -0500382<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400383void reset()
384</pre>
385
Cary Clarkbc5697d2017-10-04 14:31:33 -0400386Sets all <a href="#Paint">Paint</a> contents to their initial values. This is equivalent to replacing
387<a href="#Paint">Paint</a> with the result of <a href="#SkPaint_empty_constructor">SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400388
389### Example
390
391<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
392
393#### Example Output
394
395~~~~
396paint1 == paint2
397~~~~
398
399</fiddle-embed></div>
400
401---
402
Cary Clark493df1f2017-08-25 13:14:33 -0400403<a name="SkPaint_destructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400404## ~SkPaint
405
Cary Clarka560c472017-11-27 10:44:06 -0500406<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400407~SkPaint()
408</pre>
409
Cary Clark8cc16c72017-08-25 11:51:49 -0400410Decreases <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 +0000411<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 -0400412objects containing <a href="undocumented#Reference_Count">Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400413
414---
415
Cary Clark08895c42018-02-01 09:37:32 -0500416## <a name="Management"></a> Management
Cary Clark12799e12017-07-28 15:18:29 -0400417
Cary Clarka560c472017-11-27 10:44:06 -0500418<a name="SkPaint_copy_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400419## operator=
420
Cary Clarka560c472017-11-27 10:44:06 -0500421<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400422SkPaint& operator=(const SkPaint& paint)
423</pre>
424
Cary Clark8cc16c72017-08-25 11:51:49 -0400425Makes 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 +0000426<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 -0500427between 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 -0400428prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clarka560c472017-11-27 10:44:06 -0500429resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_operator_paint">paint</a>
430are increased by one. <a href="#SkPaint_copy_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400431
432### Parameters
433
Cary Clarka560c472017-11-27 10:44:06 -0500434<table> <tr> <td><a name="SkPaint_copy_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400435original to copy</td>
436 </tr>
437</table>
438
439### Return Value
440
Cary Clarka560c472017-11-27 10:44:06 -0500441content of <a href="#SkPaint_copy_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400442
443### Example
444
445<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
446
447#### Example Output
448
449~~~~
450SK_ColorRED == paint1.getColor()
451SK_ColorRED == paint2.getColor()
452~~~~
453
454</fiddle-embed></div>
455
456---
457
Cary Clarka560c472017-11-27 10:44:06 -0500458<a name="SkPaint_move_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400459## operator=
460
Cary Clarka560c472017-11-27 10:44:06 -0500461<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400462SkPaint& operator=(SkPaint&& paint)
463</pre>
464
Cary Clarka560c472017-11-27 10:44:06 -0500465Moves the <a href="#SkPaint_move_operator_paint">paint</a> to avoid increasing the reference counts
466of 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 -0400467prior destination are decreased by one; those objects are deleted if the resulting count
468is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400469
Cary Clarka560c472017-11-27 10:44:06 -0500470After the call, <a href="#SkPaint_move_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400471
472### Parameters
473
Cary Clarka560c472017-11-27 10:44:06 -0500474<table> <tr> <td><a name="SkPaint_move_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400475original to move</td>
476 </tr>
477</table>
478
479### Return Value
480
Cary Clarka560c472017-11-27 10:44:06 -0500481content of <a href="#SkPaint_move_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400482
483### Example
484
485<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
486
487#### Example Output
488
489~~~~
490SK_ColorRED == paint2.getColor()
491~~~~
492
493</fiddle-embed></div>
494
495---
496
Cary Clark493df1f2017-08-25 13:14:33 -0400497<a name="SkPaint_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400498## operator==
499
Cary Clarka560c472017-11-27 10:44:06 -0500500<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400501bool operator==(const SkPaint& a, const SkPaint& b)
502</pre>
503
Cary Clark8cc16c72017-08-25 11:51:49 -0400504Compares <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 +0000505if <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 -0400506<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 -0400507
508### Parameters
509
Cary Clark8cc16c72017-08-25 11:51:49 -0400510<table> <tr> <td><a name="SkPaint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
511<a href="#Paint">Paint</a> to compare</td>
512 </tr> <tr> <td><a name="SkPaint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
513<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400514 </tr>
515</table>
516
517### Return Value
518
Cary Clark8cc16c72017-08-25 11:51:49 -0400519true if <a href="#Paint">Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400520
521### Example
522
523<div><fiddle-embed name="7481a948e34672720337a631830586dd">
524
525#### Example Output
526
527~~~~
528paint1 == paint2
529paint1 != paint2
530~~~~
531
532</fiddle-embed></div>
533
534---
535
Cary Clarka560c472017-11-27 10:44:06 -0500536<a name="SkPaint_notequal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400537## operator!=
538
Cary Clarka560c472017-11-27 10:44:06 -0500539<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400540bool operator!=(const SkPaint& a, const SkPaint& b)
541</pre>
542
Cary Clarka560c472017-11-27 10:44:06 -0500543Compares <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 +0000544if <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 -0400545<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 -0400546
547### Parameters
548
Cary Clarka560c472017-11-27 10:44:06 -0500549<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400550<a href="#Paint">Paint</a> to compare</td>
Cary Clarka560c472017-11-27 10:44:06 -0500551 </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400552<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400553 </tr>
554</table>
555
556### Return Value
557
Cary Clark8cc16c72017-08-25 11:51:49 -0400558true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400559
560### Example
561
562<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
563
564#### Example Output
565
566~~~~
567paint1 == paint2
568paint1 == paint2
569~~~~
570
571</fiddle-embed></div>
572
573---
574
Cary Clark493df1f2017-08-25 13:14:33 -0400575<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400576## getHash
577
Cary Clarka560c472017-11-27 10:44:06 -0500578<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400579uint32_t getHash() const
580</pre>
581
Cary Clark8cc16c72017-08-25 11:51:49 -0400582Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400583Identical hashes guarantee that the paints are
584equivalent, but differing hashes do not guarantee that the paints have differing
585contents.
586
Cary Clark8cc16c72017-08-25 11:51:49 -0400587If <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 -0400588their hashes are also equal.
589
590The hash returned is platform and implementation specific.
591
592### Return Value
593
594a shallow hash
595
596### Example
597
598<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
599
600#### Example Output
601
602~~~~
603paint1 == paint2
604paint1.getHash() == paint2.getHash()
605~~~~
606
607</fiddle-embed></div>
608
609---
610
Cary Clark08895c42018-02-01 09:37:32 -0500611## <a name="Hinting"></a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400612
Cary Clark8cc16c72017-08-25 11:51:49 -0400613## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400614
Cary Clarka560c472017-11-27 10:44:06 -0500615<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400616enum <a href="#Hinting">Hinting</a> {
617<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
618<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
619<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
620<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark1a8d7622018-03-05 13:26:16 -0500621};
622</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400623
Cary Clark8cc16c72017-08-25 11:51:49 -0400624<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
625look 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 -0400626muted effect or no effect at all depending on the platform.
627
Cary Clark7cfcbca2018-01-04 16:11:51 -0500628The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark2a8c48b2018-02-15 17:31:24 -0500629as the <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400630
631### Constants
632
633<table>
634 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400635 <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 -0500636With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
637bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400638outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -0500639to 26.6 fractional pixels.
640</td>
Cary Clark12799e12017-07-28 15:18:29 -0400641 </tr>
642 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400643 <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 -0500644With FreeType, this is equivalent in spirit to the
645FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400646lighter hinting algorithm for non-monochrome modes.
Cary Clark1a8d7622018-03-05 13:26:16 -0500647Generated <a href="undocumented#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.
648</td>
Cary Clark12799e12017-07-28 15:18:29 -0400649 </tr>
650 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400651 <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 -0500652With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
653choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -0500654gray-level rendering.
655</td>
Cary Clark12799e12017-07-28 15:18:29 -0400656 </tr>
657 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -0500658 <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
659FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
660FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
661horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -0500662variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
663</td>
Cary Clark12799e12017-07-28 15:18:29 -0400664 </tr>
665</table>
666
Cary Clark7cfcbca2018-01-04 16:11:51 -0500667On Windows with DirectWrite, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400668
Cary Clark8cc16c72017-08-25 11:51:49 -0400669<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400670Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400671
672
673
Cary Clark493df1f2017-08-25 13:14:33 -0400674<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400675## getHinting
676
Cary Clarka560c472017-11-27 10:44:06 -0500677<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400678Hinting getHinting() const
679</pre>
680
681Returns level of glyph outline adjustment.
682
683### Return Value
684
Cary Clark8cc16c72017-08-25 11:51:49 -0400685one 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 -0400686
687### Example
688
689<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
690
691#### Example Output
692
693~~~~
694SkPaint::kNormal_Hinting == paint.getHinting()
695~~~~
696
697</fiddle-embed></div>
698
699---
700
Cary Clark493df1f2017-08-25 13:14:33 -0400701<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400702## setHinting
703
Cary Clarka560c472017-11-27 10:44:06 -0500704<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400705void setHinting(Hinting hintingLevel)
706</pre>
707
708Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400709Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400710
Cary Clark8cc16c72017-08-25 11:51:49 -0400711| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400712| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400713| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400714| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
715| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
716| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400717
718### Parameters
719
Cary Clark8cc16c72017-08-25 11:51:49 -0400720<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
721one 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 -0400722 </tr>
723</table>
724
725### Example
726
727<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
728
729#### Example Output
730
731~~~~
732paint1 == paint2
733~~~~
734
735</fiddle-embed></div>
736
737---
738
Cary Clark08895c42018-02-01 09:37:32 -0500739## <a name="Flags"></a> Flags
Cary Clark12799e12017-07-28 15:18:29 -0400740
Cary Clark8cc16c72017-08-25 11:51:49 -0400741## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400742
Cary Clarka560c472017-11-27 10:44:06 -0500743<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400744enum <a href="#Flags">Flags</a> {
745<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
746<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
747<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
748<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
749<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
750<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
751<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
752<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
753<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
754<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
755<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400756
Cary Clark8cc16c72017-08-25 11:51:49 -0400757<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400758};
Cary Clark1a8d7622018-03-05 13:26:16 -0500759
Cary Clark12799e12017-07-28 15:18:29 -0400760</pre>
761
Cary Clark8cc16c72017-08-25 11:51:49 -0400762The bit values stored in <a href="#Flags">Flags</a>.
763The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400764with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400765All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400766multiple settings at once.
767
768### Constants
769
770<table>
771 <tr>
Cary Clarka560c472017-11-27 10:44:06 -0500772 <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 -0400773 </tr>
774 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400775 <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 -0400776 </tr>
777 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400778 <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 -0400779 </tr>
780 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500781 <td><a name="SkPaint_kLinearText_Flag"> <code><strong>SkPaint::kLinearText_Flag </strong></code> </a></td><td>0x0040</td><td>mask for setting <a href="#Linear_Text">Linear Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400782 </tr>
783 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500784 <td><a name="SkPaint_kSubpixelText_Flag"> <code><strong>SkPaint::kSubpixelText_Flag </strong></code> </a></td><td>0x0080</td><td>mask for setting <a href="#Subpixel_Text">Subpixel Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400785 </tr>
786 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500787 <td><a name="SkPaint_kDevKernText_Flag"> <code><strong>SkPaint::kDevKernText_Flag </strong></code> </a></td><td>0x0100</td><td>mask for setting <a href="#Full_Hinting_Spacing">Full Hinting Spacing</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400788 </tr>
789 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500790 <td><a name="SkPaint_kLCDRenderText_Flag"> <code><strong>SkPaint::kLCDRenderText_Flag </strong></code> </a></td><td>0x0200</td><td>mask for setting <a href="#LCD_Text">LCD Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400791 </tr>
792 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500793 <td><a name="SkPaint_kEmbeddedBitmapText_Flag"> <code><strong>SkPaint::kEmbeddedBitmapText_Flag </strong></code> </a></td><td>0x0400</td><td>mask for setting <a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400794 </tr>
795 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400796 <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 -0400797 </tr>
798 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400799 <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 -0400800 </tr>
801 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400802 <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 -0400803 </tr>
804 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400805 <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 -0400806 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400807<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400808
809</table>
810
Cary Clark8cc16c72017-08-25 11:51:49 -0400811## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400812
Cary Clark4855f782018-02-06 09:41:53 -0500813soonOnly valid for Android framework.
814
Cary Clarka560c472017-11-27 10:44:06 -0500815<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400816enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
817<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
818<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark1a8d7622018-03-05 13:26:16 -0500819};
820</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400821
822### Constants
823
824<table>
825 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500826 <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 -0400827 </tr>
828 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500829 <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 -0400830 </tr>
Cary Clark4855f782018-02-06 09:41:53 -0500831
Cary Clark12799e12017-07-28 15:18:29 -0400832</table>
833
Cary Clark493df1f2017-08-25 13:14:33 -0400834<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400835## getFlags
836
Cary Clarka560c472017-11-27 10:44:06 -0500837<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400838uint32_t getFlags() const
839</pre>
840
Cary Clark8cc16c72017-08-25 11:51:49 -0400841Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
842bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400843
844### Return Value
845
Cary Clark8cc16c72017-08-25 11:51:49 -0400846zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400847
848### Example
849
850<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
851
852#### Example Output
853
854~~~~
855(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
856~~~~
857
858</fiddle-embed></div>
859
860---
861
Cary Clark493df1f2017-08-25 13:14:33 -0400862<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400863## setFlags
864
Cary Clarka560c472017-11-27 10:44:06 -0500865<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400866void setFlags(uint32_t flags)
867</pre>
868
Cary Clark8cc16c72017-08-25 11:51:49 -0400869Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
870All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400871
872### Parameters
873
Cary Clark8cc16c72017-08-25 11:51:49 -0400874<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
875union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400876 </tr>
877</table>
878
879### Example
880
881<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
882
883#### Example Output
884
885~~~~
886paint.isAntiAlias()
887paint.isDither()
888~~~~
889
890</fiddle-embed></div>
891
892---
893
Cary Clark08895c42018-02-01 09:37:32 -0500894## <a name="Anti-alias"></a> Anti-alias
895
Cary Clarka560c472017-11-27 10:44:06 -0500896Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400897If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
Cary Clark2a8c48b2018-02-15 17:31:24 -0500898If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, pixels are drawn with <a href="undocumented#Alpha">Color Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400899
Cary Clark2a8c48b2018-02-15 17:31:24 -0500900The rule for <a href="undocumented#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400901passing through the pixel center may, but is not required to, draw the pixel.
902
Cary Clark2a8c48b2018-02-15 17:31:24 -0500903<a href="undocumented#Raster_Engine">Raster Engine</a> draws <a href="undocumented#Alias">Aliased</a> pixels whose centers are on or to the right of the start of an
Cary Clark4c06f5e2017-08-04 12:48:24 -0400904active <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 -0400905
Cary Clark7cfcbca2018-01-04 16:11:51 -0500906A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500907<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400908<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400909
Cary Clarka560c472017-11-27 10:44:06 -0500910The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400911
Cary Clarka560c472017-11-27 10:44:06 -0500912Anti-alias is disabled by default.
913Anti-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 -0400914at compile time.
915
916### Example
917
918<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
919A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400920The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clark1a8d7622018-03-05 13:26:16 -0500921<a href="undocumented#Alias">Aliasing</a> easier to see.
922</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400923
Cary Clark493df1f2017-08-25 13:14:33 -0400924<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400925## isAntiAlias
926
Cary Clarka560c472017-11-27 10:44:06 -0500927<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400928bool isAntiAlias() const
929</pre>
930
Cary Clark4c06f5e2017-08-04 12:48:24 -0400931If 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 -0400932
Cary Clark8cc16c72017-08-25 11:51:49 -0400933Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400934
935### Return Value
936
Cary Clark8cc16c72017-08-25 11:51:49 -0400937<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400938
939### Example
940
941<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
942
943#### Example Output
944
945~~~~
946paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
947paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
948~~~~
949
950</fiddle-embed></div>
951
952---
953
Cary Clark493df1f2017-08-25 13:14:33 -0400954<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400955## setAntiAlias
956
Cary Clarka560c472017-11-27 10:44:06 -0500957<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400958void setAntiAlias(bool aa)
959</pre>
960
Cary Clark4c06f5e2017-08-04 12:48:24 -0400961Requests, 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 -0400962partial transparency.
963
Cary Clark8cc16c72017-08-25 11:51:49 -0400964Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
965Clears <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 -0400966
967### Parameters
968
Cary Clark8cc16c72017-08-25 11:51:49 -0400969<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
970setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400971 </tr>
972</table>
973
974### Example
975
976<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
977
978#### Example Output
979
980~~~~
981paint1 == paint2
982~~~~
983
984</fiddle-embed></div>
985
986---
987
Cary Clark08895c42018-02-01 09:37:32 -0500988## <a name="Dither"></a> Dither
989
Cary Clark7cfcbca2018-01-04 16:11:51 -0500990<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -0400991This can help to smooth color transitions and reducing banding in gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -0500992Dithering lessens visible banding from <a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
993and <a href="SkImageInfo_Reference#kRGBA_8888_SkColorType">kRGBA_8888_SkColorType</a> gradients,
994and improves rendering into a <a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400995
996Dithering is always enabled for linear gradients drawing into
Cary Clark2a8c48b2018-02-15 17:31:24 -0500997<a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and <a href="SkImageInfo_Reference#kRGBA_8888_SkColorType">kRGBA_8888_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
998<a href="#Dither">Dither</a> cannot be enabled for <a href="SkImageInfo_Reference#kAlpha_8_SkColorType">kAlpha_8_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and
999<a href="SkImageInfo_Reference#kRGBA_F16_SkColorType">kRGBA_F16_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001000
Cary Clark8cc16c72017-08-25 11:51:49 -04001001<a href="#Dither">Dither</a> is disabled by default.
1002<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 -04001003at compile time.
1004
Cary Clark8cc16c72017-08-25 11:51:49 -04001005Some 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 -04001006
1007### Example
1008
1009<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
Cary Clark1a8d7622018-03-05 13:26:16 -05001010alternating nearby colors from pixel to pixel.
1011</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001012
1013### Example
1014
1015<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001016Drawing the gradient repeatedly with <a href="undocumented#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001017dither, making it easier to see.
1018</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001019
Cary Clark493df1f2017-08-25 13:14:33 -04001020<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001021## isDither
1022
Cary Clarka560c472017-11-27 10:44:06 -05001023<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001024bool isDither() const
1025</pre>
1026
1027If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001028Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001029
1030### Return Value
1031
Cary Clark8cc16c72017-08-25 11:51:49 -04001032<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001033
1034### Example
1035
1036<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1037
1038#### Example Output
1039
1040~~~~
1041paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1042paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1043~~~~
1044
1045</fiddle-embed></div>
1046
1047---
1048
Cary Clark493df1f2017-08-25 13:14:33 -04001049<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001050## setDither
1051
Cary Clarka560c472017-11-27 10:44:06 -05001052<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001053void setDither(bool dither)
1054</pre>
1055
1056Requests, but does not require, to distribute color error.
1057
Cary Clark8cc16c72017-08-25 11:51:49 -04001058Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1059Clears <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 -04001060
1061### Parameters
1062
Cary Clark8cc16c72017-08-25 11:51:49 -04001063<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1064setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001065 </tr>
1066</table>
1067
1068### Example
1069
1070<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1071
1072#### Example Output
1073
1074~~~~
1075paint1 == paint2
1076~~~~
1077
1078</fiddle-embed></div>
1079
1080### See Also
1081
Cary Clark2a8c48b2018-02-15 17:31:24 -05001082<a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001083
1084---
1085
1086### See Also
1087
Cary Clark2a8c48b2018-02-15 17:31:24 -05001088Gradient <a href="undocumented#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001089
Cary Clark08895c42018-02-01 09:37:32 -05001090## <a name="Device_Text"></a> Device Text
1091
Cary Clark2a8c48b2018-02-15 17:31:24 -05001092<a href="#LCD_Text">LCD Text</a> and <a href="#Subpixel_Text">Subpixel Text</a> increase the precision of glyph position.
Cary Clark12799e12017-07-28 15:18:29 -04001093
Cary Clark2a8c48b2018-02-15 17:31:24 -05001094When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="undocumented#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001095create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001096on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001097<a href="#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1098the color components as <a href="undocumented#RGB">Color RGB</a> or <a href="undocumented#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001099
Cary Clark7cfcbca2018-01-04 16:11:51 -05001100<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 -04001101As the opaqueness
1102of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1103
1104Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001105<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> and <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> are clear by default.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001106<a href="#LCD_Text">LCD Text</a> or <a href="#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 -04001107<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 -04001108
1109### Example
1110
Cary Clark2a8c48b2018-02-15 17:31:24 -05001111<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href="#LCD_Text">LCD Text</a> and <a href="#Subpixel_Text">Subpixel Text</a>.
1112When <a href="#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="undocumented#Glyph">Glyphs</a> are identical, but not evenly spaced.
Cary Clark1a8d7622018-03-05 13:26:16 -05001113When <a href="#Subpixel_Text">Subpixel Text</a> is enabled, the comma <a href="undocumented#Glyph">Glyphs</a> are unique, but appear evenly spaced.
1114</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001115
1116## <a name="Linear_Text"></a> Linear Text
1117
Cary Clark2a8c48b2018-02-15 17:31:24 -05001118<a href="#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 -04001119If <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 -04001120If <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 -04001121
Cary Clark493df1f2017-08-25 13:14:33 -04001122<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001123## isLinearText
1124
Cary Clarka560c472017-11-27 10:44:06 -05001125<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001126bool isLinearText() const
1127</pre>
1128
Cary Clark4c06f5e2017-08-04 12:48:24 -04001129If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001130
Cary Clark8cc16c72017-08-25 11:51:49 -04001131Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001132
1133### Return Value
1134
Cary Clark8cc16c72017-08-25 11:51:49 -04001135<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001136
1137### Example
1138
1139<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1140
1141### See Also
1142
Cary Clark8cc16c72017-08-25 11:51:49 -04001143<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001144
1145---
1146
Cary Clark493df1f2017-08-25 13:14:33 -04001147<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001148## setLinearText
1149
Cary Clarka560c472017-11-27 10:44:06 -05001150<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001151void setLinearText(bool linearText)
1152</pre>
1153
Cary Clark4c06f5e2017-08-04 12:48:24 -04001154If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001155By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001156
Cary Clark8cc16c72017-08-25 11:51:49 -04001157Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1158Clears <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 -04001159
1160### Parameters
1161
Cary Clark8cc16c72017-08-25 11:51:49 -04001162<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1163setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001164 </tr>
1165</table>
1166
1167### Example
1168
1169<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1170
1171### See Also
1172
Cary Clark8cc16c72017-08-25 11:51:49 -04001173<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001174
1175---
1176
1177## <a name="Subpixel_Text"></a> Subpixel Text
1178
Cary Clark7cfcbca2018-01-04 16:11:51 -05001179<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 -04001180As the opaqueness
1181of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1182
Cary Clark493df1f2017-08-25 13:14:33 -04001183<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001184## isSubpixelText
1185
Cary Clarka560c472017-11-27 10:44:06 -05001186<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001187bool isSubpixelText() const
1188</pre>
1189
Cary Clark2a8c48b2018-02-15 17:31:24 -05001190If true, <a href="undocumented#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001191
Cary Clark8cc16c72017-08-25 11:51:49 -04001192Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001193
1194### Return Value
1195
Cary Clark8cc16c72017-08-25 11:51:49 -04001196<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001197
1198### Example
1199
1200<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1201
1202#### Example Output
1203
1204~~~~
1205paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1206paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1207~~~~
1208
1209</fiddle-embed></div>
1210
1211---
1212
Cary Clark493df1f2017-08-25 13:14:33 -04001213<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001214## setSubpixelText
1215
Cary Clarka560c472017-11-27 10:44:06 -05001216<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001217void setSubpixelText(bool subpixelText)
1218</pre>
1219
Cary Clark2a8c48b2018-02-15 17:31:24 -05001220Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001221
Cary Clark8cc16c72017-08-25 11:51:49 -04001222Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1223Clears <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 -04001224
1225### Parameters
1226
Cary Clark8cc16c72017-08-25 11:51:49 -04001227<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1228setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001229 </tr>
1230</table>
1231
1232### Example
1233
1234<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1235
1236#### Example Output
1237
1238~~~~
1239paint1 == paint2
1240~~~~
1241
1242</fiddle-embed></div>
1243
1244---
1245
1246## <a name="LCD_Text"></a> LCD Text
1247
Cary Clark2a8c48b2018-02-15 17:31:24 -05001248When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="undocumented#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001249create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001250on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001251<a href="#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1252the color components as <a href="undocumented#RGB">Color RGB</a> or <a href="undocumented#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001253
Cary Clark493df1f2017-08-25 13:14:33 -04001254<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001255## isLCDRenderText
1256
Cary Clarka560c472017-11-27 10:44:06 -05001257<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001258bool isLCDRenderText() const
1259</pre>
1260
Cary Clark2a8c48b2018-02-15 17:31:24 -05001261If true, <a href="undocumented#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001262
Cary Clark8cc16c72017-08-25 11:51:49 -04001263Returns 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 -04001264
1265### Return Value
1266
Cary Clark8cc16c72017-08-25 11:51:49 -04001267<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001268
1269### Example
1270
1271<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1272
1273#### Example Output
1274
1275~~~~
1276paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1277paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1278~~~~
1279
1280</fiddle-embed></div>
1281
1282---
1283
Cary Clark493df1f2017-08-25 13:14:33 -04001284<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001285## setLCDRenderText
1286
Cary Clarka560c472017-11-27 10:44:06 -05001287<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001288void setLCDRenderText(bool lcdText)
1289</pre>
1290
Cary Clark2a8c48b2018-02-15 17:31:24 -05001291Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001292
Cary Clark8cc16c72017-08-25 11:51:49 -04001293Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1294Clears <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 -04001295
1296### Parameters
1297
Cary Clark8cc16c72017-08-25 11:51:49 -04001298<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1299setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001300 </tr>
1301</table>
1302
1303### Example
1304
1305<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1306
1307#### Example Output
1308
1309~~~~
1310paint1 == paint2
1311~~~~
1312
1313</fiddle-embed></div>
1314
1315---
1316
Cary Clark08895c42018-02-01 09:37:32 -05001317## <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
1318
Cary Clark2a8c48b2018-02-15 17:31:24 -05001319<a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001320<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 -05001321in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001322
Cary Clark7cfcbca2018-01-04 16:11:51 -05001323FreeType 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 -04001324the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001325Windows may select the bitmap glyph but is not required to do so.
1326<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001327
Cary Clark2a8c48b2018-02-15 17:31:24 -05001328<a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1329<a href="#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 -04001330<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001331
1332### Example
1333
Cary Clarka560c472017-11-27 10:44:06 -05001334<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001335<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001336 includes an embedded bitmap Glyph at odd font sizes. This example works
1337 on platforms that use FreeType as their Font_Engine.
1338 Windows may, but is not required to, return a bitmap glyph if
1339 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1340 bitmap.allocN32Pixels(30, 15);
1341 bitmap.eraseColor(0);
1342 SkCanvas offscreen(bitmap);
1343 SkPaint paint;
1344 paint.setAntiAlias(true);
1345 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001346 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001347 for (bool embedded : { false, true}) {
1348 paint.setEmbeddedBitmapText(embedded);
1349 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1350 }
1351 canvas->drawBitmap(bitmap, 0, 0);
1352 canvas->scale(10, 10);
1353 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001354
Cary Clarka560c472017-11-27 10:44:06 -05001355</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001356
Cary Clark493df1f2017-08-25 13:14:33 -04001357<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001358## isEmbeddedBitmapText
1359
Cary Clarka560c472017-11-27 10:44:06 -05001360<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001361bool isEmbeddedBitmapText() const
1362</pre>
1363
Cary Clark2a8c48b2018-02-15 17:31:24 -05001364If true, <a href="undocumented#Engine">Font Engine</a> may return <a href="undocumented#Glyph">Glyphs</a> from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001365
Cary Clark8cc16c72017-08-25 11:51:49 -04001366Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001367
1368### Return Value
1369
Cary Clark8cc16c72017-08-25 11:51:49 -04001370<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001371
1372### Example
1373
1374<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1375
1376#### Example Output
1377
1378~~~~
1379paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1380paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1381~~~~
1382
1383</fiddle-embed></div>
1384
1385---
1386
Cary Clark493df1f2017-08-25 13:14:33 -04001387<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001388## setEmbeddedBitmapText
1389
Cary Clarka560c472017-11-27 10:44:06 -05001390<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001391void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1392</pre>
1393
1394Requests, but does not require, to use bitmaps in fonts instead of outlines.
1395
Cary Clark8cc16c72017-08-25 11:51:49 -04001396Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1397Clears <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 -04001398
1399### Parameters
1400
Cary Clark8cc16c72017-08-25 11:51:49 -04001401<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1402setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001403 </tr>
1404</table>
1405
1406### Example
1407
1408<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1409
1410#### Example Output
1411
1412~~~~
1413paint1 == paint2
1414~~~~
1415
1416</fiddle-embed></div>
1417
1418---
1419
Cary Clark08895c42018-02-01 09:37:32 -05001420## <a name="Automatic_Hinting"></a> Automatic Hinting
1421
Cary Clark8cc16c72017-08-25 11:51:49 -04001422If <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 Clark2a8c48b2018-02-15 17:31:24 -05001423instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001424<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
1425<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001426
Cary Clark7cfcbca2018-01-04 16:11:51 -05001427<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 -04001428
Cary Clark493df1f2017-08-25 13:14:33 -04001429<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001430## isAutohinted
1431
Cary Clarka560c472017-11-27 10:44:06 -05001432<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001433bool isAutohinted() const
1434</pre>
1435
Cary Clark8cc16c72017-08-25 11:51:49 -04001436If 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 -05001437platform 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 Clark2a8c48b2018-02-15 17:31:24 -05001438<a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001439
Cary Clark8cc16c72017-08-25 11:51:49 -04001440Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001441
1442### Return Value
1443
Cary Clark8cc16c72017-08-25 11:51:49 -04001444<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001445
1446### Example
1447
1448<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1449
1450#### Example Output
1451
1452~~~~
1453paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1454paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1455~~~~
1456
1457</fiddle-embed></div>
1458
1459### See Also
1460
Cary Clark8cc16c72017-08-25 11:51:49 -04001461<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001462
1463---
1464
Cary Clark493df1f2017-08-25 13:14:33 -04001465<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001466## setAutohinted
1467
Cary Clarka560c472017-11-27 10:44:06 -05001468<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001469void setAutohinted(bool useAutohinter)
1470</pre>
1471
Cary Clark8cc16c72017-08-25 11:51:49 -04001472If <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 Clark2a8c48b2018-02-15 17:31:24 -05001473instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001474<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
1475<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001476
Cary Clark7cfcbca2018-01-04 16:11:51 -05001477Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001478
Cary Clark8cc16c72017-08-25 11:51:49 -04001479Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1480Clears <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 -04001481
1482### Parameters
1483
Cary Clark8cc16c72017-08-25 11:51:49 -04001484<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1485setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001486 </tr>
1487</table>
1488
1489### Example
1490
1491<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1492
1493### See Also
1494
Cary Clark8cc16c72017-08-25 11:51:49 -04001495<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001496
1497---
1498
Cary Clark08895c42018-02-01 09:37:32 -05001499## <a name="Vertical_Text"></a> Vertical Text
1500
Cary Clark4c06f5e2017-08-04 12:48:24 -04001501<a href="undocumented#Text">Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
Cary Clark2a8c48b2018-02-15 17:31:24 -05001502using <a href="undocumented#Advance">Font Advance</a> to position subsequent <a href="undocumented#Glyph">Glyphs</a>. By default, each successive glyph
Cary Clarkce101242017-09-01 15:51:02 -04001503is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
Cary Clark2a8c48b2018-02-15 17:31:24 -05001504<a href="undocumented#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001505
Cary Clark2a8c48b2018-02-15 17:31:24 -05001506Skia can translate text character codes as a series of <a href="undocumented#Glyph">Glyphs</a>, but does not implement
Cary Clark7cfcbca2018-01-04 16:11:51 -05001507font substitution,
1508textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1509a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001510into glyph series.
1511
Cary Clark8cc16c72017-08-25 11:51:49 -04001512<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 -04001513
Cary Clark8cc16c72017-08-25 11:51:49 -04001514<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1515<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 -04001516
Cary Clark8cc16c72017-08-25 11:51:49 -04001517<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1518<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1519<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001520
1521### Example
1522
1523<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1524
Cary Clark493df1f2017-08-25 13:14:33 -04001525<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001526## isVerticalText
1527
Cary Clarka560c472017-11-27 10:44:06 -05001528<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001529bool isVerticalText() const
1530</pre>
1531
Cary Clark2a8c48b2018-02-15 17:31:24 -05001532If true, <a href="undocumented#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001533
Cary Clark8cc16c72017-08-25 11:51:49 -04001534Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001535
1536### Return Value
1537
Cary Clark8cc16c72017-08-25 11:51:49 -04001538<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001539
1540### Example
1541
1542<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1543
1544#### Example Output
1545
1546~~~~
1547paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1548paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1549~~~~
1550
1551</fiddle-embed></div>
1552
1553---
1554
Cary Clark493df1f2017-08-25 13:14:33 -04001555<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001556## setVerticalText
1557
Cary Clarka560c472017-11-27 10:44:06 -05001558<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001559void setVerticalText(bool verticalText)
1560</pre>
1561
1562If true, text advance positions the next glyph below the previous glyph instead of to the
1563right of previous glyph.
1564
Cary Clark8cc16c72017-08-25 11:51:49 -04001565Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1566Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001567
1568### Parameters
1569
Cary Clark8cc16c72017-08-25 11:51:49 -04001570<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1571setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001572 </tr>
1573</table>
1574
1575### Example
1576
1577<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1578
1579#### Example Output
1580
1581~~~~
1582paint1 == paint2
1583~~~~
1584
1585</fiddle-embed></div>
1586
1587---
1588
Cary Clark08895c42018-02-01 09:37:32 -05001589## <a name="Fake_Bold"></a> Fake Bold
1590
Cary Clark8cc16c72017-08-25 11:51:49 -04001591<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 -05001592is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001593bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001594
Cary Clark7cfcbca2018-01-04 16:11:51 -05001595Use <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 -04001596is not available.
1597
Cary Clark7cfcbca2018-01-04 16:11:51 -05001598A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark2a8c48b2018-02-15 17:31:24 -05001599the font engine to create the bold <a href="undocumented#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark7cfcbca2018-01-04 16:11:51 -05001600by 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 -04001601
Cary Clark8cc16c72017-08-25 11:51:49 -04001602<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001603
1604### Example
1605
1606<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1607
Cary Clark493df1f2017-08-25 13:14:33 -04001608<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001609## isFakeBoldText
1610
Cary Clarka560c472017-11-27 10:44:06 -05001611<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001612bool isFakeBoldText() const
1613</pre>
1614
1615If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1616from outlines.
1617
Cary Clark8cc16c72017-08-25 11:51:49 -04001618Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001619
1620### Return Value
1621
Cary Clark8cc16c72017-08-25 11:51:49 -04001622<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001623
1624### Example
1625
1626<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1627
1628#### Example Output
1629
1630~~~~
1631paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1632paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1633~~~~
1634
1635</fiddle-embed></div>
1636
1637---
1638
Cary Clark493df1f2017-08-25 13:14:33 -04001639<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001640## setFakeBoldText
1641
Cary Clarka560c472017-11-27 10:44:06 -05001642<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001643void setFakeBoldText(bool fakeBoldText)
1644</pre>
1645
Cary Clarkce101242017-09-01 15:51:02 -04001646Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001647
Cary Clark8cc16c72017-08-25 11:51:49 -04001648Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1649Clears <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 -04001650
1651### Parameters
1652
Cary Clark8cc16c72017-08-25 11:51:49 -04001653<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1654setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001655 </tr>
1656</table>
1657
1658### Example
1659
1660<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1661
1662#### Example Output
1663
1664~~~~
1665paint1 == paint2
1666~~~~
1667
1668</fiddle-embed></div>
1669
1670---
1671
Cary Clark08895c42018-02-01 09:37:32 -05001672## <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
1673
Cary Clark2a8c48b2018-02-15 17:31:24 -05001674if <a href="#SkPaint_Hinting">Hinting</a> is set to <a href="#SkPaint_kFull_Hinting">kFull Hinting</a>, <a href="#Full_Hinting_Spacing">Full Hinting Spacing</a> adjusts the character
Cary Clark7cfcbca2018-01-04 16:11:51 -05001675spacing by the difference of the hinted and Unhinted <a href="undocumented#Left_Side_Bearing">Left Side Bearing</a> and
Cary Clark2a8c48b2018-02-15 17:31:24 -05001676<a href="undocumented#Right_Side_Bearing">Right Side Bearing</a>. <a href="#Full_Hinting_Spacing">Full Hinting Spacing</a> only applies to platforms that use
1677FreeType as their <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001678
Cary Clark2a8c48b2018-02-15 17:31:24 -05001679<a href="#Full_Hinting_Spacing">Full Hinting Spacing</a> is not related to text Kerning, where the space between
Cary Clark7cfcbca2018-01-04 16:11:51 -05001680a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001681
Cary Clark493df1f2017-08-25 13:14:33 -04001682<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001683## isDevKernText
1684
Cary Clarka560c472017-11-27 10:44:06 -05001685<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001686bool isDevKernText() const
1687</pre>
1688
1689Returns if character spacing may be adjusted by the hinting difference.
1690
Cary Clark8cc16c72017-08-25 11:51:49 -04001691Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001692
1693### Return Value
1694
Cary Clark8cc16c72017-08-25 11:51:49 -04001695<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001696
1697### Example
1698
1699<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1700
1701---
1702
Cary Clark493df1f2017-08-25 13:14:33 -04001703<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001704## setDevKernText
1705
Cary Clarka560c472017-11-27 10:44:06 -05001706<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001707void setDevKernText(bool devKernText)
1708</pre>
1709
1710Requests, but does not require, to use hinting to adjust glyph spacing.
1711
Cary Clark8cc16c72017-08-25 11:51:49 -04001712Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1713Clears <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 -04001714
1715### Parameters
1716
Cary Clark8cc16c72017-08-25 11:51:49 -04001717<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1718setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001719 </tr>
1720</table>
1721
1722### Example
1723
1724<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1725
1726#### Example Output
1727
1728~~~~
1729paint1 == paint2
1730~~~~
1731
1732</fiddle-embed></div>
1733
1734---
1735
Cary Clark08895c42018-02-01 09:37:32 -05001736## <a name="Filter_Quality_Methods"></a> Filter Quality Methods
1737
Cary Clark4c06f5e2017-08-04 12:48:24 -04001738<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1739A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1740A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001741If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1742in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001743
Cary Clark8cc16c72017-08-25 11:51:49 -04001744<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 -04001745
1746<table> <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001747 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1748 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1749 <td><a href="SkCanvas_Reference#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1750 <td><a href="SkCanvas_Reference#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001751</table>
1752
Cary Clarka560c472017-11-27 10:44:06 -05001753and 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 -04001754
Cary Clark2a8c48b2018-02-15 17:31:24 -05001755<a href="undocumented#Filter_Quality">Filter Quality</a> is <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04001756
1757### Example
1758
1759<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1760
Cary Clark493df1f2017-08-25 13:14:33 -04001761<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001762## getFilterQuality
1763
Cary Clarka560c472017-11-27 10:44:06 -05001764<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001765SkFilterQuality getFilterQuality() const
1766</pre>
1767
Cary Clark4c06f5e2017-08-04 12:48:24 -04001768Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001769draws faster; a higher setting looks better when the image is scaled.
1770
1771### Return Value
1772
Cary Clark2a8c48b2018-02-15 17:31:24 -05001773one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1774<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001775
1776### Example
1777
1778<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1779
1780#### Example Output
1781
1782~~~~
1783kNone_SkFilterQuality == paint.getFilterQuality()
1784~~~~
1785
1786</fiddle-embed></div>
1787
1788---
1789
Cary Clark493df1f2017-08-25 13:14:33 -04001790<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001791## setFilterQuality
1792
Cary Clarka560c472017-11-27 10:44:06 -05001793<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001794void setFilterQuality(SkFilterQuality quality)
1795</pre>
1796
Cary Clark4c06f5e2017-08-04 12:48:24 -04001797Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001798draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001799Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001800
1801### Parameters
1802
Cary Clark8cc16c72017-08-25 11:51:49 -04001803<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001804one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1805<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001806 </tr>
1807</table>
1808
1809### Example
1810
1811<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1812
1813#### Example Output
1814
1815~~~~
1816kHigh_SkFilterQuality == paint.getFilterQuality()
1817~~~~
1818
1819</fiddle-embed></div>
1820
1821### See Also
1822
Cary Clark4c06f5e2017-08-04 12:48:24 -04001823<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001824
1825---
1826
Cary Clark08895c42018-02-01 09:37:32 -05001827## <a name="Color_Methods"></a> Color Methods
Cary Clark12799e12017-07-28 15:18:29 -04001828
Cary Clarkab2621d2018-01-30 10:08:57 -05001829| name | description |
1830| --- | --- |
Cary Clark2a8c48b2018-02-15 17:31:24 -05001831| <a href="#SkPaint_getColor">getColor</a> | returns <a href="undocumented#Alpha">Color Alpha</a> and <a href="undocumented#RGB">Color RGB</a>, one drawing color |
1832| <a href="#SkPaint_setColor">setColor</a> | sets <a href="undocumented#Alpha">Color Alpha</a> and <a href="undocumented#RGB">Color RGB</a>, one drawing color |
Cary Clark12799e12017-07-28 15:18:29 -04001833
Cary Clark2a8c48b2018-02-15 17:31:24 -05001834<a href="undocumented#Color">Color</a> specifies the <a href="undocumented#RGB_Red">Color RGB Red</a>, <a href="undocumented#RGB_Blue">Color RGB Blue</a>, <a href="undocumented#RGB_Green">Color RGB Green</a>, and <a href="undocumented#Alpha">Color Alpha</a>
Cary Clarkab2621d2018-01-30 10:08:57 -05001835values used to draw a filled or stroked shape in a 32-bit value. Each component
1836occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1837All values in any combination are valid.
1838
Cary Clark2a8c48b2018-02-15 17:31:24 -05001839<a href="undocumented#Color">Color</a> is not <a href="undocumented#Premultiply">Premultiplied</a>; <a href="undocumented#Alpha">Color Alpha</a> sets the transparency independent of
1840<a href="undocumented#RGB">Color RGB</a>: <a href="undocumented#RGB_Red">Color RGB Red</a>, <a href="undocumented#RGB_Blue">Color RGB Blue</a>, and <a href="undocumented#RGB_Green">Color RGB Green</a>.
Cary Clarkab2621d2018-01-30 10:08:57 -05001841
Cary Clark2a8c48b2018-02-15 17:31:24 -05001842The bit positions of <a href="undocumented#Alpha">Color Alpha</a> and <a href="undocumented#RGB">Color RGB</a> are independent of the bit
Cary Clarkab2621d2018-01-30 10:08:57 -05001843positions on the output device, which may have more or fewer bits, and may have
1844a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001845
Cary Clark2a8c48b2018-02-15 17:31:24 -05001846| bit positions | <a href="undocumented#Alpha">Color Alpha</a> | <a href="undocumented#RGB_Red">Color RGB Red</a> | <a href="undocumented#RGB_Blue">Color RGB Blue</a> | <a href="undocumented#RGB_Green">Color RGB Green</a> |
Cary Clark12799e12017-07-28 15:18:29 -04001847| --- | --- | --- | --- | --- |
1848| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1849
1850### Example
1851
1852<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1853
Cary Clark493df1f2017-08-25 13:14:33 -04001854<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001855## getColor
1856
Cary Clarka560c472017-11-27 10:44:06 -05001857<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001858SkColor getColor() const
1859</pre>
1860
Cary Clark2a8c48b2018-02-15 17:31:24 -05001861Retrieves <a href="undocumented#Alpha">Alpha</a> and <a href="undocumented#RGB">Color RGB</a>, <a href="undocumented#Unpremultiply">Unpremultiplied</a>, packed into 32 bits.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001862Use 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 -04001863a color component.
1864
1865### Return Value
1866
Cary Clark2a8c48b2018-02-15 17:31:24 -05001867<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="undocumented#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001868
1869### Example
1870
1871<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1872
1873#### Example Output
1874
1875~~~~
1876Yellow is 100% red, 100% green, and 0% blue.
1877~~~~
1878
1879</fiddle-embed></div>
1880
1881### See Also
1882
Cary Clark4c06f5e2017-08-04 12:48:24 -04001883<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001884
1885---
1886
Cary Clark493df1f2017-08-25 13:14:33 -04001887<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001888## setColor
1889
Cary Clarka560c472017-11-27 10:44:06 -05001890<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001891void setColor(SkColor color)
1892</pre>
1893
Cary Clark2a8c48b2018-02-15 17:31:24 -05001894Sets <a href="undocumented#Alpha">Alpha</a> and <a href="undocumented#RGB">Color RGB</a> used when stroking and filling. The <a href="#SkPaint_setColor_color">color</a> is a 32-bit value,
1895<a href="undocumented#Unpremultiply">Unpremultiplied</a>, packing 8-bit components for <a href="undocumented#Alpha">Alpha</a>, <a href="undocumented#RGB_Red">Red</a>, <a href="undocumented#RGB_Blue">Blue</a>, and <a href="undocumented#RGB_Green">Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001896
1897### Parameters
1898
Cary Clark8cc16c72017-08-25 11:51:49 -04001899<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001900<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="undocumented#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001901 </tr>
1902</table>
1903
1904### Example
1905
1906<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1907
1908#### Example Output
1909
1910~~~~
1911green1 == green2
1912~~~~
1913
1914</fiddle-embed></div>
1915
1916### See Also
1917
Cary Clark8cc16c72017-08-25 11:51:49 -04001918<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 -04001919
1920---
1921
1922## <a name="Alpha_Methods"></a> Alpha Methods
1923
Cary Clark2a8c48b2018-02-15 17:31:24 -05001924<a href="undocumented#Alpha">Color Alpha</a> sets the transparency independent of <a href="undocumented#RGB">Color RGB</a>: <a href="undocumented#RGB_Red">Color RGB Red</a>, <a href="undocumented#RGB_Blue">Color RGB Blue</a>, and <a href="undocumented#RGB_Green">Color RGB Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001925
Cary Clark493df1f2017-08-25 13:14:33 -04001926<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001927## getAlpha
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 -04001930uint8_t getAlpha() const
1931</pre>
1932
Cary Clark2a8c48b2018-02-15 17:31:24 -05001933Retrieves <a href="undocumented#Alpha">Alpha</a> from the <a href="undocumented#Color">Color</a> used when stroking and filling.
Cary Clark12799e12017-07-28 15:18:29 -04001934
1935### Return Value
1936
Cary Clark2a8c48b2018-02-15 17:31:24 -05001937<a href="undocumented#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001938
1939### Example
1940
1941<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1942
1943#### Example Output
1944
1945~~~~
1946255 == paint.getAlpha()
1947~~~~
1948
1949</fiddle-embed></div>
1950
1951---
1952
Cary Clark493df1f2017-08-25 13:14:33 -04001953<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001954## setAlpha
1955
Cary Clarka560c472017-11-27 10:44:06 -05001956<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001957void setAlpha(U8CPU a)
1958</pre>
1959
Cary Clark2a8c48b2018-02-15 17:31:24 -05001960Replaces <a href="undocumented#Alpha">Alpha</a>, leaving <a href="undocumented#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001961unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001962build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1963<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 -04001964fully opaque.
1965
1966### Parameters
1967
Cary Clark8cc16c72017-08-25 11:51:49 -04001968<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001969<a href="undocumented#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001970 </tr>
1971</table>
1972
1973### Example
1974
1975<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1976
1977#### Example Output
1978
1979~~~~
19800x44112233 == paint.getColor()
1981~~~~
1982
1983</fiddle-embed></div>
1984
1985---
1986
Cary Clark493df1f2017-08-25 13:14:33 -04001987<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001988## setARGB
1989
Cary Clarka560c472017-11-27 10:44:06 -05001990<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001991void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
1992</pre>
1993
Cary Clark4c06f5e2017-08-04 12:48:24 -04001994Sets <a href="undocumented#Color">Color</a> used when drawing solid fills. The color components range from 0 to 255.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001995The color is <a href="undocumented#Unpremultiply">Unpremultiplied</a>; <a href="undocumented#Alpha">Alpha</a> sets the transparency independent of <a href="undocumented#RGB">Color RGB</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001996
1997### Parameters
1998
Cary Clark8cc16c72017-08-25 11:51:49 -04001999<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002000amount of <a href="undocumented#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002001 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002002amount of <a href="undocumented#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002003 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002004amount of <a href="undocumented#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002005 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002006amount of <a href="undocumented#RGB_Blue">Color RGB Blue</a>, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002007 </tr>
2008</table>
2009
2010### Example
2011
2012<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2013
2014#### Example Output
2015
2016~~~~
2017transRed1 == transRed2
2018~~~~
2019
2020</fiddle-embed></div>
2021
2022### See Also
2023
Cary Clark8cc16c72017-08-25 11:51:49 -04002024<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002025
2026---
2027
Cary Clark08895c42018-02-01 09:37:32 -05002028## <a name="Style"></a> Style
2029
Cary Clark8cc16c72017-08-25 11:51:49 -04002030<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2031Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002032
Cary Clark8cc16c72017-08-25 11:51:49 -04002033Set <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 -04002034The fill covers the area inside the geometry for most shapes.
2035
Cary Clark8cc16c72017-08-25 11:51:49 -04002036Set <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 -04002037
Cary Clark2a8c48b2018-02-15 17:31:24 -05002038## <a name="Style_Fill"></a> Style Fill
Cary Clark12799e12017-07-28 15:18:29 -04002039
2040### See Also
2041
Cary Clark2a8c48b2018-02-15 17:31:24 -05002042<a href="SkPath_Reference#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002043
Cary Clark2a8c48b2018-02-15 17:31:24 -05002044## <a name="Style_Stroke"></a> Style Stroke
Cary Clark12799e12017-07-28 15:18:29 -04002045
Cary Clarkbc5697d2017-10-04 14:31:33 -04002046The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002047<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>.
2048The 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 -04002049The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002050
Cary Clark8cc16c72017-08-25 11:51:49 -04002051As <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
Cary Clark2a8c48b2018-02-15 17:31:24 -05002052may have gaps, and if <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, <a href="undocumented#Alpha">Color Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04002053
Cary Clark2a8c48b2018-02-15 17:31:24 -05002054## <a name="Style_Hairline"></a> Style Hairline
Cary Clark12799e12017-07-28 15:18:29 -04002055
Cary Clark2a8c48b2018-02-15 17:31:24 -05002056<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Style_Hairline">Hairline</a>.
2057<a href="#Style_Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
Cary Clark7cfcbca2018-01-04 16:11:51 -05002058flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002059
Cary Clark2a8c48b2018-02-15 17:31:24 -05002060<a href="SkPath_Reference#Path">Path</a> drawing with <a href="#Style_Hairline">Hairline</a> may hit the same pixel more than once. For instance, <a href="SkPath_Reference#Path">Path</a> containing
2061two lines in one <a href="SkPath_Reference#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
Cary Clark8cc16c72017-08-25 11:51:49 -04002062pixel. 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 -05002063GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002064while stroking.
2065
Cary Clark8cc16c72017-08-25 11:51:49 -04002066## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002067
Cary Clarka560c472017-11-27 10:44:06 -05002068<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002069enum <a href="#SkPaint_Style">Style</a> {
2070<a href="#SkPaint_kFill_Style">kFill Style</a>,
2071<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2072<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark1a8d7622018-03-05 13:26:16 -05002073};
2074</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002075
Cary Clark8cc16c72017-08-25 11:51:49 -04002076Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002077The stroke and fill
2078share all paint attributes; for instance, they are drawn with the same color.
2079
Cary Clark8cc16c72017-08-25 11:51:49 -04002080Use <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> to avoid hitting the same pixels twice with a stroke draw and
Cary Clark12799e12017-07-28 15:18:29 -04002081a fill draw.
2082
2083### Constants
2084
2085<table>
2086 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002087 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002088Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="undocumented#Circle">Circles</a>, <a href="undocumented#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
2089<a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="SkImage_Reference#Image">Image</a>, <a href="undocumented#Patch">Patches</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Sprite">Sprites</a>, and <a href="undocumented#Vertices">Vertices</a> are painted as if
Cary Clark8cc16c72017-08-25 11:51:49 -04002090<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002091The <a href="SkPath_Reference#Fill_Type">Path Fill Type</a> specifies additional rules to fill the area outside the path edge,
Cary Clark12799e12017-07-28 15:18:29 -04002092and to create an unfilled hole inside the shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05002093<a href="#SkPaint_Style">Style</a> is set to <a href="#SkPaint_kFill_Style">kFill Style</a> by default.
2094</td>
Cary Clark12799e12017-07-28 15:18:29 -04002095 </tr>
2096 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002097 <td><a name="SkPaint_kStroke_Style"> <code><strong>SkPaint::kStroke_Style </strong></code> </a></td><td>1</td><td>Set to stroke geometry.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002098Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="undocumented#Arc">Arcs</a>, <a href="undocumented#Circle">Circles</a>, <a href="undocumented#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
2099<a href="undocumented#Arc">Arcs</a>, <a href="undocumented#Line">Lines</a>, and points, are always drawn as if <a href="#SkPaint_kStroke_Style">kStroke Style</a> is set,
Cary Clark8cc16c72017-08-25 11:51:49 -04002100and ignore the set <a href="#SkPaint_Style">Style</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05002101The stroke construction is unaffected by the <a href="SkPath_Reference#Fill_Type">Path Fill Type</a>.
2102</td>
Cary Clark12799e12017-07-28 15:18:29 -04002103 </tr>
2104 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002105 <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 Clark2a8c48b2018-02-15 17:31:24 -05002106Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="undocumented#Circle">Circles</a>, <a href="undocumented#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
2107<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="SkPath_Reference#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
Cary Clark1a8d7622018-03-05 13:26:16 -05002108and the set <a href="SkPath_Reference#Fill_Type">Path Fill Type</a> is ignored.
2109</td>
Cary Clark12799e12017-07-28 15:18:29 -04002110 </tr>
2111
2112</table>
2113
Cary Clark8cc16c72017-08-25 11:51:49 -04002114## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002115
Cary Clarka560c472017-11-27 10:44:06 -05002116<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002117enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002118<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark1a8d7622018-03-05 13:26:16 -05002119};
2120</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002121
2122### Constants
2123
2124<table>
2125 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002126 <td><a name="SkPaint_kStyleCount"> <code><strong>SkPaint::kStyleCount </strong></code> </a></td><td>3</td><td>The number of different <a href="#SkPaint_Style">Style</a> values defined.
Cary Clark1a8d7622018-03-05 13:26:16 -05002127May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.
2128</td>
Cary Clark12799e12017-07-28 15:18:29 -04002129 </tr>
2130
2131</table>
2132
Cary Clark493df1f2017-08-25 13:14:33 -04002133<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002134## getStyle
2135
Cary Clarka560c472017-11-27 10:44:06 -05002136<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002137Style getStyle() const
2138</pre>
2139
2140Whether the geometry is filled, stroked, or filled and stroked.
2141
2142### Return Value
2143
Cary Clark8cc16c72017-08-25 11:51:49 -04002144one 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 -04002145
2146### Example
2147
2148<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2149
2150#### Example Output
2151
2152~~~~
2153SkPaint::kFill_Style == paint.getStyle()
2154~~~~
2155
2156</fiddle-embed></div>
2157
2158### See Also
2159
Cary Clark8cc16c72017-08-25 11:51:49 -04002160<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002161
2162---
2163
Cary Clark493df1f2017-08-25 13:14:33 -04002164<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002165## setStyle
2166
Cary Clarka560c472017-11-27 10:44:06 -05002167<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002168void setStyle(Style style)
2169</pre>
2170
2171Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002172Has 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 -04002173
2174### Parameters
2175
Cary Clark8cc16c72017-08-25 11:51:49 -04002176<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2177one 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 -04002178 </tr>
2179</table>
2180
2181### Example
2182
2183<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2184
2185### See Also
2186
Cary Clark8cc16c72017-08-25 11:51:49 -04002187<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002188
2189---
2190
2191### See Also
2192
Cary Clark2a8c48b2018-02-15 17:31:24 -05002193<a href="SkPath_Reference#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 -04002194
Cary Clark08895c42018-02-01 09:37:32 -05002195## <a name="Stroke_Width"></a> Stroke Width
2196
Cary Clark8cc16c72017-08-25 11:51:49 -04002197<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002198of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002199set 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 -04002200
2201When width is greater than zero, the stroke encompasses as many pixels partially
2202or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002203the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002204
Cary Clark2a8c48b2018-02-15 17:31:24 -05002205The stroke dimensions are scaled by the canvas matrix, but <a href="#Style_Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002206remains one pixel wide regardless of scaling.
2207
2208The default width for the paint is zero.
2209
2210### Example
2211
Cary Clark7cfcbca2018-01-04 16:11:51 -05002212<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756" gpu="true"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clark1a8d7622018-03-05 13:26:16 -05002213line and the platform implementation.
2214</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002215
Cary Clark493df1f2017-08-25 13:14:33 -04002216<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002217## getStrokeWidth
2218
Cary Clarka560c472017-11-27 10:44:06 -05002219<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002220SkScalar getStrokeWidth() const
2221</pre>
2222
Cary Clark8cc16c72017-08-25 11:51:49 -04002223Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002224outline the shape.
2225
2226### Return Value
2227
Cary Clark2a8c48b2018-02-15 17:31:24 -05002228zero for <a href="#Style_Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002229
2230### Example
2231
2232<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2233
2234#### Example Output
2235
2236~~~~
22370 == paint.getStrokeWidth()
2238~~~~
2239
2240</fiddle-embed></div>
2241
2242---
2243
Cary Clark493df1f2017-08-25 13:14:33 -04002244<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002245## setStrokeWidth
2246
Cary Clarka560c472017-11-27 10:44:06 -05002247<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002248void setStrokeWidth(SkScalar width)
2249</pre>
2250
2251Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002252outline the shape.
2253Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002254
2255### Parameters
2256
Cary Clark8cc16c72017-08-25 11:51:49 -04002257<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002258zero thickness for <a href="#Style_Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002259 </tr>
2260</table>
2261
2262### Example
2263
2264<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2265
2266#### Example Output
2267
2268~~~~
22695 == paint.getStrokeWidth()
2270~~~~
2271
2272</fiddle-embed></div>
2273
2274---
2275
Cary Clark08895c42018-02-01 09:37:32 -05002276## <a name="Miter_Limit"></a> Miter Limit
2277
Cary Clark8cc16c72017-08-25 11:51:49 -04002278<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002279relative to the stroke width.
2280
Cary Clark8cc16c72017-08-25 11:51:49 -04002281<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2282is set to <a href="#SkPaint_kMiter_Join">kMiter Join</a>, and the <a href="#SkPaint_Style">Style</a> is either <a href="#SkPaint_kStroke_Style">kStroke Style</a>
2283or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002284
Cary Clark8cc16c72017-08-25 11:51:49 -04002285If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2286is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002287
Cary Clark8cc16c72017-08-25 11:51:49 -04002288<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002289
Cary Clark8cc16c72017-08-25 11:51:49 -04002290miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002291The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002292in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002293
2294Here are some miter limits and the angles that triggers them.
2295
2296| miter limit | angle in degrees |
2297| --- | --- |
2298| 10 | 11.48 |
2299| 9 | 12.76 |
2300| 8 | 14.36 |
2301| 7 | 16.43 |
2302| 6 | 19.19 |
2303| 5 | 23.07 |
2304| 4 | 28.96 |
2305| 3 | 38.94 |
2306| 2 | 60 |
2307| 1 | 180 |
2308
2309### Example
2310
2311<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2312When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002313by a bevel join.
2314</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002315
Cary Clark493df1f2017-08-25 13:14:33 -04002316<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002317## getStrokeMiter
2318
Cary Clarka560c472017-11-27 10:44:06 -05002319<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002320SkScalar getStrokeMiter() const
2321</pre>
2322
2323The limit at which a sharp corner is drawn beveled.
2324
2325### Return Value
2326
Cary Clark8cc16c72017-08-25 11:51:49 -04002327zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002328
2329### Example
2330
2331<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2332
2333#### Example Output
2334
2335~~~~
2336default miter limit == 4
2337~~~~
2338
2339</fiddle-embed></div>
2340
2341### See Also
2342
Cary Clark8cc16c72017-08-25 11:51:49 -04002343<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 -04002344
2345---
2346
Cary Clark493df1f2017-08-25 13:14:33 -04002347<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002348## setStrokeMiter
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 -04002351void setStrokeMiter(SkScalar miter)
2352</pre>
2353
2354The limit at which a sharp corner is drawn beveled.
2355Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002356Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002357
2358### Parameters
2359
Cary Clark8cc16c72017-08-25 11:51:49 -04002360<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2361zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002362 </tr>
2363</table>
2364
2365### Example
2366
2367<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2368
2369#### Example Output
2370
2371~~~~
2372default miter limit == 8
2373~~~~
2374
2375</fiddle-embed></div>
2376
2377### See Also
2378
Cary Clark8cc16c72017-08-25 11:51:49 -04002379<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 -04002380
2381---
2382
Cary Clark08895c42018-02-01 09:37:32 -05002383## <a name="Stroke_Cap"></a> Stroke Cap
Cary Clark12799e12017-07-28 15:18:29 -04002384
Cary Clark8cc16c72017-08-25 11:51:49 -04002385## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002386
Cary Clarka560c472017-11-27 10:44:06 -05002387<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002388enum <a href="#SkPaint_Cap">Cap</a> {
2389<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2390<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2391<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002392
Cary Clark8cc16c72017-08-25 11:51:49 -04002393<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2394<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002395};
Cary Clark6fc50412017-09-21 12:31:06 -04002396
Cary Clark1a8d7622018-03-05 13:26:16 -05002397static constexpr int <a href="#SkPaint_kCapCount">kCapCount</a> = <a href="#SkPaint_kLast_Cap">kLast Cap</a> + 1;
2398</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002399
Cary Clark2a8c48b2018-02-15 17:31:24 -05002400<a href="#Stroke_Cap">Stroke Cap</a> draws at the beginning and end of an open <a href="SkPath_Reference#Contour">Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002401
2402### Constants
2403
2404<table>
2405 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002406 <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.
2407</td>
Cary Clark12799e12017-07-28 15:18:29 -04002408 </tr>
2409 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002410 <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 Clark1a8d7622018-03-05 13:26:16 -05002411and end.
2412</td>
Cary Clark12799e12017-07-28 15:18:29 -04002413 </tr>
2414 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002415 <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 -04002416and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002417of the stroke.
2418</td>
Cary Clark12799e12017-07-28 15:18:29 -04002419 </tr>
2420 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002421 <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>.
2422</td>
Cary Clark12799e12017-07-28 15:18:29 -04002423 </tr>
2424 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002425 <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>.
Cary Clark1a8d7622018-03-05 13:26:16 -05002426<a href="#Stroke_Cap">Stroke Cap</a> is set to <a href="#SkPaint_kButt_Cap">kButt Cap</a> by default.
2427</td>
Cary Clark12799e12017-07-28 15:18:29 -04002428 </tr>
2429 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002430 <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.
Cary Clark1a8d7622018-03-05 13:26:16 -05002431May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.
2432</td>
Cary Clark12799e12017-07-28 15:18:29 -04002433 </tr>
2434
Cary Clark7cfcbca2018-01-04 16:11:51 -05002435Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002436follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002437
Cary Clark2a8c48b2018-02-15 17:31:24 -05002438If the <a href="SkPath_Reference#Contour">Path Contour</a> is not terminated by <a href="SkPath_Reference#SkPath_kClose_Verb">SkPath::kClose Verb</a>, the contour has a
Cary Clark12799e12017-07-28 15:18:29 -04002439visible beginning and end.
2440
Cary Clark2a8c48b2018-02-15 17:31:24 -05002441<a href="SkPath_Reference#Contour">Path Contour</a> may start and end at the same point; defining <a href="SkPath_Reference#Contour_Zero_Length">Zero Length Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002442
Cary Clark2a8c48b2018-02-15 17:31:24 -05002443<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Contour_Zero_Length">Zero Length Contour</a> is not drawn.
2444<a href="#SkPaint_kRound_Cap">kRound Cap</a> and <a href="SkPath_Reference#Contour_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 -04002445at the contour point.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002446<a href="#SkPaint_kSquare_Cap">kSquare Cap</a> and <a href="SkPath_Reference#Contour_Zero_Length">Zero Length Contour</a> draws an upright square with a side of
Cary Clark8cc16c72017-08-25 11:51:49 -04002447<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002448
Cary Clark8cc16c72017-08-25 11:51:49 -04002449<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 -04002450
2451</table>
2452
2453### Example
2454
Cary Clark2ade9972017-11-02 17:49:34 -04002455<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002456
Cary Clark493df1f2017-08-25 13:14:33 -04002457<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002458## getStrokeCap
2459
Cary Clarka560c472017-11-27 10:44:06 -05002460<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002461Cap getStrokeCap() const
2462</pre>
2463
2464The geometry drawn at the beginning and end of strokes.
2465
2466### Return Value
2467
Cary Clark8cc16c72017-08-25 11:51:49 -04002468one 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 -04002469
2470### Example
2471
2472<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2473
2474#### Example Output
2475
2476~~~~
2477kButt_Cap == default stroke cap
2478~~~~
2479
2480</fiddle-embed></div>
2481
2482### See Also
2483
Cary Clark8cc16c72017-08-25 11:51:49 -04002484<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002485
2486---
2487
Cary Clark493df1f2017-08-25 13:14:33 -04002488<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002489## setStrokeCap
2490
Cary Clarka560c472017-11-27 10:44:06 -05002491<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002492void setStrokeCap(Cap cap)
2493</pre>
2494
2495The geometry drawn at the beginning and end of strokes.
2496
2497### Parameters
2498
Cary Clark8cc16c72017-08-25 11:51:49 -04002499<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2500one 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>;
2501has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002502 </tr>
2503</table>
2504
2505### Example
2506
2507<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2508
2509#### Example Output
2510
2511~~~~
2512kRound_Cap == paint.getStrokeCap()
2513~~~~
2514
2515</fiddle-embed></div>
2516
2517### See Also
2518
Cary Clark8cc16c72017-08-25 11:51:49 -04002519<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002520
2521---
2522
Cary Clark08895c42018-02-01 09:37:32 -05002523## <a name="Stroke_Join"></a> Stroke Join
2524
Cary Clark2a8c48b2018-02-15 17:31:24 -05002525<a href="#Stroke_Join">Stroke Join</a> draws at the sharp corners of an open or closed <a href="SkPath_Reference#Contour">Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002526
Cary Clark7cfcbca2018-01-04 16:11:51 -05002527Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002528follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002529
2530If the contour direction changes abruptly, because the tangent direction leading
2531to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002532the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002533
2534### Example
2535
Cary Clark2ade9972017-11-02 17:49:34 -04002536<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002537
Cary Clark8cc16c72017-08-25 11:51:49 -04002538## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002539
Cary Clarka560c472017-11-27 10:44:06 -05002540<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002541enum <a href="#SkPaint_Join">Join</a> {
2542<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2543<a href="#SkPaint_kRound_Join">kRound Join</a>,
2544<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002545
Cary Clark8cc16c72017-08-25 11:51:49 -04002546<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2547<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002548};
Cary Clark6fc50412017-09-21 12:31:06 -04002549
Cary Clark1a8d7622018-03-05 13:26:16 -05002550static constexpr int <a href="#SkPaint_kJoinCount">kJoinCount</a> = <a href="#SkPaint_kLast_Join">kLast Join</a> + 1;
2551</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002552
Cary Clark8cc16c72017-08-25 11:51:49 -04002553<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 -04002554affects the four corners of a stroked rectangle, and the connected segments in a
2555stroked path.
2556
2557Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2558radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2559connect the thick strokes.
2560
Cary Clark7cfcbca2018-01-04 16:11:51 -05002561The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002562not contain the actual join. For instance, a fill path constructed with round joins does
2563not necessarily include circles at each connected segment.
2564
2565### Constants
2566
2567<table>
2568 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002569 <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>.
Cary Clark1a8d7622018-03-05 13:26:16 -05002570If the extension exceeds <a href="#Miter_Limit">Miter Limit</a>, <a href="#SkPaint_kBevel_Join">kBevel Join</a> is used instead.
2571</td>
Cary Clark12799e12017-07-28 15:18:29 -04002572 </tr>
2573 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002574 <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.
2575</td>
Cary Clark12799e12017-07-28 15:18:29 -04002576 </tr>
2577 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002578 <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.
2579</td>
Cary Clark12799e12017-07-28 15:18:29 -04002580 </tr>
2581 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002582 <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>.
2583</td>
Cary Clark12799e12017-07-28 15:18:29 -04002584 </tr>
2585 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002586 <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>.
Cary Clark1a8d7622018-03-05 13:26:16 -05002587<a href="#Stroke_Join">Stroke Join</a> is set to <a href="#SkPaint_kMiter_Join">kMiter Join</a> by default.
2588</td>
Cary Clark12799e12017-07-28 15:18:29 -04002589 </tr>
2590 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002591 <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.
Cary Clark1a8d7622018-03-05 13:26:16 -05002592May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.
2593</td>
Cary Clark12799e12017-07-28 15:18:29 -04002594 </tr>
2595</table>
2596
2597### Example
2598
2599<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2600
2601### See Also
2602
Cary Clark8cc16c72017-08-25 11:51:49 -04002603<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 -04002604
2605
2606
Cary Clark493df1f2017-08-25 13:14:33 -04002607<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002608## getStrokeJoin
2609
Cary Clarka560c472017-11-27 10:44:06 -05002610<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002611Join getStrokeJoin() const
2612</pre>
2613
Cary Clark0c5f5462017-12-15 11:21:51 -05002614The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002615
2616### Return Value
2617
Cary Clark8cc16c72017-08-25 11:51:49 -04002618one 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 -04002619
2620### Example
2621
2622<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2623
2624#### Example Output
2625
2626~~~~
2627kMiter_Join == default stroke join
2628~~~~
2629
2630</fiddle-embed></div>
2631
2632### See Also
2633
Cary Clark8cc16c72017-08-25 11:51:49 -04002634<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002635
2636---
2637
Cary Clark493df1f2017-08-25 13:14:33 -04002638<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002639## setStrokeJoin
2640
Cary Clarka560c472017-11-27 10:44:06 -05002641<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002642void setStrokeJoin(Join join)
2643</pre>
2644
Cary Clark0c5f5462017-12-15 11:21:51 -05002645The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002646
2647### Parameters
2648
Cary Clark8cc16c72017-08-25 11:51:49 -04002649<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2650one 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 -04002651otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002652 </tr>
2653</table>
2654
2655### Example
2656
2657<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2658
2659#### Example Output
2660
2661~~~~
2662kMiter_Join == paint.getStrokeJoin()
2663~~~~
2664
2665</fiddle-embed></div>
2666
2667### See Also
2668
Cary Clark8cc16c72017-08-25 11:51:49 -04002669<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002670
2671---
2672
2673### See Also
2674
Cary Clark8cc16c72017-08-25 11:51:49 -04002675<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002676
Cary Clark08895c42018-02-01 09:37:32 -05002677## <a name="Fill_Path"></a> Fill Path
2678
Cary Clark8cc16c72017-08-25 11:51:49 -04002679<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 -04002680
Cary Clark8cc16c72017-08-25 11:51:49 -04002681If <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 -04002682replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2683destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002684
Cary Clark4c06f5e2017-08-04 12:48:24 -04002685Fill <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
2686the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002687
Cary Clark7cfcbca2018-01-04 16:11:51 -05002688If <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 -04002689and <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>,
2690and <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 -04002691
Cary Clark7cfcbca2018-01-04 16:11:51 -05002692Fill <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 -04002693
Cary Clark8cc16c72017-08-25 11:51:49 -04002694If 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>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002695returns false since <a href="#Style_Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002696
Cary Clark493df1f2017-08-25 13:14:33 -04002697<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002698## getFillPath
2699
Cary Clarka560c472017-11-27 10:44:06 -05002700<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2701bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002702</pre>
2703
2704The filled equivalent of the stroked path.
2705
2706### Parameters
2707
Cary Clark8cc16c72017-08-25 11:51:49 -04002708<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002709<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002710 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2711resulting <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>
2712 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002713optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002714 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002715if > 1, increase precision, else if (0 < res < 1) reduce precision
2716to favor speed and size</td>
2717 </tr>
2718</table>
2719
2720### Return Value
2721
Cary Clark2a8c48b2018-02-15 17:31:24 -05002722true if the path represents <a href="#Style_Fill">Style Fill</a>, or false if it represents <a href="#Style_Hairline">Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002723
2724### Example
2725
Cary Clark2a8c48b2018-02-15 17:31:24 -05002726<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href="SkPath_Reference#Quad">Quad</a> stroke is turned into a filled path with increasing levels of precision.
2727At the lowest precision, the <a href="SkPath_Reference#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002728At the highest precision, the filled path has high fidelity compared to the original stroke.
2729</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002730
2731---
2732
Cary Clark2dc84ad2018-01-26 12:56:22 -05002733<a name="SkPaint_getFillPath_2"></a>
2734
Cary Clarka560c472017-11-27 10:44:06 -05002735<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002736bool getFillPath(const SkPath& src, SkPath* dst) const
2737</pre>
2738
2739The filled equivalent of the stroked path.
2740
Cary Clark8cc16c72017-08-25 11:51:49 -04002741Replaces <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>.
2742<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 -04002743
2744### Parameters
2745
Cary Clark8cc16c72017-08-25 11:51:49 -04002746<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002747<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002748 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2749resulting <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 -04002750 </tr>
2751</table>
2752
2753### Return Value
2754
Cary Clark2a8c48b2018-02-15 17:31:24 -05002755true if the path represents <a href="#Style_Fill">Style Fill</a>, or false if it represents <a href="#Style_Hairline">Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002756
2757### Example
2758
2759<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2760
2761---
2762
2763### See Also
2764
Cary Clark8cc16c72017-08-25 11:51:49 -04002765<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 -04002766
Cary Clark08895c42018-02-01 09:37:32 -05002767## <a name="Shader_Methods"></a> Shader Methods
2768
Cary Clark4c06f5e2017-08-04 12:48:24 -04002769<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2770<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002771If <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 -04002772
Cary Clark2a8c48b2018-02-15 17:31:24 -05002773<a href="undocumented#Shader">Shader</a> is modulated by <a href="undocumented#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2774If <a href="undocumented#Shader">Shader</a> object defines only <a href="undocumented#Alpha">Color Alpha</a>, then <a href="undocumented#Color">Color</a> modulated by <a href="undocumented#Alpha">Color Alpha</a> describes
Cary Clark12799e12017-07-28 15:18:29 -04002775the fill.
2776
Cary Clark2a8c48b2018-02-15 17:31:24 -05002777The drawn transparency can be modified without altering <a href="undocumented#Shader">Shader</a>, by changing <a href="undocumented#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002778
2779### Example
2780
2781<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2782
Cary Clark2a8c48b2018-02-15 17:31:24 -05002783If <a href="undocumented#Shader">Shader</a> generates only <a href="undocumented#Alpha">Color Alpha</a> then all components of <a href="undocumented#Color">Color</a> modulate the output.
Cary Clark12799e12017-07-28 15:18:29 -04002784
2785### Example
2786
2787<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2788
Cary Clark493df1f2017-08-25 13:14:33 -04002789<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002790## getShader
2791
Cary Clarka560c472017-11-27 10:44:06 -05002792<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002793SkShader* getShader() const
2794</pre>
2795
2796Optional colors used when filling a path, such as a gradient.
2797
Cary Clark4c06f5e2017-08-04 12:48:24 -04002798Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002799
2800### Return Value
2801
Cary Clark4c06f5e2017-08-04 12:48:24 -04002802<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002803
2804### Example
2805
2806<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2807
2808#### Example Output
2809
2810~~~~
2811nullptr == shader
2812nullptr != shader
2813~~~~
2814
2815</fiddle-embed></div>
2816
2817---
2818
Cary Clark493df1f2017-08-25 13:14:33 -04002819<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002820## refShader
2821
Cary Clarka560c472017-11-27 10:44:06 -05002822<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002823sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002824</pre>
2825
2826Optional colors used when filling a path, such as a gradient.
2827
Cary Clark4c06f5e2017-08-04 12:48:24 -04002828Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002829
2830### Return Value
2831
Cary Clark4c06f5e2017-08-04 12:48:24 -04002832<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002833
2834### Example
2835
2836<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2837
2838#### Example Output
2839
2840~~~~
2841shader unique: true
2842shader unique: false
2843~~~~
2844
2845</fiddle-embed></div>
2846
2847---
2848
Cary Clark493df1f2017-08-25 13:14:33 -04002849<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002850## setShader
2851
Cary Clarka560c472017-11-27 10:44:06 -05002852<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002853void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002854</pre>
2855
2856Optional colors used when filling a path, such as a gradient.
2857
Cary Clarkd0530ba2017-09-14 11:25:39 -04002858Sets <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 -04002859Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002860
2861### Parameters
2862
Cary Clark8cc16c72017-08-25 11:51:49 -04002863<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002864how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002865 </tr>
2866</table>
2867
2868### Example
2869
2870<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2871
2872---
2873
Cary Clark08895c42018-02-01 09:37:32 -05002874## <a name="Color_Filter_Methods"></a> Color Filter Methods
2875
Cary Clark4c06f5e2017-08-04 12:48:24 -04002876<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2877<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 -04002878If <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 -04002879
Cary Clark2a8c48b2018-02-15 17:31:24 -05002880The drawn transparency can be modified without altering <a href="undocumented#Color_Filter">Color Filter</a>, by changing <a href="undocumented#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002881
2882### Example
2883
2884<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2885
Cary Clark493df1f2017-08-25 13:14:33 -04002886<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002887## getColorFilter
2888
Cary Clarka560c472017-11-27 10:44:06 -05002889<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002890SkColorFilter* getColorFilter() const
2891</pre>
2892
Cary Clark4c06f5e2017-08-04 12:48:24 -04002893Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2894Does 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 -04002895
2896### Return Value
2897
Cary Clark4c06f5e2017-08-04 12:48:24 -04002898<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002899
2900### Example
2901
2902<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2903
2904#### Example Output
2905
2906~~~~
2907nullptr == color filter
2908nullptr != color filter
2909~~~~
2910
2911</fiddle-embed></div>
2912
2913---
2914
Cary Clark493df1f2017-08-25 13:14:33 -04002915<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002916## refColorFilter
2917
Cary Clarka560c472017-11-27 10:44:06 -05002918<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002919sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002920</pre>
2921
Cary Clark4c06f5e2017-08-04 12:48:24 -04002922Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2923Increases <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 -04002924
2925### Return Value
2926
Cary Clark4c06f5e2017-08-04 12:48:24 -04002927<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002928
2929### Example
2930
2931<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2932
2933#### Example Output
2934
2935~~~~
2936color filter unique: true
2937color filter unique: false
2938~~~~
2939
2940</fiddle-embed></div>
2941
2942---
2943
Cary Clark493df1f2017-08-25 13:14:33 -04002944<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002945## setColorFilter
2946
Cary Clarka560c472017-11-27 10:44:06 -05002947<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002948void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002949</pre>
2950
Cary Clark6fc50412017-09-21 12:31:06 -04002951Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2952<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2953
2954Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002955
2956### Parameters
2957
Cary Clark8cc16c72017-08-25 11:51:49 -04002958<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002959<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002960 </tr>
2961</table>
2962
2963### Example
2964
2965<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2966
2967---
2968
Cary Clark08895c42018-02-01 09:37:32 -05002969## <a name="Blend_Mode_Methods"></a> Blend Mode Methods
2970
Cary Clark4c06f5e2017-08-04 12:48:24 -04002971<a href="undocumented#Blend_Mode">Blend Mode</a> describes how <a href="undocumented#Color">Color</a> combines with the destination color.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002972The default setting, <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002973over the destination color.
2974
2975### Example
2976
2977<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2978
2979### See Also
2980
Cary Clark4c06f5e2017-08-04 12:48:24 -04002981<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002982
Cary Clark493df1f2017-08-25 13:14:33 -04002983<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002984## getBlendMode
2985
Cary Clarka560c472017-11-27 10:44:06 -05002986<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002987SkBlendMode getBlendMode() const
2988</pre>
2989
Cary Clark4c06f5e2017-08-04 12:48:24 -04002990Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002991By default, returns <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002992
2993### Return Value
2994
2995mode used to combine source color with destination color
2996
2997### Example
2998
2999<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
3000
3001#### Example Output
3002
3003~~~~
3004kSrcOver == getBlendMode
3005kSrcOver != getBlendMode
3006~~~~
3007
3008</fiddle-embed></div>
3009
3010---
3011
Cary Clark493df1f2017-08-25 13:14:33 -04003012<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003013## isSrcOver
3014
Cary Clarka560c472017-11-27 10:44:06 -05003015<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003016bool isSrcOver() const
3017</pre>
3018
Cary Clark2a8c48b2018-02-15 17:31:24 -05003019Returns true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04003020
3021### Return Value
3022
Cary Clark2a8c48b2018-02-15 17:31:24 -05003023true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003024
3025### Example
3026
3027<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3028
3029#### Example Output
3030
3031~~~~
3032isSrcOver == true
3033isSrcOver != true
3034~~~~
3035
3036</fiddle-embed></div>
3037
3038---
3039
Cary Clark493df1f2017-08-25 13:14:33 -04003040<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003041## setBlendMode
3042
Cary Clarka560c472017-11-27 10:44:06 -05003043<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003044void setBlendMode(SkBlendMode mode)
3045</pre>
3046
Cary Clark7cfcbca2018-01-04 16:11:51 -05003047Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003048Does not check for valid input.
3049
3050### Parameters
3051
Cary Clark8cc16c72017-08-25 11:51:49 -04003052<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003053<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003054 </tr>
3055</table>
3056
3057### Example
3058
3059<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3060
3061#### Example Output
3062
3063~~~~
3064isSrcOver == true
3065isSrcOver != true
3066~~~~
3067
3068</fiddle-embed></div>
3069
3070---
3071
Cary Clark08895c42018-02-01 09:37:32 -05003072## <a name="Path_Effect_Methods"></a> Path Effect Methods
3073
Cary Clark4c06f5e2017-08-04 12:48:24 -04003074<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3075<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 -04003076If <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 -04003077
3078### Example
3079
3080<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3081
3082### See Also
3083
Cary Clark4c06f5e2017-08-04 12:48:24 -04003084<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003085
Cary Clark493df1f2017-08-25 13:14:33 -04003086<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003087## getPathEffect
3088
Cary Clarka560c472017-11-27 10:44:06 -05003089<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003090SkPathEffect* getPathEffect() const
3091</pre>
3092
Cary Clark4c06f5e2017-08-04 12:48:24 -04003093Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3094Does 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 -04003095
3096### Return Value
3097
Cary Clark4c06f5e2017-08-04 12:48:24 -04003098<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003099
3100### Example
3101
3102<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3103
3104#### Example Output
3105
3106~~~~
3107nullptr == path effect
3108nullptr != path effect
3109~~~~
3110
3111</fiddle-embed></div>
3112
3113---
3114
Cary Clark493df1f2017-08-25 13:14:33 -04003115<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003116## refPathEffect
3117
Cary Clarka560c472017-11-27 10:44:06 -05003118<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003119sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003120</pre>
3121
Cary Clark4c06f5e2017-08-04 12:48:24 -04003122Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3123Increases <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 -04003124
3125### Return Value
3126
Cary Clark4c06f5e2017-08-04 12:48:24 -04003127<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003128
3129### Example
3130
Cary Clarka560c472017-11-27 10:44:06 -05003131<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003132
3133#### Example Output
3134
3135~~~~
3136path effect unique: true
3137path effect unique: false
3138~~~~
3139
3140</fiddle-embed></div>
3141
3142---
3143
Cary Clark493df1f2017-08-25 13:14:33 -04003144<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003145## setPathEffect
3146
Cary Clarka560c472017-11-27 10:44:06 -05003147<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003148void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003149</pre>
3150
Cary Clark6fc50412017-09-21 12:31:06 -04003151Sets <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
3152<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3153
3154Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003155
3156### Parameters
3157
Cary Clark8cc16c72017-08-25 11:51:49 -04003158<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003159replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003160 </tr>
3161</table>
3162
3163### Example
3164
3165<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3166
3167---
3168
Cary Clark08895c42018-02-01 09:37:32 -05003169## <a name="Mask_Filter_Methods"></a> Mask Filter Methods
3170
Cary Clarkce101242017-09-01 15:51:02 -04003171<a href="undocumented#Mask_Filter">Mask Filter</a> uses coverage of the shape drawn to create <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
Cary Clarkf895a422018-02-27 09:54:21 -05003172<a href="undocumented#Mask_Filter">Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003173
3174<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3175creating 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
3176modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003177
3178### Example
3179
Cary Clark681287e2018-03-16 11:34:15 -04003180<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003181
Cary Clark493df1f2017-08-25 13:14:33 -04003182<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003183## getMaskFilter
3184
Cary Clarka560c472017-11-27 10:44:06 -05003185<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003186SkMaskFilter* getMaskFilter() const
3187</pre>
3188
Cary Clark4c06f5e2017-08-04 12:48:24 -04003189Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3190Does 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 -04003191
3192### Return Value
3193
Cary Clark4c06f5e2017-08-04 12:48:24 -04003194<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003195
3196### Example
3197
Cary Clark681287e2018-03-16 11:34:15 -04003198<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003199
3200#### Example Output
3201
3202~~~~
3203nullptr == mask filter
3204nullptr != mask filter
3205~~~~
3206
3207</fiddle-embed></div>
3208
3209---
3210
Cary Clark493df1f2017-08-25 13:14:33 -04003211<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003212## refMaskFilter
3213
Cary Clarka560c472017-11-27 10:44:06 -05003214<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003215sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003216</pre>
3217
Cary Clark4c06f5e2017-08-04 12:48:24 -04003218Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003219
Cary Clark4c06f5e2017-08-04 12:48:24 -04003220Increases <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 -04003221
3222### Return Value
3223
Cary Clark4c06f5e2017-08-04 12:48:24 -04003224<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003225
3226### Example
3227
Cary Clark681287e2018-03-16 11:34:15 -04003228<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003229
3230#### Example Output
3231
3232~~~~
3233mask filter unique: true
3234mask filter unique: false
3235~~~~
3236
3237</fiddle-embed></div>
3238
3239---
3240
Cary Clark493df1f2017-08-25 13:14:33 -04003241<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003242## setMaskFilter
3243
Cary Clarka560c472017-11-27 10:44:06 -05003244<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003245void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003246</pre>
3247
Cary Clark6fc50412017-09-21 12:31:06 -04003248Sets <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
3249<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
3250<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3251
Cary Clark6fc50412017-09-21 12:31:06 -04003252Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003253
3254### Parameters
3255
Cary Clark8cc16c72017-08-25 11:51:49 -04003256<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003257modifies clipping mask generated from drawn geometry</td>
3258 </tr>
3259</table>
3260
3261### Example
3262
Cary Clark681287e2018-03-16 11:34:15 -04003263<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003264
3265---
3266
Cary Clark08895c42018-02-01 09:37:32 -05003267## <a name="Typeface_Methods"></a> Typeface Methods
3268
Cary Clark4c06f5e2017-08-04 12:48:24 -04003269<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3270<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3271The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003272implementation.
3273
3274### Example
3275
Ben Wagner700ff172017-11-08 15:37:22 -05003276<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003277
Cary Clark493df1f2017-08-25 13:14:33 -04003278<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003279## getTypeface
3280
Cary Clarka560c472017-11-27 10:44:06 -05003281<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003282SkTypeface* getTypeface() const
3283</pre>
3284
Cary Clark4c06f5e2017-08-04 12:48:24 -04003285Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003286Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003287
3288### Return Value
3289
Cary Clark4c06f5e2017-08-04 12:48:24 -04003290<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003291
3292### Example
3293
Cary Clark71961fb2018-01-05 14:21:59 -05003294<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003295
3296#### Example Output
3297
3298~~~~
3299nullptr == typeface
3300nullptr != typeface
3301~~~~
3302
3303</fiddle-embed></div>
3304
3305---
3306
Cary Clark493df1f2017-08-25 13:14:33 -04003307<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003308## refTypeface
3309
Cary Clarka560c472017-11-27 10:44:06 -05003310<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003311sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003312</pre>
3313
Cary Clark4c06f5e2017-08-04 12:48:24 -04003314Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003315
3316### Return Value
3317
Cary Clark4c06f5e2017-08-04 12:48:24 -04003318<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003319
3320### Example
3321
Cary Clark71961fb2018-01-05 14:21:59 -05003322<div><fiddle-embed name="4bf8ed109c4b46d8a05c8b7763c1982c">
Cary Clark12799e12017-07-28 15:18:29 -04003323
3324#### Example Output
3325
3326~~~~
3327typeface1 != typeface2
3328typeface1 == typeface2
3329~~~~
3330
3331</fiddle-embed></div>
3332
3333---
3334
Cary Clark493df1f2017-08-25 13:14:33 -04003335<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003336## setTypeface
3337
Cary Clarka560c472017-11-27 10:44:06 -05003338<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003339void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003340</pre>
3341
Cary Clark7cfcbca2018-01-04 16:11:51 -05003342Sets <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 -04003343Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3344<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003345
3346### Parameters
3347
Cary Clark8cc16c72017-08-25 11:51:49 -04003348<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003349font and style used to draw text</td>
3350 </tr>
3351</table>
3352
3353### Example
3354
Cary Clark71961fb2018-01-05 14:21:59 -05003355<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003356
3357---
3358
Cary Clark08895c42018-02-01 09:37:32 -05003359## <a name="Image_Filter_Methods"></a> Image Filter Methods
3360
Cary Clark8cc16c72017-08-25 11:51:49 -04003361<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
Cary Clark2a8c48b2018-02-15 17:31:24 -05003362with <a href="undocumented#Blend_Mode">Blend Mode</a> set to <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>. <a href="undocumented#Image_Filter">Image Filter</a> creates a new bitmap,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003363which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003364
Cary Clark4c06f5e2017-08-04 12:48:24 -04003365<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 Clark2a8c48b2018-02-15 17:31:24 -05003366can operate on all channels of <a href="undocumented#Color">Color</a>, while <a href="undocumented#Mask_Filter">Mask Filter</a> generates <a href="undocumented#Alpha">Alpha</a> only.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003367<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 +00003368<a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003369
3370### Example
3371
Update Docs4410d7f2018-03-19 06:05:52 +00003372<div><fiddle-embed name="250e45c5935d54eac6aca775d1fe3475"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003373
Cary Clark493df1f2017-08-25 13:14:33 -04003374<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003375## getImageFilter
3376
Cary Clarka560c472017-11-27 10:44:06 -05003377<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003378SkImageFilter* getImageFilter() const
3379</pre>
3380
Cary Clark4c06f5e2017-08-04 12:48:24 -04003381Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3382Does 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 -04003383
3384### Return Value
3385
Cary Clark4c06f5e2017-08-04 12:48:24 -04003386<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003387
3388### Example
3389
Cary Clarka560c472017-11-27 10:44:06 -05003390<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003391
3392#### Example Output
3393
3394~~~~
3395nullptr == image filter
3396nullptr != image filter
3397~~~~
3398
3399</fiddle-embed></div>
3400
3401---
3402
Cary Clark493df1f2017-08-25 13:14:33 -04003403<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003404## refImageFilter
3405
Cary Clarka560c472017-11-27 10:44:06 -05003406<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003407sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003408</pre>
3409
Cary Clark4c06f5e2017-08-04 12:48:24 -04003410Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3411Increases <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 -04003412
3413### Return Value
3414
Cary Clark4c06f5e2017-08-04 12:48:24 -04003415<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003416
3417### Example
3418
3419<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3420
3421#### Example Output
3422
3423~~~~
3424image filter unique: true
3425image filter unique: false
3426~~~~
3427
3428</fiddle-embed></div>
3429
3430---
3431
Cary Clark493df1f2017-08-25 13:14:33 -04003432<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003433## setImageFilter
3434
Cary Clarka560c472017-11-27 10:44:06 -05003435<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003436void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003437</pre>
3438
Cary Clark6fc50412017-09-21 12:31:06 -04003439Sets <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
3440<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 -04003441on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003442
Cary Clark6fc50412017-09-21 12:31:06 -04003443Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003444
3445### Parameters
3446
Cary Clark8cc16c72017-08-25 11:51:49 -04003447<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003448how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003449 </tr>
3450</table>
3451
3452### Example
3453
3454<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3455
3456---
3457
Cary Clark08895c42018-02-01 09:37:32 -05003458## <a name="Draw_Looper_Methods"></a> Draw Looper Methods
3459
Cary Clark4c06f5e2017-08-04 12:48:24 -04003460<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 -04003461to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003462
Cary Clark4c06f5e2017-08-04 12:48:24 -04003463<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3464<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 -05003465Set <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 -04003466
3467### Example
3468
3469<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3470
Cary Clark493df1f2017-08-25 13:14:33 -04003471<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003472## getDrawLooper
3473
Cary Clarka560c472017-11-27 10:44:06 -05003474<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003475SkDrawLooper* getDrawLooper() const
3476</pre>
3477
Cary Clark4c06f5e2017-08-04 12:48:24 -04003478Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3479Does 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 -04003480
3481### Return Value
3482
Cary Clark4c06f5e2017-08-04 12:48:24 -04003483<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003484
3485### Example
3486
3487<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3488
3489#### Example Output
3490
3491~~~~
3492nullptr == draw looper
3493nullptr != draw looper
3494~~~~
3495
3496</fiddle-embed></div>
3497
3498---
3499
Cary Clark493df1f2017-08-25 13:14:33 -04003500<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003501## refDrawLooper
3502
Cary Clarka560c472017-11-27 10:44:06 -05003503<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003504sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003505</pre>
3506
Cary Clark4c06f5e2017-08-04 12:48:24 -04003507Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3508Increases <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 -04003509
3510### Return Value
3511
Cary Clark4c06f5e2017-08-04 12:48:24 -04003512<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003513
3514### Example
3515
3516<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3517
3518#### Example Output
3519
3520~~~~
3521draw looper unique: true
3522draw looper unique: false
3523~~~~
3524
3525</fiddle-embed></div>
3526
3527---
3528
Cary Clark493df1f2017-08-25 13:14:33 -04003529<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003530## getLooper
3531
Cary Clarka560c472017-11-27 10:44:06 -05003532<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003533SkDrawLooper* getLooper() const
3534</pre>
3535
Cary Clark12799e12017-07-28 15:18:29 -04003536---
3537
Cary Clark493df1f2017-08-25 13:14:33 -04003538<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003539## setDrawLooper
3540
Cary Clarka560c472017-11-27 10:44:06 -05003541<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003542void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003543</pre>
3544
Cary Clark6fc50412017-09-21 12:31:06 -04003545Sets <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
3546<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
3547drawing unaltered.
3548
3549Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003550
3551### Parameters
3552
Cary Clark8cc16c72017-08-25 11:51:49 -04003553<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003554iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003555 </tr>
3556</table>
3557
3558### Example
3559
3560<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3561
3562---
3563
Cary Clark493df1f2017-08-25 13:14:33 -04003564<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003565## setLooper
3566
Cary Clarka560c472017-11-27 10:44:06 -05003567<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003568void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003569</pre>
3570
Cary Clark12799e12017-07-28 15:18:29 -04003571---
3572
Cary Clark08895c42018-02-01 09:37:32 -05003573## <a name="Text_Align"></a> Text Align
Cary Clark12799e12017-07-28 15:18:29 -04003574
Cary Clark8cc16c72017-08-25 11:51:49 -04003575## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003576
Cary Clarka560c472017-11-27 10:44:06 -05003577<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003578enum <a href="#SkPaint_Align">Align</a> {
3579<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3580<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3581<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark1a8d7622018-03-05 13:26:16 -05003582};
3583</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003584
Cary Clark8cc16c72017-08-25 11:51:49 -04003585<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clark2a8c48b2018-02-15 17:31:24 -05003586<a href="#SkPaint_Align">Align</a> affects <a href="undocumented#Glyph">Glyphs</a> drawn with: <a href="SkCanvas_Reference#SkCanvas_drawText">SkCanvas::drawText</a>, <a href="SkCanvas_Reference#SkCanvas_drawPosText">SkCanvas::drawPosText</a>,
3587<a href="SkCanvas_Reference#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="SkCanvas_Reference#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3588<a href="SkCanvas_Reference#SkCanvas_drawTextOnPathHV">SkCanvas::drawTextOnPathHV</a>, <a href="SkCanvas_Reference#SkCanvas_drawTextRSXform">SkCanvas::drawTextRSXform</a>, <a href="SkCanvas_Reference#SkCanvas_drawTextBlob">SkCanvas::drawTextBlob</a>,
3589and <a href="SkCanvas_Reference#SkCanvas_drawString">SkCanvas::drawString</a>;
3590as well as calls that place text <a href="undocumented#Glyph">Glyphs</a> like <a href="#SkPaint_getTextWidths">getTextWidths</a> and <a href="#SkPaint_getTextPath">getTextPath</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003591
3592The text position is set by the font for both horizontal and vertical text.
3593Typically, for horizontal text, the position is to the left side of the glyph on the
3594base line; and for vertical text, the position is the horizontal center of the glyph
3595at the caps height.
3596
Cary Clark7cfcbca2018-01-04 16:11:51 -05003597<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 -04003598using the metrics returned by the font.
3599
Cary Clark8cc16c72017-08-25 11:51:49 -04003600<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003601
3602### Constants
3603
3604<table>
3605 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003606 <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.
3607</td>
Cary Clark12799e12017-07-28 15:18:29 -04003608 </tr>
3609 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003610 <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
Cary Clark1a8d7622018-03-05 13:26:16 -05003611half its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3612</td>
Cary Clark12799e12017-07-28 15:18:29 -04003613 </tr>
3614 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003615 <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,
Cary Clark1a8d7622018-03-05 13:26:16 -05003616and by its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3617</td>
Cary Clark12799e12017-07-28 15:18:29 -04003618 </tr>
3619
3620</table>
3621
Cary Clark8cc16c72017-08-25 11:51:49 -04003622## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003623
Cary Clarka560c472017-11-27 10:44:06 -05003624<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003625enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003626<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark1a8d7622018-03-05 13:26:16 -05003627};
3628</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003629
3630### Constants
3631
3632<table>
3633 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003634 <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.
3635</td>
Cary Clark12799e12017-07-28 15:18:29 -04003636 </tr>
3637
3638</table>
3639
3640### Example
3641
Cary Clark1a8d7622018-03-05 13:26:16 -05003642<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
3643</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003644
3645### Example
3646
Cary Clark1a8d7622018-03-05 13:26:16 -05003647<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.
3648</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003649
Cary Clark493df1f2017-08-25 13:14:33 -04003650<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003651## getTextAlign
3652
Cary Clarka560c472017-11-27 10:44:06 -05003653<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003654Align getTextAlign() const
3655</pre>
3656
Cary Clark8cc16c72017-08-25 11:51:49 -04003657Returns <a href="#Text_Align">Text Align</a>.
3658Returns <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 -04003659
3660### Return Value
3661
3662text placement relative to position
3663
3664### Example
3665
3666<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3667
3668#### Example Output
3669
3670~~~~
3671kLeft_Align == default
3672~~~~
3673
3674</fiddle-embed></div>
3675
3676---
3677
Cary Clark493df1f2017-08-25 13:14:33 -04003678<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003679## setTextAlign
3680
Cary Clarka560c472017-11-27 10:44:06 -05003681<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003682void setTextAlign(Align align)
3683</pre>
3684
Cary Clark8cc16c72017-08-25 11:51:49 -04003685Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3686Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003687
3688### Parameters
3689
Cary Clark8cc16c72017-08-25 11:51:49 -04003690<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003691text placement relative to position</td>
3692 </tr>
3693</table>
3694
3695### Example
3696
Cary Clark4c06f5e2017-08-04 12:48:24 -04003697<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 Clark1a8d7622018-03-05 13:26:16 -05003698alignment out of range has no effect.
3699</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003700
3701---
3702
Cary Clark08895c42018-02-01 09:37:32 -05003703## <a name="Text_Size"></a> Text Size
3704
Cary Clark8cc16c72017-08-25 11:51:49 -04003705<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3706<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3707<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003708Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003709
3710### Example
3711
3712<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3713
Cary Clark493df1f2017-08-25 13:14:33 -04003714<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003715## getTextSize
3716
Cary Clarka560c472017-11-27 10:44:06 -05003717<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003718SkScalar getTextSize() const
3719</pre>
3720
Cary Clark8cc16c72017-08-25 11:51:49 -04003721Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003722
3723### Return Value
3724
3725typographic height of text
3726
3727### Example
3728
3729<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3730
3731---
3732
Cary Clark493df1f2017-08-25 13:14:33 -04003733<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003734## setTextSize
3735
Cary Clarka560c472017-11-27 10:44:06 -05003736<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003737void setTextSize(SkScalar textSize)
3738</pre>
3739
Cary Clark8cc16c72017-08-25 11:51:49 -04003740Sets <a href="#Text_Size">Text Size</a> in points.
3741Has 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 -04003742
3743### Parameters
3744
Cary Clark8cc16c72017-08-25 11:51:49 -04003745<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003746typographic height of text</td>
3747 </tr>
3748</table>
3749
3750### Example
3751
3752<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3753
3754---
3755
Cary Clark08895c42018-02-01 09:37:32 -05003756## <a name="Text_Scale_X"></a> Text Scale X
3757
Cary Clark8cc16c72017-08-25 11:51:49 -04003758<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003759<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003760is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003761<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3762<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003763
3764### Example
3765
3766<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3767
Cary Clark493df1f2017-08-25 13:14:33 -04003768<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003769## getTextScaleX
3770
Cary Clarka560c472017-11-27 10:44:06 -05003771<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003772SkScalar getTextScaleX() const
3773</pre>
3774
Cary Clark8cc16c72017-08-25 11:51:49 -04003775Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003776Default value is 1.
3777
3778### Return Value
3779
3780text horizontal scale
3781
3782### Example
3783
3784<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3785
3786---
3787
Cary Clark493df1f2017-08-25 13:14:33 -04003788<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003789## setTextScaleX
3790
Cary Clarka560c472017-11-27 10:44:06 -05003791<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003792void setTextScaleX(SkScalar scaleX)
3793</pre>
3794
Cary Clark8cc16c72017-08-25 11:51:49 -04003795Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003796Default value is 1.
3797
3798### Parameters
3799
Cary Clark8cc16c72017-08-25 11:51:49 -04003800<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003801text horizontal scale</td>
3802 </tr>
3803</table>
3804
3805### Example
3806
3807<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3808
3809---
3810
Cary Clark08895c42018-02-01 09:37:32 -05003811## <a name="Text_Skew_X"></a> Text Skew X
3812
Cary Clark8cc16c72017-08-25 11:51:49 -04003813<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003814<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003815is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003816<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3817<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003818
3819### Example
3820
3821<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3822
Cary Clark493df1f2017-08-25 13:14:33 -04003823<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003824## getTextSkewX
3825
Cary Clarka560c472017-11-27 10:44:06 -05003826<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003827SkScalar getTextSkewX() const
3828</pre>
3829
Cary Clark8cc16c72017-08-25 11:51:49 -04003830Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003831Default value is zero.
3832
3833### Return Value
3834
3835additional shear in x-axis relative to y-axis
3836
3837### Example
3838
3839<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3840
3841---
3842
Cary Clark493df1f2017-08-25 13:14:33 -04003843<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003844## setTextSkewX
3845
Cary Clarka560c472017-11-27 10:44:06 -05003846<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003847void setTextSkewX(SkScalar skewX)
3848</pre>
3849
Cary Clark8cc16c72017-08-25 11:51:49 -04003850Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003851Default value is zero.
3852
3853### Parameters
3854
Cary Clark8cc16c72017-08-25 11:51:49 -04003855<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003856additional shear in x-axis relative to y-axis</td>
3857 </tr>
3858</table>
3859
3860### Example
3861
3862<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3863
3864---
3865
Cary Clark08895c42018-02-01 09:37:32 -05003866## <a name="Text_Encoding"></a> Text Encoding
Cary Clark12799e12017-07-28 15:18:29 -04003867
Cary Clark8cc16c72017-08-25 11:51:49 -04003868## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003869
Cary Clarka560c472017-11-27 10:44:06 -05003870<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003871enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3872<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3873<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3874<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3875<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark1a8d7622018-03-05 13:26:16 -05003876};
3877</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003878
Cary Clark6fc50412017-09-21 12:31:06 -04003879<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003880size, 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 -04003881
Cary Clarka560c472017-11-27 10:44:06 -05003882Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003883All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003884in the total storage required.
3885
Cary Clark7cfcbca2018-01-04 16:11:51 -05003886<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 -04003887
Cary Clark7cfcbca2018-01-04 16:11:51 -05003888<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 -04003889
Cary Clark7cfcbca2018-01-04 16:11:51 -05003890<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 -04003891
Cary Clark7cfcbca2018-01-04 16:11:51 -05003892<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 -04003893A glyph index is a 16-bit word.
3894
Cary Clark8cc16c72017-08-25 11:51:49 -04003895<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 -04003896
3897### Constants
3898
3899<table>
3900 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003901 <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.
3902</td>
Cary Clark12799e12017-07-28 15:18:29 -04003903 </tr>
3904 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003905 <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.
3906</td>
Cary Clark12799e12017-07-28 15:18:29 -04003907 </tr>
3908 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003909 <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.
3910</td>
Cary Clark12799e12017-07-28 15:18:29 -04003911 </tr>
3912 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003913 <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.
3914</td>
Cary Clark12799e12017-07-28 15:18:29 -04003915 </tr>
3916
3917</table>
3918
3919### Example
3920
Cary Clarka560c472017-11-27 10:44:06 -05003921<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3922Second line is encoded in UTF-16.
3923Third line is encoded in UTF-32.
Cary Clark1a8d7622018-03-05 13:26:16 -05003924Fourth line has 16 bit glyph indices.
3925</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003926
Cary Clark493df1f2017-08-25 13:14:33 -04003927<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003928## getTextEncoding
3929
Cary Clarka560c472017-11-27 10:44:06 -05003930<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003931TextEncoding getTextEncoding() const
3932</pre>
3933
Cary Clark8cc16c72017-08-25 11:51:49 -04003934Returns <a href="#Text_Encoding">Text Encoding</a>.
3935<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 -04003936
3937### Return Value
3938
Cary Clark7cfcbca2018-01-04 16:11:51 -05003939one 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 -04003940<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003941
3942### Example
3943
3944<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
3945
3946#### Example Output
3947
3948~~~~
3949kUTF8_TextEncoding == text encoding
3950kGlyphID_TextEncoding == text encoding
3951~~~~
3952
3953</fiddle-embed></div>
3954
3955---
3956
Cary Clark493df1f2017-08-25 13:14:33 -04003957<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003958## setTextEncoding
3959
Cary Clarka560c472017-11-27 10:44:06 -05003960<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003961void setTextEncoding(TextEncoding encoding)
3962</pre>
3963
Cary Clark7cfcbca2018-01-04 16:11:51 -05003964Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003965<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
3966Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003967
3968### Parameters
3969
Cary Clark8cc16c72017-08-25 11:51:49 -04003970<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003971one 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 -04003972<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003973 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04003974#
3975
Cary Clark12799e12017-07-28 15:18:29 -04003976</table>
3977
3978### Example
3979
3980<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
3981
3982#### Example Output
3983
3984~~~~
39854 != text encoding
3986~~~~
3987
3988</fiddle-embed></div>
3989
3990---
3991
Cary Clark08895c42018-02-01 09:37:32 -05003992## <a name="Font_Metrics"></a> Font Metrics
3993
Cary Clark2a8c48b2018-02-15 17:31:24 -05003994<a href="#Font_Metrics">Font Metrics</a> describe dimensions common to the <a href="undocumented#Glyph">Glyphs</a> in <a href="undocumented#Typeface">Typeface</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003995The 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 -04003996<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04003997
Cary Clark4c06f5e2017-08-04 12:48:24 -04003998<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 -04003999X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4000are positive.
4001Y-axis values above the baseline are negative, and below the baseline are positive.
4002
4003### Example
4004
Ben Wagnere5806492017-11-09 12:08:31 -05004005<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004006
Cary Clark8cc16c72017-08-25 11:51:49 -04004007# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04004008
Cary Clarka560c472017-11-27 10:44:06 -05004009<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004010struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4011enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4012<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4013<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4014<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4015<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004016};
4017
Cary Clark8cc16c72017-08-25 11:51:49 -04004018uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4019<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4020<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4021<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4022<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4023<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4024<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4025<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4026<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4027<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4028<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4029<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4030<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4031<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4032<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4033<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004034
Cary Clark8cc16c72017-08-25 11:51:49 -04004035bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4036bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4037bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4038bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark1a8d7622018-03-05 13:26:16 -05004039};
4040</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004041
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 Clark1a8d7622018-03-05 13:26:16 -05004064};
4065</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004066
Cary Clark154beea2017-10-26 07:58:48 -04004067<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4068the underline or strikeout metric may be valid and zero.
4069Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4070
Cary Clark12799e12017-07-28 15:18:29 -04004071### Constants
4072
4073<table>
4074 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004075 <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.
4076</td>
Cary Clark12799e12017-07-28 15:18:29 -04004077 </tr>
4078 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004079 <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.
4080</td>
Cary Clark12799e12017-07-28 15:18:29 -04004081 </tr>
4082 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004083 <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.
4084</td>
Cary Clark12799e12017-07-28 15:18:29 -04004085 </tr>
4086 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004087 <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.
4088</td>
Cary Clark12799e12017-07-28 15:18:29 -04004089 </tr>
4090
4091</table>
4092
Cary Clark8cc16c72017-08-25 11:51:49 -04004093<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004094
Cary Clark8cc16c72017-08-25 11:51:49 -04004095<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004096
Cary Clark8cc16c72017-08-25 11:51:49 -04004097<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004098
Ben Wagnere5806492017-11-09 12:08:31 -05004099Greatest extent above the baseline for any glyph.
4100Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004101
Cary Clark8cc16c72017-08-25 11:51:49 -04004102<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004103
4104Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004105Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004106
Cary Clark8cc16c72017-08-25 11:51:49 -04004107<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004108
4109Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004110Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004111
Cary Clark8cc16c72017-08-25 11:51:49 -04004112<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004113
Ben Wagnere5806492017-11-09 12:08:31 -05004114Greatest extent below the baseline for any glyph.
4115Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004116
Cary Clark8cc16c72017-08-25 11:51:49 -04004117<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004118
4119Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004120Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004121
Cary Clark8cc16c72017-08-25 11:51:49 -04004122<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004123
4124Average character width, if it is available.
4125Zero if no average width is stored in the font.
4126
Cary Clark8cc16c72017-08-25 11:51:49 -04004127<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004128
4129Maximum character width.
4130
Cary Clark8cc16c72017-08-25 11:51:49 -04004131<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004132
Cary Clark2a8c48b2018-02-15 17:31:24 -05004133Minimum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004134Typically less than zero.
4135
Cary Clark8cc16c72017-08-25 11:51:49 -04004136<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004137
Cary Clark2a8c48b2018-02-15 17:31:24 -05004138Maximum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004139Typically greater than zero.
4140
Cary Clark8cc16c72017-08-25 11:51:49 -04004141<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004142
4143Height of a lower-case 'x'.
4144May be zero if no lower-case height is stored in the font.
4145
Cary Clark8cc16c72017-08-25 11:51:49 -04004146<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004147
4148Height of an upper-case letter.
4149May be zero if no upper-case height is stored in the font.
4150
Cary Clark8cc16c72017-08-25 11:51:49 -04004151<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004152
Ben Wagnere5806492017-11-09 12:08:31 -05004153Underline thickness.
4154
4155If 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 -04004156If <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 -04004157
Cary Clark8cc16c72017-08-25 11:51:49 -04004158<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004159
Ben Wagnere5806492017-11-09 12:08:31 -05004160Position of the top of the underline stroke relative to the baseline.
4161Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004162
Cary Clark8cc16c72017-08-25 11:51:49 -04004163If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4164If <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 -04004165
Cary Clark8cc16c72017-08-25 11:51:49 -04004166<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004167
Ben Wagnere5806492017-11-09 12:08:31 -05004168Strikeout thickness.
4169
4170If 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 -04004171If <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 -04004172
Cary Clark8cc16c72017-08-25 11:51:49 -04004173<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004174
Ben Wagnere5806492017-11-09 12:08:31 -05004175Position of the bottom of the strikeout stroke relative to the baseline.
4176Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004177
Cary Clark8cc16c72017-08-25 11:51:49 -04004178If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4179If <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 -04004180
Cary Clark493df1f2017-08-25 13:14:33 -04004181<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004182## hasUnderlineThickness
4183
Cary Clarka560c472017-11-27 10:44:06 -05004184<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004185bool hasUnderlineThickness(SkScalar* thickness) const
4186</pre>
4187
Ben Wagnere5806492017-11-09 12:08:31 -05004188If <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 -04004189<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,
4190return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004191
4192### Parameters
4193
Cary Clark8cc16c72017-08-25 11:51:49 -04004194<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004195storage for underline width</td>
4196 </tr>
4197</table>
4198
4199### Return Value
4200
4201true if font specifies underline width
4202
4203---
4204
Cary Clark493df1f2017-08-25 13:14:33 -04004205<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004206## hasUnderlinePosition
4207
Cary Clarka560c472017-11-27 10:44:06 -05004208<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004209bool hasUnderlinePosition(SkScalar* position) const
4210</pre>
4211
Ben Wagnere5806492017-11-09 12:08:31 -05004212If <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 -04004213<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,
4214return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004215
4216### Parameters
4217
Cary Clark8cc16c72017-08-25 11:51:49 -04004218<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4219storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004220 </tr>
4221</table>
4222
4223### Return Value
4224
Cary Clark8cc16c72017-08-25 11:51:49 -04004225true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004226
4227---
4228
Cary Clark493df1f2017-08-25 13:14:33 -04004229<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004230## hasStrikeoutThickness
4231
Cary Clarka560c472017-11-27 10:44:06 -05004232<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004233bool hasStrikeoutThickness(SkScalar* thickness) const
4234</pre>
4235
Ben Wagnere5806492017-11-09 12:08:31 -05004236If <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 -04004237<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,
4238return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004239
4240### Parameters
4241
Cary Clark8cc16c72017-08-25 11:51:49 -04004242<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004243storage for strikeout width</td>
4244 </tr>
4245</table>
4246
4247### Return Value
4248
4249true if font specifies strikeout width
4250
4251---
4252
Cary Clark493df1f2017-08-25 13:14:33 -04004253<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004254## hasStrikeoutPosition
4255
Cary Clarka560c472017-11-27 10:44:06 -05004256<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004257bool hasStrikeoutPosition(SkScalar* position) const
4258</pre>
4259
Ben Wagnere5806492017-11-09 12:08:31 -05004260If <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 -04004261<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,
4262return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004263
4264### Parameters
4265
Cary Clark8cc16c72017-08-25 11:51:49 -04004266<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4267storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004268 </tr>
4269</table>
4270
4271### Return Value
4272
Cary Clark8cc16c72017-08-25 11:51:49 -04004273true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004274
4275---
4276
Cary Clark493df1f2017-08-25 13:14:33 -04004277<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004278## getFontMetrics
4279
Cary Clarka560c472017-11-27 10:44:06 -05004280<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004281SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4282</pre>
4283
Cary Clark8cc16c72017-08-25 11:51:49 -04004284Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4285The 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 -04004286descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004287If <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>.
4288Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4289dimensions 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>,
4290<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4291Results 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 -04004292is ignored.
4293
4294### Parameters
4295
Cary Clark8cc16c72017-08-25 11:51:49 -04004296<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4297storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4298 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004299additional multiplier for returned values</td>
4300 </tr>
4301</table>
4302
4303### Return Value
4304
4305recommended spacing between lines
4306
4307### Example
4308
4309<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4310
4311### See Also
4312
Cary Clark8cc16c72017-08-25 11:51:49 -04004313<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 -04004314
4315---
4316
Cary Clark493df1f2017-08-25 13:14:33 -04004317<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004318## getFontSpacing
4319
Cary Clarka560c472017-11-27 10:44:06 -05004320<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004321SkScalar getFontSpacing() const
4322</pre>
4323
4324Returns the recommended spacing between lines: the sum of metrics
4325descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004326Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004327dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004328Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004329
4330### Return Value
4331
4332recommended spacing between lines
4333
4334### Example
4335
4336<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4337
4338#### Example Output
4339
4340~~~~
4341textSize: 12 fontSpacing: 13.9688
4342textSize: 18 fontSpacing: 20.9531
4343textSize: 24 fontSpacing: 27.9375
4344textSize: 32 fontSpacing: 37.25
4345~~~~
4346
4347</fiddle-embed></div>
4348
4349---
4350
Cary Clark493df1f2017-08-25 13:14:33 -04004351<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004352## getFontBounds
4353
Cary Clarka560c472017-11-27 10:44:06 -05004354<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004355SkRect getFontBounds() const
4356</pre>
4357
Cary Clark2a8c48b2018-02-15 17:31:24 -05004358Returns the union of bounds of all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004359Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004360ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4361and <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 -04004362
Cary Clark8cc16c72017-08-25 11:51:49 -04004363If <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 -05004364returns 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 -04004365<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 -04004366
4367### Return Value
4368
Cary Clark2a8c48b2018-02-15 17:31:24 -05004369union of bounds of all <a href="undocumented#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004370
4371### Example
4372
4373<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4374
4375#### Example Output
4376
4377~~~~
4378metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4379font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4380~~~~
4381
4382</fiddle-embed></div>
4383
4384---
4385
Cary Clark493df1f2017-08-25 13:14:33 -04004386<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004387## textToGlyphs
4388
Cary Clarka560c472017-11-27 10:44:06 -05004389<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004390int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4391</pre>
4392
Cary Clark8cc16c72017-08-25 11:51:49 -04004393Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4394Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4395<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>.
4396<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004397
Cary Clarkbc5697d2017-10-04 14:31:33 -04004398Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004399
Cary Clark8cc16c72017-08-25 11:51:49 -04004400If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4401If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004402
Cary Clark8cc16c72017-08-25 11:51:49 -04004403If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004404<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004405
4406### Parameters
4407
Cary Clark8cc16c72017-08-25 11:51:49 -04004408<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004409character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004410 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004411length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004412 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004413storage for glyph indices; may be nullptr</td>
4414 </tr>
4415</table>
4416
4417### Return Value
4418
Cary Clark8cc16c72017-08-25 11:51:49 -04004419number 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 -04004420
4421### Example
4422
4423<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4424
4425---
4426
Cary Clark493df1f2017-08-25 13:14:33 -04004427<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004428## countText
4429
Cary Clarka560c472017-11-27 10:44:06 -05004430<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004431int countText(const void* text, size_t byteLength) const
4432</pre>
4433
Cary Clark2a8c48b2018-02-15 17:31:24 -05004434Returns the number of <a href="undocumented#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4435Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004436Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004437
4438### Parameters
4439
Cary Clark8cc16c72017-08-25 11:51:49 -04004440<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004441character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004442 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004443length of character storage in bytes</td>
4444 </tr>
4445</table>
4446
4447### Return Value
4448
Cary Clark2a8c48b2018-02-15 17:31:24 -05004449number of <a href="undocumented#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 -04004450
4451### Example
4452
4453<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4454
4455#### Example Output
4456
4457~~~~
4458count = 5
4459~~~~
4460
4461</fiddle-embed></div>
4462
4463---
4464
Cary Clark493df1f2017-08-25 13:14:33 -04004465<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004466## containsText
4467
Cary Clarka560c472017-11-27 10:44:06 -05004468<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004469bool containsText(const void* text, size_t byteLength) const
4470</pre>
4471
Cary Clark7cfcbca2018-01-04 16:11:51 -05004472Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004473Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004474<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004475
Cary Clark8cc16c72017-08-25 11:51:49 -04004476If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4477returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4478does 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 -04004479
Cary Clarkce101242017-09-01 15:51:02 -04004480Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004481
4482### Parameters
4483
Cary Clark8cc16c72017-08-25 11:51:49 -04004484<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004485array of characters or <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004486 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4487number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004488 </tr>
4489</table>
4490
4491### Return Value
4492
Cary Clark8cc16c72017-08-25 11:51:49 -04004493true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004494
4495### Example
4496
Cary Clark8cc16c72017-08-25 11:51:49 -04004497<div><fiddle-embed name="9202369019552f09cd4bec7f3046fee4"><div><a href="#SkPaint_containsText">containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05004498corresponding to the Unicode surrogate code point.
4499</div>
Cary Clark12799e12017-07-28 15:18:29 -04004500
4501#### Example Output
4502
4503~~~~
45040x00b0 == has char
45050xd800 != has char
4506~~~~
4507
4508</fiddle-embed></div>
4509
4510### Example
4511
Cary Clark8cc16c72017-08-25 11:51:49 -04004512<div><fiddle-embed name="904227febfd1c2e264955da0ef66da73"><div><a href="#SkPaint_containsText">containsText</a> returns true that glyph index is greater than zero, not
Cary Clark1a8d7622018-03-05 13:26:16 -05004513that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.
4514</div>
Cary Clark12799e12017-07-28 15:18:29 -04004515
4516#### Example Output
4517
4518~~~~
45190x01ff == has glyph
45200x0000 != has glyph
45210xffff == has glyph
4522~~~~
4523
4524</fiddle-embed></div>
4525
4526### See Also
4527
Cary Clark8cc16c72017-08-25 11:51:49 -04004528<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004529
4530---
4531
Cary Clark493df1f2017-08-25 13:14:33 -04004532<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004533## glyphsToUnichars
4534
Cary Clarka560c472017-11-27 10:44:06 -05004535<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004536void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4537</pre>
4538
Cary Clark7cfcbca2018-01-04 16:11:51 -05004539Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4540<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004541Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004542by <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 -04004543
Cary Clark2a8c48b2018-02-15 17:31:24 -05004544Only supported on platforms that use FreeType as the <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004545
4546### Parameters
4547
Cary Clark8cc16c72017-08-25 11:51:49 -04004548<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004549array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004550 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004551length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004552 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004553storage for character codes, one per glyph</td>
4554 </tr>
4555</table>
4556
4557### Example
4558
Cary Clark1a8d7622018-03-05 13:26:16 -05004559<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.
4560</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004561
4562---
4563
Cary Clark08895c42018-02-01 09:37:32 -05004564## <a name="Measure_Text"></a> Measure Text
Cary Clark12799e12017-07-28 15:18:29 -04004565
Cary Clark493df1f2017-08-25 13:14:33 -04004566<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004567## measureText
4568
Cary Clarka560c472017-11-27 10:44:06 -05004569<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004570SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4571</pre>
4572
Cary Clark8cc16c72017-08-25 11:51:49 -04004573Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4574and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4575The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4576Uses <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,
4577and <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
4578<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4579Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4580The 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 -04004581
4582### Parameters
4583
Cary Clark8cc16c72017-08-25 11:51:49 -04004584<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004585character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004586 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4587number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4588 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004589returns bounding box relative to (0, 0) if not nullptr</td>
4590 </tr>
4591</table>
4592
4593### Return Value
4594
4595advance width or height
4596
4597### Example
4598
4599<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4600
4601---
4602
Cary Clark2dc84ad2018-01-26 12:56:22 -05004603<a name="SkPaint_measureText_2"></a>
4604
Cary Clarka560c472017-11-27 10:44:06 -05004605<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004606SkScalar measureText(const void* text, size_t length) const
4607</pre>
4608
Cary Clark8cc16c72017-08-25 11:51:49 -04004609Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4610and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4611The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4612Uses <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,
4613and <a href="#Text_Size">Text Size</a> to scale the metrics.
4614Does 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 -04004615
4616### Parameters
4617
Cary Clark8cc16c72017-08-25 11:51:49 -04004618<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004619character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004620 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4621number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004622 </tr>
4623</table>
4624
4625### Return Value
4626
4627advance width or height
4628
4629### Example
4630
4631<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4632
4633#### Example Output
4634
4635~~~~
4636default width = 5
4637double width = 10
4638~~~~
4639
4640</fiddle-embed></div>
4641
4642---
4643
Cary Clark493df1f2017-08-25 13:14:33 -04004644<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004645## breakText
4646
Cary Clarka560c472017-11-27 10:44:06 -05004647<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004648size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004649 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004650</pre>
4651
Cary Clark8cc16c72017-08-25 11:51:49 -04004652Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4653If <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
4654equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4655If <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
4656equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4657Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4658Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4659Uses <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,
4660and <a href="#Text_Size">Text Size</a> to scale the metrics.
4661Does 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 -04004662
4663### Parameters
4664
Cary Clark8cc16c72017-08-25 11:51:49 -04004665<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004666character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004667 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4668number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4669 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4670advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4671 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4672returns 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 -04004673 </tr>
4674</table>
4675
4676### Return Value
4677
Cary Clark8cc16c72017-08-25 11:51:49 -04004678bytes 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 -04004679
4680### Example
4681
Cary Clark4c06f5e2017-08-04 12:48:24 -04004682<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href="undocumented#Line">Line</a> under "" shows desired width, shorter than available characters.
Cary Clark1a8d7622018-03-05 13:26:16 -05004683<a href="undocumented#Line">Line</a> under "" shows measured width after breaking <a href="#SkPaint_breakText_text">text</a>.
4684</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004685
4686---
4687
Cary Clark493df1f2017-08-25 13:14:33 -04004688<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004689## getTextWidths
4690
Cary Clarka560c472017-11-27 10:44:06 -05004691<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4692int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004693</pre>
4694
Cary Clark8cc16c72017-08-25 11:51:49 -04004695Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4696the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4697Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4698If <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 -05004699if <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 -04004700If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4701If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4702Uses <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,
4703and <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>.
4704Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4705Does 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 -04004706
4707### Parameters
4708
Cary Clark8cc16c72017-08-25 11:51:49 -04004709<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004710character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004711 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4712number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4713 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4714returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4715 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4716returns <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 -04004717 </tr>
4718</table>
4719
4720### Return Value
4721
Cary Clark8cc16c72017-08-25 11:51:49 -04004722glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004723
4724### Example
4725
Cary Clark2a8c48b2018-02-15 17:31:24 -05004726<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href="undocumented#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 Clark1a8d7622018-03-05 13:26:16 -05004727The underlines show the <a href="#SkPaint_getTextWidths_text">text</a> advance, spaced to keep them distinct.
4728</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004729
4730---
4731
Cary Clark08895c42018-02-01 09:37:32 -05004732## <a name="Text_Path"></a> Text Path
4733
Cary Clark2a8c48b2018-02-15 17:31:24 -05004734<a href="#Text_Path">Text Path</a> describes the geometry of <a href="undocumented#Glyph">Glyphs</a> used to draw text.
Cary Clark12799e12017-07-28 15:18:29 -04004735
Cary Clark493df1f2017-08-25 13:14:33 -04004736<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004737## getTextPath
4738
Cary Clarka560c472017-11-27 10:44:06 -05004739<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4740void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004741</pre>
4742
Cary Clark8cc16c72017-08-25 11:51:49 -04004743Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4744Uses <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,
4745and <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.
4746All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4747Uses <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 -04004748
4749### Parameters
4750
Cary Clark8cc16c72017-08-25 11:51:49 -04004751<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004752character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004753 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4754number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4755 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004756<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 -04004757 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004758<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 -04004759 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004760geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004761 </tr>
4762</table>
4763
4764### Example
4765
Cary Clark4c06f5e2017-08-04 12:48:24 -04004766<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 Clark1a8d7622018-03-05 13:26:16 -05004767the offset location. The result is rendered with one draw call.
4768</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004769
4770---
4771
Cary Clark493df1f2017-08-25 13:14:33 -04004772<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004773## getPosTextPath
4774
Cary Clarka560c472017-11-27 10:44:06 -05004775<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4776void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004777</pre>
4778
Cary Clark8cc16c72017-08-25 11:51:49 -04004779Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4780Uses <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,
4781and <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.
4782All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4783Uses <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>.
4784<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004785
4786### Parameters
4787
Cary Clark8cc16c72017-08-25 11:51:49 -04004788<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004789character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004790 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4791number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4792 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004793positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004794 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004795geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004796 </tr>
4797</table>
4798
4799### Example
4800
Cary Clark1a8d7622018-03-05 13:26:16 -05004801<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three <a href="undocumented#Glyph">Glyphs</a> to eliminate overlaps, and strokes the result.
4802</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004803
4804---
4805
Cary Clark08895c42018-02-01 09:37:32 -05004806## <a name="Text_Intercepts"></a> Text Intercepts
4807
Cary Clark2a8c48b2018-02-15 17:31:24 -05004808<a href="#Text_Intercepts">Text Intercepts</a> describe the intersection of drawn text <a href="undocumented#Glyph">Glyphs</a> with a pair
Cary Clark8cc16c72017-08-25 11:51:49 -04004809of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004810underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004811
Cary Clark493df1f2017-08-25 13:14:33 -04004812<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004813## getTextIntercepts
4814
Cary Clarka560c472017-11-27 10:44:06 -05004815<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004816int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4817 const SkScalar bounds[2], SkScalar* intervals) const
4818</pre>
4819
Cary Clark8cc16c72017-08-25 11:51:49 -04004820Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4821<a href="#SkPaint_getTextIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getTextIntercepts_text">text</a> advance.
Cary Clark2a8c48b2018-02-15 17:31:24 -05004822The return count is zero or a multiple of two, and is at most twice the number of <a href="undocumented#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004823the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004824Uses <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,
4825and <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.
4826Uses <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>.
4827Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4828<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004829
4830### Parameters
4831
Cary Clark8cc16c72017-08-25 11:51:49 -04004832<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004833character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004834 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4835number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4836 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004837<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 -04004838 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004839<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 -04004840 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004841lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004842 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004843returned intersections; may be nullptr</td>
4844 </tr>
4845</table>
4846
4847### Return Value
4848
4849number of intersections; may be zero
4850
4851### Example
4852
Cary Clark1a8d7622018-03-05 13:26:16 -05004853<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
4854</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004855
4856---
4857
Cary Clark493df1f2017-08-25 13:14:33 -04004858<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004859## getPosTextIntercepts
4860
Cary Clarka560c472017-11-27 10:44:06 -05004861<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004862int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4863 const SkScalar bounds[2], SkScalar* intervals) const
4864</pre>
4865
Cary Clark8cc16c72017-08-25 11:51:49 -04004866Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4867<a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getPosTextIntercepts_text">text</a> advance.
Cary Clark2a8c48b2018-02-15 17:31:24 -05004868The return count is zero or a multiple of two, and is at most twice the number of <a href="undocumented#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004869the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004870Uses <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,
4871and <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.
4872Uses <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>.
4873Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4874<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004875
4876### Parameters
4877
Cary Clark8cc16c72017-08-25 11:51:49 -04004878<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004879character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004880 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4881number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4882 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004883positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004884 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004885lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004886 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004887returned intersections; may be nullptr</td>
4888 </tr>
4889</table>
4890
4891### Return Value
4892
Cary Clarka523d2d2017-08-30 08:58:10 -04004893number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004894
4895### Example
4896
Cary Clark1a8d7622018-03-05 13:26:16 -05004897<div><fiddle-embed name="98b2dfc552d0540a7c041fe7a2839bd7"><div><a href="undocumented#Text">Text</a> intercepts draw on either side of, but not inside, <a href="undocumented#Glyph">Glyphs</a> in a run.
4898</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004899
4900---
4901
Cary Clark493df1f2017-08-25 13:14:33 -04004902<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004903## getPosTextHIntercepts
4904
Cary Clarka560c472017-11-27 10:44:06 -05004905<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4906int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4907 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004908</pre>
4909
Cary Clark8cc16c72017-08-25 11:51:49 -04004910Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4911<a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getPosTextHIntercepts_text">text</a> advance.
Cary Clark2a8c48b2018-02-15 17:31:24 -05004912The return count is zero or a multiple of two, and is at most twice the number of <a href="undocumented#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004913the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004914Uses <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,
4915and <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.
4916Uses <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>.
4917Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4918<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004919
4920### Parameters
4921
Cary Clark8cc16c72017-08-25 11:51:49 -04004922<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004923character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004924 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4925number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4926 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004927positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004928 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004929position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004930 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004931lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004932 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004933returned intersections; may be nullptr</td>
4934 </tr>
4935</table>
4936
4937### Return Value
4938
4939number of intersections; may be zero
4940
4941### Example
4942
Cary Clark1a8d7622018-03-05 13:26:16 -05004943<div><fiddle-embed name="dc9851c43acc3716aca8c9a4d40d452d"><div><a href="undocumented#Text">Text</a> intercepts do not take stroke thickness into consideration.
4944</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004945
4946---
4947
Cary Clark493df1f2017-08-25 13:14:33 -04004948<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004949## getTextBlobIntercepts
4950
Cary Clarka560c472017-11-27 10:44:06 -05004951<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4952int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004953</pre>
4954
Cary Clark8cc16c72017-08-25 11:51:49 -04004955Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4956<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clark2a8c48b2018-02-15 17:31:24 -05004957The return count is zero or a multiple of two, and is at most twice the number of <a href="undocumented#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004958the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004959Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04004960and <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 -04004961Uses 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 -05004962<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
4963
Cary Clark8cc16c72017-08-25 11:51:49 -04004964Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
4965<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004966
4967### Parameters
4968
Cary Clark8cc16c72017-08-25 11:51:49 -04004969<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004970<a href="undocumented#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004971 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004972lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004973 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004974returned intersections; may be nullptr</td>
4975 </tr>
4976</table>
4977
4978### Return Value
4979
4980number of intersections; may be zero
4981
4982### Example
4983
Cary Clark3cd22cc2017-12-01 11:49:58 -05004984<div><fiddle-embed name="71959a66b2290d70003887c0de339266"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004985
4986---
4987
Cary Clark493df1f2017-08-25 13:14:33 -04004988<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004989## nothingToDraw
4990
Cary Clarka560c472017-11-27 10:44:06 -05004991<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004992bool nothingToDraw() const
4993</pre>
4994
Cary Clark8cc16c72017-08-25 11:51:49 -04004995Returns true if <a href="#Paint">Paint</a> prevents all drawing;
4996otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004997
Cary Clark2a8c48b2018-02-15 17:31:24 -05004998Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="undocumented#Alpha">Color Alpha</a> computes a
4999new <a href="undocumented#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005000
5001### Return Value
5002
Cary Clark8cc16c72017-08-25 11:51:49 -04005003true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005004
5005### Example
5006
5007<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
5008
5009#### Example Output
5010
5011~~~~
5012initial nothing to draw: false
5013blend dst nothing to draw: true
5014blend src over nothing to draw: false
5015alpha 0 nothing to draw: true
5016~~~~
5017
5018</fiddle-embed></div>
5019
5020---
5021
Cary Clark08895c42018-02-01 09:37:32 -05005022## <a name="Fast_Bounds"></a> Fast Bounds
5023
Cary Clark8cc16c72017-08-25 11:51:49 -04005024<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5025<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005026
Cary Clark493df1f2017-08-25 13:14:33 -04005027<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005028## canComputeFastBounds
5029
Cary Clarka560c472017-11-27 10:44:06 -05005030<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005031bool canComputeFastBounds() const
5032</pre>
5033
Cary Clark8cc16c72017-08-25 11:51:49 -04005034Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5035to 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 -04005036always returns false.
5037
5038### Return Value
5039
Cary Clark8cc16c72017-08-25 11:51:49 -04005040true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005041
5042---
5043
Cary Clark493df1f2017-08-25 13:14:33 -04005044<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005045## computeFastBounds
5046
Cary Clarka560c472017-11-27 10:44:06 -05005047<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005048const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5049</pre>
5050
Cary Clark8cc16c72017-08-25 11:51:49 -04005051Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005052raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005053effects 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 -04005054parameter. It returns the adjusted bounds that can then be used
Cary Clark2a8c48b2018-02-15 17:31:24 -05005055for <a href="SkCanvas_Reference#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005056
Cary Clarkbc5697d2017-10-04 14:31:33 -04005057The 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 -04005058should 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 -04005059use 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 -04005060<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005061
5062### Parameters
5063
Cary Clark8cc16c72017-08-25 11:51:49 -04005064<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5065geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5066 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005067computed bounds of geometry; may not be nullptr</td>
5068 </tr>
5069</table>
5070
5071### Return Value
5072
5073fast computed bounds
5074
5075---
5076
Cary Clark493df1f2017-08-25 13:14:33 -04005077<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005078## computeFastStrokeBounds
5079
Cary Clarka560c472017-11-27 10:44:06 -05005080<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005081const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5082</pre>
5083
5084### Parameters
5085
Cary Clark8cc16c72017-08-25 11:51:49 -04005086<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5087geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5088 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005089computed bounds of geometry</td>
5090 </tr>
5091</table>
5092
5093### Return Value
5094
5095fast computed bounds
5096
5097---
5098
Cary Clark493df1f2017-08-25 13:14:33 -04005099<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005100## doComputeFastBounds
5101
Cary Clarka560c472017-11-27 10:44:06 -05005102<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5103const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005104</pre>
5105
Cary Clarkce101242017-09-01 15:51:02 -04005106Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5107account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5108altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005109
5110### Parameters
5111
Cary Clark8cc16c72017-08-25 11:51:49 -04005112<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5113geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5114 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005115computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005116 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5117overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005118 </tr>
5119</table>
5120
5121### Return Value
5122
5123fast computed bounds
5124
5125---
5126
Cary Clark78de7512018-02-07 07:27:09 -05005127## <a name="Utility"></a> Utility
5128
5129| name | description |
5130| --- | --- |
Cary Clark2a8c48b2018-02-15 17:31:24 -05005131| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="undocumented#Glyph">Glyphs</a> |
5132| <a href="#SkPaint_countText">countText</a> | returns number of <a href="undocumented#Glyph">Glyphs</a> in text |
5133| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="undocumented#Glyph">Glyphs</a> into text |
Cary Clark78de7512018-02-07 07:27:09 -05005134| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
5135| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
5136| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
5137
Cary Clark493df1f2017-08-25 13:14:33 -04005138<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005139## toString
5140
Cary Clarka560c472017-11-27 10:44:06 -05005141<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark2dc84ad2018-01-26 12:56:22 -05005142void toString(SkString* str) const
Cary Clark12799e12017-07-28 15:18:29 -04005143</pre>
5144
Cary Clarkce101242017-09-01 15:51:02 -04005145Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5146internal debugging tools. The interface and implementation may be
Cary Clark7cfcbca2018-01-04 16:11:51 -05005147suppressed by defining SK_IGNORE_TO_STRING.
Cary Clark12799e12017-07-28 15:18:29 -04005148
5149### Parameters
5150
Cary Clark8cc16c72017-08-25 11:51:49 -04005151<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005152storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005153 </tr>
5154</table>
5155
5156### Example
5157
5158<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5159
5160#### Example Output
5161
5162~~~~
5163text size = 12
5164~~~~
5165
5166</fiddle-embed></div>
5167
Cary Clark2ade9972017-11-02 17:49:34 -04005168### See Also
5169
Cary Clark2a8c48b2018-02-15 17:31:24 -05005170<a href="undocumented#SkPathEffect_toString">SkPathEffect::toString</a> <a href="undocumented#SkMaskFilter_toString">SkMaskFilter::toString</a> <a href="undocumented#SkColorFilter_toString">SkColorFilter::toString</a> <a href="undocumented#SkImageFilter_toString">SkImageFilter::toString</a>
Cary Clark2ade9972017-11-02 17:49:34 -04005171
Cary Clark12799e12017-07-28 15:18:29 -04005172---
5173