blob: 88a100b97850ff59fe89e38ccfacce476facc8af [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
Cary Clark06c20f32018-03-20 15:53:27 -0400534### See Also
535
536<a href="#SkPaint_notequal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a>
537
Cary Clark12799e12017-07-28 15:18:29 -0400538---
539
Cary Clarka560c472017-11-27 10:44:06 -0500540<a name="SkPaint_notequal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400541## operator!=
542
Cary Clarka560c472017-11-27 10:44:06 -0500543<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400544bool operator!=(const SkPaint& a, const SkPaint& b)
545</pre>
546
Cary Clarka560c472017-11-27 10:44:06 -0500547Compares <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 +0000548if <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 -0400549<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 -0400550
551### Parameters
552
Cary Clarka560c472017-11-27 10:44:06 -0500553<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400554<a href="#Paint">Paint</a> to compare</td>
Cary Clarka560c472017-11-27 10:44:06 -0500555 </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400556<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400557 </tr>
558</table>
559
560### Return Value
561
Cary Clark8cc16c72017-08-25 11:51:49 -0400562true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400563
564### Example
565
566<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
567
568#### Example Output
569
570~~~~
571paint1 == paint2
572paint1 == paint2
573~~~~
574
575</fiddle-embed></div>
576
Cary Clark06c20f32018-03-20 15:53:27 -0400577### See Also
578
579<a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a>
580
Cary Clark12799e12017-07-28 15:18:29 -0400581---
582
Cary Clark493df1f2017-08-25 13:14:33 -0400583<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400584## getHash
585
Cary Clarka560c472017-11-27 10:44:06 -0500586<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400587uint32_t getHash() const
588</pre>
589
Cary Clark8cc16c72017-08-25 11:51:49 -0400590Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400591Identical hashes guarantee that the paints are
592equivalent, but differing hashes do not guarantee that the paints have differing
593contents.
594
Cary Clark8cc16c72017-08-25 11:51:49 -0400595If <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 -0400596their hashes are also equal.
597
598The hash returned is platform and implementation specific.
599
600### Return Value
601
602a shallow hash
603
604### Example
605
606<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
607
608#### Example Output
609
610~~~~
611paint1 == paint2
612paint1.getHash() == paint2.getHash()
613~~~~
614
615</fiddle-embed></div>
616
617---
618
Cary Clark08895c42018-02-01 09:37:32 -0500619## <a name="Hinting"></a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400620
Cary Clark8cc16c72017-08-25 11:51:49 -0400621## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400622
Cary Clarka560c472017-11-27 10:44:06 -0500623<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400624enum <a href="#Hinting">Hinting</a> {
625<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
626<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
627<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
628<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark1a8d7622018-03-05 13:26:16 -0500629};
630</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400631
Cary Clark8cc16c72017-08-25 11:51:49 -0400632<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
633look 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 -0400634muted effect or no effect at all depending on the platform.
635
Cary Clark7cfcbca2018-01-04 16:11:51 -0500636The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark2a8c48b2018-02-15 17:31:24 -0500637as the <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400638
639### Constants
640
641<table>
642 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400643 <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 -0500644With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
645bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400646outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -0500647to 26.6 fractional pixels.
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_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 -0500652With FreeType, this is equivalent in spirit to the
653FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400654lighter hinting algorithm for non-monochrome modes.
Cary Clark1a8d7622018-03-05 13:26:16 -0500655Generated <a href="undocumented#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.
656</td>
Cary Clark12799e12017-07-28 15:18:29 -0400657 </tr>
658 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400659 <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 -0500660With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
661choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -0500662gray-level rendering.
663</td>
Cary Clark12799e12017-07-28 15:18:29 -0400664 </tr>
665 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -0500666 <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
667FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
668FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
669horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -0500670variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
671</td>
Cary Clark12799e12017-07-28 15:18:29 -0400672 </tr>
673</table>
674
Cary Clark7cfcbca2018-01-04 16:11:51 -0500675On Windows with DirectWrite, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400676
Cary Clark8cc16c72017-08-25 11:51:49 -0400677<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400678Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400679
680
681
Cary Clark493df1f2017-08-25 13:14:33 -0400682<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400683## getHinting
684
Cary Clarka560c472017-11-27 10:44:06 -0500685<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400686Hinting getHinting() const
687</pre>
688
689Returns level of glyph outline adjustment.
690
691### Return Value
692
Cary Clark8cc16c72017-08-25 11:51:49 -0400693one 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 -0400694
695### Example
696
697<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
698
699#### Example Output
700
701~~~~
702SkPaint::kNormal_Hinting == paint.getHinting()
703~~~~
704
705</fiddle-embed></div>
706
707---
708
Cary Clark493df1f2017-08-25 13:14:33 -0400709<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400710## setHinting
711
Cary Clarka560c472017-11-27 10:44:06 -0500712<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400713void setHinting(Hinting hintingLevel)
714</pre>
715
716Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400717Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400718
Cary Clark8cc16c72017-08-25 11:51:49 -0400719| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400720| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400721| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400722| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
723| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
724| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400725
726### Parameters
727
Cary Clark8cc16c72017-08-25 11:51:49 -0400728<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
729one 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 -0400730 </tr>
731</table>
732
733### Example
734
735<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
736
737#### Example Output
738
739~~~~
740paint1 == paint2
741~~~~
742
743</fiddle-embed></div>
744
745---
746
Cary Clark08895c42018-02-01 09:37:32 -0500747## <a name="Flags"></a> Flags
Cary Clark12799e12017-07-28 15:18:29 -0400748
Cary Clark8cc16c72017-08-25 11:51:49 -0400749## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400750
Cary Clarka560c472017-11-27 10:44:06 -0500751<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400752enum <a href="#Flags">Flags</a> {
753<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
754<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
755<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
756<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
757<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
758<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
759<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
760<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
761<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
762<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
763<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400764
Cary Clark8cc16c72017-08-25 11:51:49 -0400765<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400766};
Cary Clark1a8d7622018-03-05 13:26:16 -0500767
Cary Clark12799e12017-07-28 15:18:29 -0400768</pre>
769
Cary Clark8cc16c72017-08-25 11:51:49 -0400770The bit values stored in <a href="#Flags">Flags</a>.
771The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400772with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400773All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400774multiple settings at once.
775
776### Constants
777
778<table>
779 <tr>
Cary Clarka560c472017-11-27 10:44:06 -0500780 <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 -0400781 </tr>
782 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400783 <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 -0400784 </tr>
785 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400786 <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 -0400787 </tr>
788 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500789 <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 -0400790 </tr>
791 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500792 <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 -0400793 </tr>
794 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500795 <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 -0400796 </tr>
797 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500798 <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 -0400799 </tr>
800 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500801 <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 -0400802 </tr>
803 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400804 <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 -0400805 </tr>
806 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400807 <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 -0400808 </tr>
809 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400810 <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 -0400811 </tr>
812 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400813 <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 -0400814 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400815<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400816
Cary Clark06c20f32018-03-20 15:53:27 -0400817
Cary Clark12799e12017-07-28 15:18:29 -0400818
Cary Clark8cc16c72017-08-25 11:51:49 -0400819## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400820
Cary Clark4855f782018-02-06 09:41:53 -0500821soonOnly valid for Android framework.
822
Cary Clarka560c472017-11-27 10:44:06 -0500823<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400824enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
825<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
826<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark1a8d7622018-03-05 13:26:16 -0500827};
828</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400829
830### Constants
831
832<table>
833 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500834 <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 -0400835 </tr>
836 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500837 <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 -0400838 </tr>
Cary Clark4855f782018-02-06 09:41:53 -0500839
Cary Clark06c20f32018-03-20 15:53:27 -0400840
Cary Clark12799e12017-07-28 15:18:29 -0400841
Cary Clark493df1f2017-08-25 13:14:33 -0400842<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400843## getFlags
844
Cary Clarka560c472017-11-27 10:44:06 -0500845<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400846uint32_t getFlags() const
847</pre>
848
Cary Clark8cc16c72017-08-25 11:51:49 -0400849Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
850bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400851
852### Return Value
853
Cary Clark8cc16c72017-08-25 11:51:49 -0400854zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400855
856### Example
857
858<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
859
860#### Example Output
861
862~~~~
863(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
864~~~~
865
866</fiddle-embed></div>
867
868---
869
Cary Clark493df1f2017-08-25 13:14:33 -0400870<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400871## setFlags
872
Cary Clarka560c472017-11-27 10:44:06 -0500873<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400874void setFlags(uint32_t flags)
875</pre>
876
Cary Clark8cc16c72017-08-25 11:51:49 -0400877Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
878All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400879
880### Parameters
881
Cary Clark8cc16c72017-08-25 11:51:49 -0400882<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
883union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400884 </tr>
885</table>
886
887### Example
888
889<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
890
891#### Example Output
892
893~~~~
894paint.isAntiAlias()
895paint.isDither()
896~~~~
897
898</fiddle-embed></div>
899
900---
901
Cary Clark08895c42018-02-01 09:37:32 -0500902## <a name="Anti-alias"></a> Anti-alias
903
Cary Clarka560c472017-11-27 10:44:06 -0500904Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400905If <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 -0500906If <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 -0400907
Cary Clark2a8c48b2018-02-15 17:31:24 -0500908The rule for <a href="undocumented#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400909passing through the pixel center may, but is not required to, draw the pixel.
910
Cary Clark2a8c48b2018-02-15 17:31:24 -0500911<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 -0400912active <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 -0400913
Cary Clark7cfcbca2018-01-04 16:11:51 -0500914A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500915<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400916<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400917
Cary Clarka560c472017-11-27 10:44:06 -0500918The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400919
Cary Clarka560c472017-11-27 10:44:06 -0500920Anti-alias is disabled by default.
921Anti-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 -0400922at compile time.
923
924### Example
925
926<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
927A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400928The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clark1a8d7622018-03-05 13:26:16 -0500929<a href="undocumented#Alias">Aliasing</a> easier to see.
930</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400931
Cary Clark493df1f2017-08-25 13:14:33 -0400932<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400933## isAntiAlias
934
Cary Clarka560c472017-11-27 10:44:06 -0500935<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400936bool isAntiAlias() const
937</pre>
938
Cary Clark4c06f5e2017-08-04 12:48:24 -0400939If 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 -0400940
Cary Clark8cc16c72017-08-25 11:51:49 -0400941Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400942
943### Return Value
944
Cary Clark8cc16c72017-08-25 11:51:49 -0400945<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400946
947### Example
948
949<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
950
951#### Example Output
952
953~~~~
954paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
955paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
956~~~~
957
958</fiddle-embed></div>
959
960---
961
Cary Clark493df1f2017-08-25 13:14:33 -0400962<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400963## setAntiAlias
964
Cary Clarka560c472017-11-27 10:44:06 -0500965<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400966void setAntiAlias(bool aa)
967</pre>
968
Cary Clark4c06f5e2017-08-04 12:48:24 -0400969Requests, 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 -0400970partial transparency.
971
Cary Clark8cc16c72017-08-25 11:51:49 -0400972Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
973Clears <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 -0400974
975### Parameters
976
Cary Clark8cc16c72017-08-25 11:51:49 -0400977<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
978setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400979 </tr>
980</table>
981
982### Example
983
984<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
985
986#### Example Output
987
988~~~~
989paint1 == paint2
990~~~~
991
992</fiddle-embed></div>
993
994---
995
Cary Clark08895c42018-02-01 09:37:32 -0500996## <a name="Dither"></a> Dither
997
Cary Clark7cfcbca2018-01-04 16:11:51 -0500998<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -0400999This can help to smooth color transitions and reducing banding in gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001000Dithering lessens visible banding from <a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
1001and <a href="SkImageInfo_Reference#kRGBA_8888_SkColorType">kRGBA_8888_SkColorType</a> gradients,
1002and 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 -04001003
1004Dithering is always enabled for linear gradients drawing into
Cary Clark2a8c48b2018-02-15 17:31:24 -05001005<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>.
1006<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
1007<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 -04001008
Cary Clark8cc16c72017-08-25 11:51:49 -04001009<a href="#Dither">Dither</a> is disabled by default.
1010<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 -04001011at compile time.
1012
Cary Clark8cc16c72017-08-25 11:51:49 -04001013Some 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 -04001014
1015### Example
1016
1017<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 -05001018alternating nearby colors from pixel to pixel.
1019</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001020
1021### Example
1022
1023<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001024Drawing the gradient repeatedly with <a href="undocumented#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001025dither, making it easier to see.
1026</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001027
Cary Clark493df1f2017-08-25 13:14:33 -04001028<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001029## isDither
1030
Cary Clarka560c472017-11-27 10:44:06 -05001031<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001032bool isDither() const
1033</pre>
1034
1035If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001036Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001037
1038### Return Value
1039
Cary Clark8cc16c72017-08-25 11:51:49 -04001040<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001041
1042### Example
1043
1044<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1045
1046#### Example Output
1047
1048~~~~
1049paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1050paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1051~~~~
1052
1053</fiddle-embed></div>
1054
1055---
1056
Cary Clark493df1f2017-08-25 13:14:33 -04001057<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001058## setDither
1059
Cary Clarka560c472017-11-27 10:44:06 -05001060<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001061void setDither(bool dither)
1062</pre>
1063
1064Requests, but does not require, to distribute color error.
1065
Cary Clark8cc16c72017-08-25 11:51:49 -04001066Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1067Clears <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 -04001068
1069### Parameters
1070
Cary Clark8cc16c72017-08-25 11:51:49 -04001071<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1072setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001073 </tr>
1074</table>
1075
1076### Example
1077
1078<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1079
1080#### Example Output
1081
1082~~~~
1083paint1 == paint2
1084~~~~
1085
1086</fiddle-embed></div>
1087
1088### See Also
1089
Cary Clark2a8c48b2018-02-15 17:31:24 -05001090<a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001091
1092---
1093
1094### See Also
1095
Cary Clark2a8c48b2018-02-15 17:31:24 -05001096Gradient <a href="undocumented#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001097
Cary Clark08895c42018-02-01 09:37:32 -05001098## <a name="Device_Text"></a> Device Text
1099
Cary Clark2a8c48b2018-02-15 17:31:24 -05001100<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 -04001101
Cary Clark2a8c48b2018-02-15 17:31:24 -05001102When 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 -04001103create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001104on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001105<a href="#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1106the 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 -04001107
Cary Clark7cfcbca2018-01-04 16:11:51 -05001108<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 -04001109As the opaqueness
1110of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1111
1112Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001113<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 -05001114<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 -04001115<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 -04001116
1117### Example
1118
Cary Clark2a8c48b2018-02-15 17:31:24 -05001119<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>.
1120When <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 -05001121When <a href="#Subpixel_Text">Subpixel Text</a> is enabled, the comma <a href="undocumented#Glyph">Glyphs</a> are unique, but appear evenly spaced.
1122</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001123
1124## <a name="Linear_Text"></a> Linear Text
1125
Cary Clark2a8c48b2018-02-15 17:31:24 -05001126<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 -04001127If <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 -04001128If <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 -04001129
Cary Clark493df1f2017-08-25 13:14:33 -04001130<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001131## isLinearText
1132
Cary Clarka560c472017-11-27 10:44:06 -05001133<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001134bool isLinearText() const
1135</pre>
1136
Cary Clark4c06f5e2017-08-04 12:48:24 -04001137If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001138
Cary Clark8cc16c72017-08-25 11:51:49 -04001139Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001140
1141### Return Value
1142
Cary Clark8cc16c72017-08-25 11:51:49 -04001143<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001144
1145### Example
1146
1147<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1148
1149### See Also
1150
Cary Clark8cc16c72017-08-25 11:51:49 -04001151<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001152
1153---
1154
Cary Clark493df1f2017-08-25 13:14:33 -04001155<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001156## setLinearText
1157
Cary Clarka560c472017-11-27 10:44:06 -05001158<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001159void setLinearText(bool linearText)
1160</pre>
1161
Cary Clark4c06f5e2017-08-04 12:48:24 -04001162If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001163By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001164
Cary Clark8cc16c72017-08-25 11:51:49 -04001165Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1166Clears <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 -04001167
1168### Parameters
1169
Cary Clark8cc16c72017-08-25 11:51:49 -04001170<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1171setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001172 </tr>
1173</table>
1174
1175### Example
1176
1177<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1178
1179### See Also
1180
Cary Clark8cc16c72017-08-25 11:51:49 -04001181<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001182
1183---
1184
1185## <a name="Subpixel_Text"></a> Subpixel Text
1186
Cary Clark7cfcbca2018-01-04 16:11:51 -05001187<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 -04001188As the opaqueness
1189of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1190
Cary Clark493df1f2017-08-25 13:14:33 -04001191<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001192## isSubpixelText
1193
Cary Clarka560c472017-11-27 10:44:06 -05001194<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001195bool isSubpixelText() const
1196</pre>
1197
Cary Clark2a8c48b2018-02-15 17:31:24 -05001198If 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 -04001199
Cary Clark8cc16c72017-08-25 11:51:49 -04001200Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001201
1202### Return Value
1203
Cary Clark8cc16c72017-08-25 11:51:49 -04001204<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001205
1206### Example
1207
1208<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1209
1210#### Example Output
1211
1212~~~~
1213paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1214paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1215~~~~
1216
1217</fiddle-embed></div>
1218
1219---
1220
Cary Clark493df1f2017-08-25 13:14:33 -04001221<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001222## setSubpixelText
1223
Cary Clarka560c472017-11-27 10:44:06 -05001224<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001225void setSubpixelText(bool subpixelText)
1226</pre>
1227
Cary Clark2a8c48b2018-02-15 17:31:24 -05001228Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001229
Cary Clark8cc16c72017-08-25 11:51:49 -04001230Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1231Clears <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 -04001232
1233### Parameters
1234
Cary Clark8cc16c72017-08-25 11:51:49 -04001235<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1236setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001237 </tr>
1238</table>
1239
1240### Example
1241
1242<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1243
1244#### Example Output
1245
1246~~~~
1247paint1 == paint2
1248~~~~
1249
1250</fiddle-embed></div>
1251
1252---
1253
1254## <a name="LCD_Text"></a> LCD Text
1255
Cary Clark2a8c48b2018-02-15 17:31:24 -05001256When 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 -04001257create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001258on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001259<a href="#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1260the 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 -04001261
Cary Clark493df1f2017-08-25 13:14:33 -04001262<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001263## isLCDRenderText
1264
Cary Clarka560c472017-11-27 10:44:06 -05001265<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001266bool isLCDRenderText() const
1267</pre>
1268
Cary Clark2a8c48b2018-02-15 17:31:24 -05001269If true, <a href="undocumented#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001270
Cary Clark8cc16c72017-08-25 11:51:49 -04001271Returns 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 -04001272
1273### Return Value
1274
Cary Clark8cc16c72017-08-25 11:51:49 -04001275<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001276
1277### Example
1278
1279<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1280
1281#### Example Output
1282
1283~~~~
1284paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1285paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1286~~~~
1287
1288</fiddle-embed></div>
1289
1290---
1291
Cary Clark493df1f2017-08-25 13:14:33 -04001292<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001293## setLCDRenderText
1294
Cary Clarka560c472017-11-27 10:44:06 -05001295<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001296void setLCDRenderText(bool lcdText)
1297</pre>
1298
Cary Clark2a8c48b2018-02-15 17:31:24 -05001299Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001300
Cary Clark8cc16c72017-08-25 11:51:49 -04001301Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1302Clears <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 -04001303
1304### Parameters
1305
Cary Clark8cc16c72017-08-25 11:51:49 -04001306<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1307setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001308 </tr>
1309</table>
1310
1311### Example
1312
1313<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1314
1315#### Example Output
1316
1317~~~~
1318paint1 == paint2
1319~~~~
1320
1321</fiddle-embed></div>
1322
1323---
1324
Cary Clark08895c42018-02-01 09:37:32 -05001325## <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
1326
Cary Clark2a8c48b2018-02-15 17:31:24 -05001327<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 -04001328<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 -05001329in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001330
Cary Clark7cfcbca2018-01-04 16:11:51 -05001331FreeType 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 -04001332the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001333Windows may select the bitmap glyph but is not required to do so.
1334<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001335
Cary Clark2a8c48b2018-02-15 17:31:24 -05001336<a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1337<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 -04001338<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001339
1340### Example
1341
Cary Clarka560c472017-11-27 10:44:06 -05001342<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001343<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001344 includes an embedded bitmap Glyph at odd font sizes. This example works
1345 on platforms that use FreeType as their Font_Engine.
1346 Windows may, but is not required to, return a bitmap glyph if
1347 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1348 bitmap.allocN32Pixels(30, 15);
1349 bitmap.eraseColor(0);
1350 SkCanvas offscreen(bitmap);
1351 SkPaint paint;
1352 paint.setAntiAlias(true);
1353 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001354 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001355 for (bool embedded : { false, true}) {
1356 paint.setEmbeddedBitmapText(embedded);
1357 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1358 }
1359 canvas->drawBitmap(bitmap, 0, 0);
1360 canvas->scale(10, 10);
1361 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001362
Cary Clarka560c472017-11-27 10:44:06 -05001363</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001364
Cary Clark493df1f2017-08-25 13:14:33 -04001365<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001366## isEmbeddedBitmapText
1367
Cary Clarka560c472017-11-27 10:44:06 -05001368<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001369bool isEmbeddedBitmapText() const
1370</pre>
1371
Cary Clark2a8c48b2018-02-15 17:31:24 -05001372If 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 -04001373
Cary Clark8cc16c72017-08-25 11:51:49 -04001374Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001375
1376### Return Value
1377
Cary Clark8cc16c72017-08-25 11:51:49 -04001378<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001379
1380### Example
1381
1382<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1383
1384#### Example Output
1385
1386~~~~
1387paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1388paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1389~~~~
1390
1391</fiddle-embed></div>
1392
1393---
1394
Cary Clark493df1f2017-08-25 13:14:33 -04001395<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001396## setEmbeddedBitmapText
1397
Cary Clarka560c472017-11-27 10:44:06 -05001398<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001399void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1400</pre>
1401
1402Requests, but does not require, to use bitmaps in fonts instead of outlines.
1403
Cary Clark8cc16c72017-08-25 11:51:49 -04001404Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1405Clears <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 -04001406
1407### Parameters
1408
Cary Clark8cc16c72017-08-25 11:51:49 -04001409<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1410setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001411 </tr>
1412</table>
1413
1414### Example
1415
1416<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1417
1418#### Example Output
1419
1420~~~~
1421paint1 == paint2
1422~~~~
1423
1424</fiddle-embed></div>
1425
1426---
1427
Cary Clark08895c42018-02-01 09:37:32 -05001428## <a name="Automatic_Hinting"></a> Automatic Hinting
1429
Cary Clark8cc16c72017-08-25 11:51:49 -04001430If <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 -05001431instructs 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 -04001432<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
1433<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001434
Cary Clark7cfcbca2018-01-04 16:11:51 -05001435<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 -04001436
Cary Clark493df1f2017-08-25 13:14:33 -04001437<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001438## isAutohinted
1439
Cary Clarka560c472017-11-27 10:44:06 -05001440<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001441bool isAutohinted() const
1442</pre>
1443
Cary Clark8cc16c72017-08-25 11:51:49 -04001444If 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 -05001445platform 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 -05001446<a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001447
Cary Clark8cc16c72017-08-25 11:51:49 -04001448Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001449
1450### Return Value
1451
Cary Clark8cc16c72017-08-25 11:51:49 -04001452<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001453
1454### Example
1455
1456<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1457
1458#### Example Output
1459
1460~~~~
1461paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1462paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1463~~~~
1464
1465</fiddle-embed></div>
1466
1467### See Also
1468
Cary Clark8cc16c72017-08-25 11:51:49 -04001469<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001470
1471---
1472
Cary Clark493df1f2017-08-25 13:14:33 -04001473<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001474## setAutohinted
1475
Cary Clarka560c472017-11-27 10:44:06 -05001476<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001477void setAutohinted(bool useAutohinter)
1478</pre>
1479
Cary Clark8cc16c72017-08-25 11:51:49 -04001480If <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 -05001481instruct 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 -04001482<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
1483<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001484
Cary Clark7cfcbca2018-01-04 16:11:51 -05001485Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001486
Cary Clark8cc16c72017-08-25 11:51:49 -04001487Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1488Clears <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 -04001489
1490### Parameters
1491
Cary Clark8cc16c72017-08-25 11:51:49 -04001492<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1493setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001494 </tr>
1495</table>
1496
1497### Example
1498
1499<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1500
1501### See Also
1502
Cary Clark8cc16c72017-08-25 11:51:49 -04001503<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001504
1505---
1506
Cary Clark08895c42018-02-01 09:37:32 -05001507## <a name="Vertical_Text"></a> Vertical Text
1508
Cary Clark4c06f5e2017-08-04 12:48:24 -04001509<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 -05001510using <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 -04001511is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
Cary Clark2a8c48b2018-02-15 17:31:24 -05001512<a href="undocumented#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001513
Cary Clark2a8c48b2018-02-15 17:31:24 -05001514Skia 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 -05001515font substitution,
1516textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1517a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001518into glyph series.
1519
Cary Clark8cc16c72017-08-25 11:51:49 -04001520<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 -04001521
Cary Clark8cc16c72017-08-25 11:51:49 -04001522<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1523<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 -04001524
Cary Clark8cc16c72017-08-25 11:51:49 -04001525<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1526<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1527<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001528
1529### Example
1530
1531<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1532
Cary Clark493df1f2017-08-25 13:14:33 -04001533<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001534## isVerticalText
1535
Cary Clarka560c472017-11-27 10:44:06 -05001536<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001537bool isVerticalText() const
1538</pre>
1539
Cary Clark2a8c48b2018-02-15 17:31:24 -05001540If true, <a href="undocumented#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001541
Cary Clark8cc16c72017-08-25 11:51:49 -04001542Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001543
1544### Return Value
1545
Cary Clark8cc16c72017-08-25 11:51:49 -04001546<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001547
1548### Example
1549
1550<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1551
1552#### Example Output
1553
1554~~~~
1555paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1556paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1557~~~~
1558
1559</fiddle-embed></div>
1560
1561---
1562
Cary Clark493df1f2017-08-25 13:14:33 -04001563<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001564## setVerticalText
1565
Cary Clarka560c472017-11-27 10:44:06 -05001566<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001567void setVerticalText(bool verticalText)
1568</pre>
1569
1570If true, text advance positions the next glyph below the previous glyph instead of to the
1571right of previous glyph.
1572
Cary Clark8cc16c72017-08-25 11:51:49 -04001573Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1574Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001575
1576### Parameters
1577
Cary Clark8cc16c72017-08-25 11:51:49 -04001578<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1579setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001580 </tr>
1581</table>
1582
1583### Example
1584
1585<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1586
1587#### Example Output
1588
1589~~~~
1590paint1 == paint2
1591~~~~
1592
1593</fiddle-embed></div>
1594
1595---
1596
Cary Clark08895c42018-02-01 09:37:32 -05001597## <a name="Fake_Bold"></a> Fake Bold
1598
Cary Clark8cc16c72017-08-25 11:51:49 -04001599<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 -05001600is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001601bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001602
Cary Clark7cfcbca2018-01-04 16:11:51 -05001603Use <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 -04001604is not available.
1605
Cary Clark7cfcbca2018-01-04 16:11:51 -05001606A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark2a8c48b2018-02-15 17:31:24 -05001607the 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 -05001608by 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 -04001609
Cary Clark8cc16c72017-08-25 11:51:49 -04001610<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001611
1612### Example
1613
1614<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1615
Cary Clark493df1f2017-08-25 13:14:33 -04001616<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001617## isFakeBoldText
1618
Cary Clarka560c472017-11-27 10:44:06 -05001619<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001620bool isFakeBoldText() const
1621</pre>
1622
1623If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1624from outlines.
1625
Cary Clark8cc16c72017-08-25 11:51:49 -04001626Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001627
1628### Return Value
1629
Cary Clark8cc16c72017-08-25 11:51:49 -04001630<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001631
1632### Example
1633
1634<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1635
1636#### Example Output
1637
1638~~~~
1639paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1640paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1641~~~~
1642
1643</fiddle-embed></div>
1644
1645---
1646
Cary Clark493df1f2017-08-25 13:14:33 -04001647<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001648## setFakeBoldText
1649
Cary Clarka560c472017-11-27 10:44:06 -05001650<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001651void setFakeBoldText(bool fakeBoldText)
1652</pre>
1653
Cary Clarkce101242017-09-01 15:51:02 -04001654Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001655
Cary Clark8cc16c72017-08-25 11:51:49 -04001656Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1657Clears <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 -04001658
1659### Parameters
1660
Cary Clark8cc16c72017-08-25 11:51:49 -04001661<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1662setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001663 </tr>
1664</table>
1665
1666### Example
1667
1668<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1669
1670#### Example Output
1671
1672~~~~
1673paint1 == paint2
1674~~~~
1675
1676</fiddle-embed></div>
1677
1678---
1679
Cary Clark08895c42018-02-01 09:37:32 -05001680## <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
1681
Cary Clark2a8c48b2018-02-15 17:31:24 -05001682if <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 -05001683spacing 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 -05001684<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
1685FreeType as their <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001686
Cary Clark2a8c48b2018-02-15 17:31:24 -05001687<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 -05001688a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001689
Cary Clark493df1f2017-08-25 13:14:33 -04001690<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001691## isDevKernText
1692
Cary Clarka560c472017-11-27 10:44:06 -05001693<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001694bool isDevKernText() const
1695</pre>
1696
1697Returns if character spacing may be adjusted by the hinting difference.
1698
Cary Clark8cc16c72017-08-25 11:51:49 -04001699Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001700
1701### Return Value
1702
Cary Clark8cc16c72017-08-25 11:51:49 -04001703<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001704
1705### Example
1706
1707<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1708
1709---
1710
Cary Clark493df1f2017-08-25 13:14:33 -04001711<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001712## setDevKernText
1713
Cary Clarka560c472017-11-27 10:44:06 -05001714<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001715void setDevKernText(bool devKernText)
1716</pre>
1717
1718Requests, but does not require, to use hinting to adjust glyph spacing.
1719
Cary Clark8cc16c72017-08-25 11:51:49 -04001720Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1721Clears <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 -04001722
1723### Parameters
1724
Cary Clark8cc16c72017-08-25 11:51:49 -04001725<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1726setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001727 </tr>
1728</table>
1729
1730### Example
1731
1732<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1733
1734#### Example Output
1735
1736~~~~
1737paint1 == paint2
1738~~~~
1739
1740</fiddle-embed></div>
1741
1742---
1743
Cary Clark08895c42018-02-01 09:37:32 -05001744## <a name="Filter_Quality_Methods"></a> Filter Quality Methods
1745
Cary Clark4c06f5e2017-08-04 12:48:24 -04001746<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1747A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1748A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001749If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1750in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001751
Cary Clark8cc16c72017-08-25 11:51:49 -04001752<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 -04001753
1754<table> <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001755 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1756 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1757 <td><a href="SkCanvas_Reference#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1758 <td><a href="SkCanvas_Reference#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001759</table>
1760
Cary Clarka560c472017-11-27 10:44:06 -05001761and 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 -04001762
Cary Clark2a8c48b2018-02-15 17:31:24 -05001763<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 -04001764
1765### Example
1766
1767<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1768
Cary Clark493df1f2017-08-25 13:14:33 -04001769<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001770## getFilterQuality
1771
Cary Clarka560c472017-11-27 10:44:06 -05001772<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001773SkFilterQuality getFilterQuality() const
1774</pre>
1775
Cary Clark4c06f5e2017-08-04 12:48:24 -04001776Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001777draws faster; a higher setting looks better when the image is scaled.
1778
1779### Return Value
1780
Cary Clark2a8c48b2018-02-15 17:31:24 -05001781one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1782<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001783
1784### Example
1785
1786<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1787
1788#### Example Output
1789
1790~~~~
1791kNone_SkFilterQuality == paint.getFilterQuality()
1792~~~~
1793
1794</fiddle-embed></div>
1795
1796---
1797
Cary Clark493df1f2017-08-25 13:14:33 -04001798<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001799## setFilterQuality
1800
Cary Clarka560c472017-11-27 10:44:06 -05001801<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001802void setFilterQuality(SkFilterQuality quality)
1803</pre>
1804
Cary Clark4c06f5e2017-08-04 12:48:24 -04001805Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001806draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001807Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001808
1809### Parameters
1810
Cary Clark8cc16c72017-08-25 11:51:49 -04001811<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001812one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1813<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001814 </tr>
1815</table>
1816
1817### Example
1818
1819<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1820
1821#### Example Output
1822
1823~~~~
1824kHigh_SkFilterQuality == paint.getFilterQuality()
1825~~~~
1826
1827</fiddle-embed></div>
1828
1829### See Also
1830
Cary Clark4c06f5e2017-08-04 12:48:24 -04001831<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001832
1833---
1834
Cary Clark08895c42018-02-01 09:37:32 -05001835## <a name="Color_Methods"></a> Color Methods
Cary Clark12799e12017-07-28 15:18:29 -04001836
Cary Clarkab2621d2018-01-30 10:08:57 -05001837| name | description |
1838| --- | --- |
Cary Clark2a8c48b2018-02-15 17:31:24 -05001839| <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 |
1840| <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 -04001841
Cary Clark2a8c48b2018-02-15 17:31:24 -05001842<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 -05001843values used to draw a filled or stroked shape in a 32-bit value. Each component
1844occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1845All values in any combination are valid.
1846
Cary Clark2a8c48b2018-02-15 17:31:24 -05001847<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
1848<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 -05001849
Cary Clark2a8c48b2018-02-15 17:31:24 -05001850The 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 -05001851positions on the output device, which may have more or fewer bits, and may have
1852a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001853
Cary Clark2a8c48b2018-02-15 17:31:24 -05001854| 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 -04001855| --- | --- | --- | --- | --- |
1856| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1857
1858### Example
1859
1860<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1861
Cary Clark493df1f2017-08-25 13:14:33 -04001862<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001863## getColor
1864
Cary Clarka560c472017-11-27 10:44:06 -05001865<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001866SkColor getColor() const
1867</pre>
1868
Cary Clark2a8c48b2018-02-15 17:31:24 -05001869Retrieves <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 -04001870Use 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 -04001871a color component.
1872
1873### Return Value
1874
Cary Clark2a8c48b2018-02-15 17:31:24 -05001875<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="undocumented#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001876
1877### Example
1878
1879<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1880
1881#### Example Output
1882
1883~~~~
1884Yellow is 100% red, 100% green, and 0% blue.
1885~~~~
1886
1887</fiddle-embed></div>
1888
1889### See Also
1890
Cary Clark4c06f5e2017-08-04 12:48:24 -04001891<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001892
1893---
1894
Cary Clark493df1f2017-08-25 13:14:33 -04001895<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001896## setColor
1897
Cary Clarka560c472017-11-27 10:44:06 -05001898<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001899void setColor(SkColor color)
1900</pre>
1901
Cary Clark2a8c48b2018-02-15 17:31:24 -05001902Sets <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,
1903<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 -04001904
1905### Parameters
1906
Cary Clark8cc16c72017-08-25 11:51:49 -04001907<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001908<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="undocumented#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001909 </tr>
1910</table>
1911
1912### Example
1913
1914<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1915
1916#### Example Output
1917
1918~~~~
1919green1 == green2
1920~~~~
1921
1922</fiddle-embed></div>
1923
1924### See Also
1925
Cary Clark8cc16c72017-08-25 11:51:49 -04001926<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 -04001927
1928---
1929
1930## <a name="Alpha_Methods"></a> Alpha Methods
1931
Cary Clark2a8c48b2018-02-15 17:31:24 -05001932<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 -04001933
Cary Clark493df1f2017-08-25 13:14:33 -04001934<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001935## getAlpha
1936
Cary Clarka560c472017-11-27 10:44:06 -05001937<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001938uint8_t getAlpha() const
1939</pre>
1940
Cary Clark2a8c48b2018-02-15 17:31:24 -05001941Retrieves <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 -04001942
1943### Return Value
1944
Cary Clark2a8c48b2018-02-15 17:31:24 -05001945<a href="undocumented#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001946
1947### Example
1948
1949<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1950
1951#### Example Output
1952
1953~~~~
1954255 == paint.getAlpha()
1955~~~~
1956
1957</fiddle-embed></div>
1958
1959---
1960
Cary Clark493df1f2017-08-25 13:14:33 -04001961<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001962## setAlpha
1963
Cary Clarka560c472017-11-27 10:44:06 -05001964<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001965void setAlpha(U8CPU a)
1966</pre>
1967
Cary Clark2a8c48b2018-02-15 17:31:24 -05001968Replaces <a href="undocumented#Alpha">Alpha</a>, leaving <a href="undocumented#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001969unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001970build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1971<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 -04001972fully opaque.
1973
1974### Parameters
1975
Cary Clark8cc16c72017-08-25 11:51:49 -04001976<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001977<a href="undocumented#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001978 </tr>
1979</table>
1980
1981### Example
1982
1983<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1984
1985#### Example Output
1986
1987~~~~
19880x44112233 == paint.getColor()
1989~~~~
1990
1991</fiddle-embed></div>
1992
1993---
1994
Cary Clark493df1f2017-08-25 13:14:33 -04001995<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001996## setARGB
1997
Cary Clarka560c472017-11-27 10:44:06 -05001998<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001999void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
2000</pre>
2001
Cary Clark4c06f5e2017-08-04 12:48:24 -04002002Sets <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 -05002003The 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 -04002004
2005### Parameters
2006
Cary Clark8cc16c72017-08-25 11:51:49 -04002007<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002008amount of <a href="undocumented#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002009 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002010amount 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 -04002011 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002012amount 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 -04002013 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002014amount 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 -04002015 </tr>
2016</table>
2017
2018### Example
2019
2020<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2021
2022#### Example Output
2023
2024~~~~
2025transRed1 == transRed2
2026~~~~
2027
2028</fiddle-embed></div>
2029
2030### See Also
2031
Cary Clark8cc16c72017-08-25 11:51:49 -04002032<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002033
2034---
2035
Cary Clark08895c42018-02-01 09:37:32 -05002036## <a name="Style"></a> Style
2037
Cary Clark8cc16c72017-08-25 11:51:49 -04002038<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2039Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002040
Cary Clark8cc16c72017-08-25 11:51:49 -04002041Set <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 -04002042The fill covers the area inside the geometry for most shapes.
2043
Cary Clark8cc16c72017-08-25 11:51:49 -04002044Set <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 -04002045
Cary Clark2a8c48b2018-02-15 17:31:24 -05002046## <a name="Style_Fill"></a> Style Fill
Cary Clark12799e12017-07-28 15:18:29 -04002047
2048### See Also
2049
Cary Clark2a8c48b2018-02-15 17:31:24 -05002050<a href="SkPath_Reference#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002051
Cary Clark2a8c48b2018-02-15 17:31:24 -05002052## <a name="Style_Stroke"></a> Style Stroke
Cary Clark12799e12017-07-28 15:18:29 -04002053
Cary Clarkbc5697d2017-10-04 14:31:33 -04002054The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002055<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>.
2056The 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 -04002057The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002058
Cary Clark8cc16c72017-08-25 11:51:49 -04002059As <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 -05002060may 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 -04002061
Cary Clark2a8c48b2018-02-15 17:31:24 -05002062## <a name="Style_Hairline"></a> Style Hairline
Cary Clark12799e12017-07-28 15:18:29 -04002063
Cary Clark2a8c48b2018-02-15 17:31:24 -05002064<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Style_Hairline">Hairline</a>.
2065<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 -05002066flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002067
Cary Clark2a8c48b2018-02-15 17:31:24 -05002068<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
2069two 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 -04002070pixel. 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 -05002071GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002072while stroking.
2073
Cary Clark8cc16c72017-08-25 11:51:49 -04002074## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002075
Cary Clarka560c472017-11-27 10:44:06 -05002076<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002077enum <a href="#SkPaint_Style">Style</a> {
2078<a href="#SkPaint_kFill_Style">kFill Style</a>,
2079<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2080<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark1a8d7622018-03-05 13:26:16 -05002081};
2082</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002083
Cary Clark8cc16c72017-08-25 11:51:49 -04002084Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002085The stroke and fill
2086share all paint attributes; for instance, they are drawn with the same color.
2087
Cary Clark8cc16c72017-08-25 11:51:49 -04002088Use <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> to avoid hitting the same pixels twice with a stroke draw and
Cary Clark12799e12017-07-28 15:18:29 -04002089a fill draw.
2090
2091### Constants
2092
2093<table>
2094 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002095 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002096Applies 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>.
2097<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 -04002098<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 -05002099The <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 -04002100and to create an unfilled hole inside the shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05002101<a href="#SkPaint_Style">Style</a> is set to <a href="#SkPaint_kFill_Style">kFill Style</a> by default.
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_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 -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#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>.
2107<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 -04002108and ignore the set <a href="#SkPaint_Style">Style</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05002109The stroke construction is unaffected by the <a href="SkPath_Reference#Fill_Type">Path Fill Type</a>.
2110</td>
Cary Clark12799e12017-07-28 15:18:29 -04002111 </tr>
2112 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002113 <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 -05002114Applies 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>.
2115<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 -05002116and the set <a href="SkPath_Reference#Fill_Type">Path Fill Type</a> is ignored.
2117</td>
Cary Clark12799e12017-07-28 15:18:29 -04002118 </tr>
2119
Cary Clark06c20f32018-03-20 15:53:27 -04002120
Cary Clark12799e12017-07-28 15:18:29 -04002121
Cary Clark8cc16c72017-08-25 11:51:49 -04002122## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002123
Cary Clarka560c472017-11-27 10:44:06 -05002124<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002125enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002126<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark1a8d7622018-03-05 13:26:16 -05002127};
2128</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002129
2130### Constants
2131
2132<table>
2133 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002134 <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 -05002135May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.
2136</td>
Cary Clark12799e12017-07-28 15:18:29 -04002137 </tr>
2138
Cary Clark06c20f32018-03-20 15:53:27 -04002139
Cary Clark12799e12017-07-28 15:18:29 -04002140
Cary Clark493df1f2017-08-25 13:14:33 -04002141<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002142## getStyle
2143
Cary Clarka560c472017-11-27 10:44:06 -05002144<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002145Style getStyle() const
2146</pre>
2147
2148Whether the geometry is filled, stroked, or filled and stroked.
2149
2150### Return Value
2151
Cary Clark8cc16c72017-08-25 11:51:49 -04002152one 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 -04002153
2154### Example
2155
2156<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2157
2158#### Example Output
2159
2160~~~~
2161SkPaint::kFill_Style == paint.getStyle()
2162~~~~
2163
2164</fiddle-embed></div>
2165
2166### See Also
2167
Cary Clark8cc16c72017-08-25 11:51:49 -04002168<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002169
2170---
2171
Cary Clark493df1f2017-08-25 13:14:33 -04002172<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002173## setStyle
2174
Cary Clarka560c472017-11-27 10:44:06 -05002175<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002176void setStyle(Style style)
2177</pre>
2178
2179Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002180Has 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 -04002181
2182### Parameters
2183
Cary Clark8cc16c72017-08-25 11:51:49 -04002184<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2185one 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 -04002186 </tr>
2187</table>
2188
2189### Example
2190
2191<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2192
2193### See Also
2194
Cary Clark8cc16c72017-08-25 11:51:49 -04002195<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002196
2197---
2198
2199### See Also
2200
Cary Clark2a8c48b2018-02-15 17:31:24 -05002201<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 -04002202
Cary Clark08895c42018-02-01 09:37:32 -05002203## <a name="Stroke_Width"></a> Stroke Width
2204
Cary Clark8cc16c72017-08-25 11:51:49 -04002205<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002206of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002207set 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 -04002208
2209When width is greater than zero, the stroke encompasses as many pixels partially
2210or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002211the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002212
Cary Clark2a8c48b2018-02-15 17:31:24 -05002213The stroke dimensions are scaled by the canvas matrix, but <a href="#Style_Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002214remains one pixel wide regardless of scaling.
2215
2216The default width for the paint is zero.
2217
2218### Example
2219
Cary Clark7cfcbca2018-01-04 16:11:51 -05002220<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 -05002221line and the platform implementation.
2222</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002223
Cary Clark493df1f2017-08-25 13:14:33 -04002224<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002225## getStrokeWidth
2226
Cary Clarka560c472017-11-27 10:44:06 -05002227<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002228SkScalar getStrokeWidth() const
2229</pre>
2230
Cary Clark8cc16c72017-08-25 11:51:49 -04002231Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002232outline the shape.
2233
2234### Return Value
2235
Cary Clark2a8c48b2018-02-15 17:31:24 -05002236zero for <a href="#Style_Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002237
2238### Example
2239
2240<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2241
2242#### Example Output
2243
2244~~~~
22450 == paint.getStrokeWidth()
2246~~~~
2247
2248</fiddle-embed></div>
2249
2250---
2251
Cary Clark493df1f2017-08-25 13:14:33 -04002252<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002253## setStrokeWidth
2254
Cary Clarka560c472017-11-27 10:44:06 -05002255<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002256void setStrokeWidth(SkScalar width)
2257</pre>
2258
2259Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002260outline the shape.
2261Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002262
2263### Parameters
2264
Cary Clark8cc16c72017-08-25 11:51:49 -04002265<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002266zero thickness for <a href="#Style_Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002267 </tr>
2268</table>
2269
2270### Example
2271
2272<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2273
2274#### Example Output
2275
2276~~~~
22775 == paint.getStrokeWidth()
2278~~~~
2279
2280</fiddle-embed></div>
2281
2282---
2283
Cary Clark08895c42018-02-01 09:37:32 -05002284## <a name="Miter_Limit"></a> Miter Limit
2285
Cary Clark8cc16c72017-08-25 11:51:49 -04002286<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002287relative to the stroke width.
2288
Cary Clark8cc16c72017-08-25 11:51:49 -04002289<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2290is 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>
2291or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002292
Cary Clark8cc16c72017-08-25 11:51:49 -04002293If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2294is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002295
Cary Clark8cc16c72017-08-25 11:51:49 -04002296<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002297
Cary Clark8cc16c72017-08-25 11:51:49 -04002298miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002299The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002300in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002301
2302Here are some miter limits and the angles that triggers them.
2303
2304| miter limit | angle in degrees |
2305| --- | --- |
2306| 10 | 11.48 |
2307| 9 | 12.76 |
2308| 8 | 14.36 |
2309| 7 | 16.43 |
2310| 6 | 19.19 |
2311| 5 | 23.07 |
2312| 4 | 28.96 |
2313| 3 | 38.94 |
2314| 2 | 60 |
2315| 1 | 180 |
2316
2317### Example
2318
2319<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2320When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002321by a bevel join.
2322</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002323
Cary Clark493df1f2017-08-25 13:14:33 -04002324<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002325## getStrokeMiter
2326
Cary Clarka560c472017-11-27 10:44:06 -05002327<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002328SkScalar getStrokeMiter() const
2329</pre>
2330
2331The limit at which a sharp corner is drawn beveled.
2332
2333### Return Value
2334
Cary Clark8cc16c72017-08-25 11:51:49 -04002335zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002336
2337### Example
2338
2339<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2340
2341#### Example Output
2342
2343~~~~
2344default miter limit == 4
2345~~~~
2346
2347</fiddle-embed></div>
2348
2349### See Also
2350
Cary Clark8cc16c72017-08-25 11:51:49 -04002351<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 -04002352
2353---
2354
Cary Clark493df1f2017-08-25 13:14:33 -04002355<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002356## setStrokeMiter
2357
Cary Clarka560c472017-11-27 10:44:06 -05002358<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002359void setStrokeMiter(SkScalar miter)
2360</pre>
2361
2362The limit at which a sharp corner is drawn beveled.
2363Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002364Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002365
2366### Parameters
2367
Cary Clark8cc16c72017-08-25 11:51:49 -04002368<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2369zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002370 </tr>
2371</table>
2372
2373### Example
2374
2375<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2376
2377#### Example Output
2378
2379~~~~
2380default miter limit == 8
2381~~~~
2382
2383</fiddle-embed></div>
2384
2385### See Also
2386
Cary Clark8cc16c72017-08-25 11:51:49 -04002387<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 -04002388
2389---
2390
Cary Clark08895c42018-02-01 09:37:32 -05002391## <a name="Stroke_Cap"></a> Stroke Cap
Cary Clark12799e12017-07-28 15:18:29 -04002392
Cary Clark8cc16c72017-08-25 11:51:49 -04002393## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002394
Cary Clarka560c472017-11-27 10:44:06 -05002395<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002396enum <a href="#SkPaint_Cap">Cap</a> {
2397<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2398<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2399<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002400
Cary Clark8cc16c72017-08-25 11:51:49 -04002401<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2402<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002403};
Cary Clark6fc50412017-09-21 12:31:06 -04002404
Cary Clark1a8d7622018-03-05 13:26:16 -05002405static constexpr int <a href="#SkPaint_kCapCount">kCapCount</a> = <a href="#SkPaint_kLast_Cap">kLast Cap</a> + 1;
2406</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002407
Cary Clark2a8c48b2018-02-15 17:31:24 -05002408<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 -04002409
2410### Constants
2411
2412<table>
2413 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002414 <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.
2415</td>
Cary Clark12799e12017-07-28 15:18:29 -04002416 </tr>
2417 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002418 <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 -05002419and end.
2420</td>
Cary Clark12799e12017-07-28 15:18:29 -04002421 </tr>
2422 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002423 <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 -04002424and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002425of the stroke.
2426</td>
Cary Clark12799e12017-07-28 15:18:29 -04002427 </tr>
2428 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002429 <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>.
2430</td>
Cary Clark12799e12017-07-28 15:18:29 -04002431 </tr>
2432 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002433 <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 -05002434<a href="#Stroke_Cap">Stroke Cap</a> is set to <a href="#SkPaint_kButt_Cap">kButt Cap</a> by default.
2435</td>
Cary Clark12799e12017-07-28 15:18:29 -04002436 </tr>
2437 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002438 <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 -05002439May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.
2440</td>
Cary Clark12799e12017-07-28 15:18:29 -04002441 </tr>
2442
Cary Clark7cfcbca2018-01-04 16:11:51 -05002443Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002444follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002445
Cary Clark2a8c48b2018-02-15 17:31:24 -05002446If 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 -04002447visible beginning and end.
2448
Cary Clark2a8c48b2018-02-15 17:31:24 -05002449<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 -04002450
Cary Clark2a8c48b2018-02-15 17:31:24 -05002451<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Contour_Zero_Length">Zero Length Contour</a> is not drawn.
2452<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 -04002453at the contour point.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002454<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 -04002455<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002456
Cary Clark8cc16c72017-08-25 11:51:49 -04002457<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 -04002458
Cary Clark12799e12017-07-28 15:18:29 -04002459### Example
2460
Cary Clark2ade9972017-11-02 17:49:34 -04002461<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002462
Cary Clark493df1f2017-08-25 13:14:33 -04002463<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002464## getStrokeCap
2465
Cary Clarka560c472017-11-27 10:44:06 -05002466<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002467Cap getStrokeCap() const
2468</pre>
2469
2470The geometry drawn at the beginning and end of strokes.
2471
2472### Return Value
2473
Cary Clark8cc16c72017-08-25 11:51:49 -04002474one 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 -04002475
2476### Example
2477
2478<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2479
2480#### Example Output
2481
2482~~~~
2483kButt_Cap == default stroke cap
2484~~~~
2485
2486</fiddle-embed></div>
2487
2488### See Also
2489
Cary Clark8cc16c72017-08-25 11:51:49 -04002490<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002491
2492---
2493
Cary Clark493df1f2017-08-25 13:14:33 -04002494<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002495## setStrokeCap
2496
Cary Clarka560c472017-11-27 10:44:06 -05002497<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002498void setStrokeCap(Cap cap)
2499</pre>
2500
2501The geometry drawn at the beginning and end of strokes.
2502
2503### Parameters
2504
Cary Clark8cc16c72017-08-25 11:51:49 -04002505<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2506one 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>;
2507has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002508 </tr>
2509</table>
2510
2511### Example
2512
2513<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2514
2515#### Example Output
2516
2517~~~~
2518kRound_Cap == paint.getStrokeCap()
2519~~~~
2520
2521</fiddle-embed></div>
2522
2523### See Also
2524
Cary Clark8cc16c72017-08-25 11:51:49 -04002525<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002526
2527---
2528
Cary Clark08895c42018-02-01 09:37:32 -05002529## <a name="Stroke_Join"></a> Stroke Join
2530
Cary Clark2a8c48b2018-02-15 17:31:24 -05002531<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 -04002532
Cary Clark7cfcbca2018-01-04 16:11:51 -05002533Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002534follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002535
2536If the contour direction changes abruptly, because the tangent direction leading
2537to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002538the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002539
2540### Example
2541
Cary Clark2ade9972017-11-02 17:49:34 -04002542<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002543
Cary Clark8cc16c72017-08-25 11:51:49 -04002544## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002545
Cary Clarka560c472017-11-27 10:44:06 -05002546<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002547enum <a href="#SkPaint_Join">Join</a> {
2548<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2549<a href="#SkPaint_kRound_Join">kRound Join</a>,
2550<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002551
Cary Clark8cc16c72017-08-25 11:51:49 -04002552<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2553<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002554};
Cary Clark6fc50412017-09-21 12:31:06 -04002555
Cary Clark1a8d7622018-03-05 13:26:16 -05002556static constexpr int <a href="#SkPaint_kJoinCount">kJoinCount</a> = <a href="#SkPaint_kLast_Join">kLast Join</a> + 1;
2557</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002558
Cary Clark8cc16c72017-08-25 11:51:49 -04002559<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 -04002560affects the four corners of a stroked rectangle, and the connected segments in a
2561stroked path.
2562
2563Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2564radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2565connect the thick strokes.
2566
Cary Clark7cfcbca2018-01-04 16:11:51 -05002567The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002568not contain the actual join. For instance, a fill path constructed with round joins does
2569not necessarily include circles at each connected segment.
2570
2571### Constants
2572
2573<table>
2574 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002575 <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 -05002576If the extension exceeds <a href="#Miter_Limit">Miter Limit</a>, <a href="#SkPaint_kBevel_Join">kBevel Join</a> is used instead.
2577</td>
Cary Clark12799e12017-07-28 15:18:29 -04002578 </tr>
2579 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002580 <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.
2581</td>
Cary Clark12799e12017-07-28 15:18:29 -04002582 </tr>
2583 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002584 <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.
2585</td>
Cary Clark12799e12017-07-28 15:18:29 -04002586 </tr>
2587 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002588 <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>.
2589</td>
Cary Clark12799e12017-07-28 15:18:29 -04002590 </tr>
2591 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002592 <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 -05002593<a href="#Stroke_Join">Stroke Join</a> is set to <a href="#SkPaint_kMiter_Join">kMiter Join</a> by default.
2594</td>
Cary Clark12799e12017-07-28 15:18:29 -04002595 </tr>
2596 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002597 <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 -05002598May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.
2599</td>
Cary Clark12799e12017-07-28 15:18:29 -04002600 </tr>
2601</table>
2602
2603### Example
2604
2605<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2606
2607### See Also
2608
Cary Clark8cc16c72017-08-25 11:51:49 -04002609<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 -04002610
2611
2612
Cary Clark493df1f2017-08-25 13:14:33 -04002613<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002614## getStrokeJoin
2615
Cary Clarka560c472017-11-27 10:44:06 -05002616<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002617Join getStrokeJoin() const
2618</pre>
2619
Cary Clark0c5f5462017-12-15 11:21:51 -05002620The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002621
2622### Return Value
2623
Cary Clark8cc16c72017-08-25 11:51:49 -04002624one 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 -04002625
2626### Example
2627
2628<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2629
2630#### Example Output
2631
2632~~~~
2633kMiter_Join == default stroke join
2634~~~~
2635
2636</fiddle-embed></div>
2637
2638### See Also
2639
Cary Clark8cc16c72017-08-25 11:51:49 -04002640<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002641
2642---
2643
Cary Clark493df1f2017-08-25 13:14:33 -04002644<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002645## setStrokeJoin
2646
Cary Clarka560c472017-11-27 10:44:06 -05002647<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002648void setStrokeJoin(Join join)
2649</pre>
2650
Cary Clark0c5f5462017-12-15 11:21:51 -05002651The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002652
2653### Parameters
2654
Cary Clark8cc16c72017-08-25 11:51:49 -04002655<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2656one 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 -04002657otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002658 </tr>
2659</table>
2660
2661### Example
2662
2663<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2664
2665#### Example Output
2666
2667~~~~
2668kMiter_Join == paint.getStrokeJoin()
2669~~~~
2670
2671</fiddle-embed></div>
2672
2673### See Also
2674
Cary Clark8cc16c72017-08-25 11:51:49 -04002675<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002676
2677---
2678
2679### See Also
2680
Cary Clark8cc16c72017-08-25 11:51:49 -04002681<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002682
Cary Clark08895c42018-02-01 09:37:32 -05002683## <a name="Fill_Path"></a> Fill Path
2684
Cary Clark8cc16c72017-08-25 11:51:49 -04002685<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 -04002686
Cary Clark8cc16c72017-08-25 11:51:49 -04002687If <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 -04002688replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2689destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002690
Cary Clark4c06f5e2017-08-04 12:48:24 -04002691Fill <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
2692the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002693
Cary Clark7cfcbca2018-01-04 16:11:51 -05002694If <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 -04002695and <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>,
2696and <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 -04002697
Cary Clark7cfcbca2018-01-04 16:11:51 -05002698Fill <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 -04002699
Cary Clark8cc16c72017-08-25 11:51:49 -04002700If 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 -05002701returns false since <a href="#Style_Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002702
Cary Clark493df1f2017-08-25 13:14:33 -04002703<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002704## getFillPath
2705
Cary Clarka560c472017-11-27 10:44:06 -05002706<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2707bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002708</pre>
2709
2710The filled equivalent of the stroked path.
2711
2712### Parameters
2713
Cary Clark8cc16c72017-08-25 11:51:49 -04002714<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002715<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002716 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2717resulting <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>
2718 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002719optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002720 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002721if > 1, increase precision, else if (0 < res < 1) reduce precision
2722to favor speed and size</td>
2723 </tr>
2724</table>
2725
2726### Return Value
2727
Cary Clark2a8c48b2018-02-15 17:31:24 -05002728true 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 -04002729
2730### Example
2731
Cary Clark2a8c48b2018-02-15 17:31:24 -05002732<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.
2733At the lowest precision, the <a href="SkPath_Reference#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002734At the highest precision, the filled path has high fidelity compared to the original stroke.
2735</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002736
2737---
2738
Cary Clark2dc84ad2018-01-26 12:56:22 -05002739<a name="SkPaint_getFillPath_2"></a>
2740
Cary Clarka560c472017-11-27 10:44:06 -05002741<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002742bool getFillPath(const SkPath& src, SkPath* dst) const
2743</pre>
2744
2745The filled equivalent of the stroked path.
2746
Cary Clark8cc16c72017-08-25 11:51:49 -04002747Replaces <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>.
2748<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 -04002749
2750### Parameters
2751
Cary Clark8cc16c72017-08-25 11:51:49 -04002752<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002753<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002754 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2755resulting <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 -04002756 </tr>
2757</table>
2758
2759### Return Value
2760
Cary Clark2a8c48b2018-02-15 17:31:24 -05002761true 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 -04002762
2763### Example
2764
2765<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2766
2767---
2768
2769### See Also
2770
Cary Clark8cc16c72017-08-25 11:51:49 -04002771<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 -04002772
Cary Clark08895c42018-02-01 09:37:32 -05002773## <a name="Shader_Methods"></a> Shader Methods
2774
Cary Clark4c06f5e2017-08-04 12:48:24 -04002775<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2776<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002777If <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 -04002778
Cary Clark2a8c48b2018-02-15 17:31:24 -05002779<a href="undocumented#Shader">Shader</a> is modulated by <a href="undocumented#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2780If <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 -04002781the fill.
2782
Cary Clark2a8c48b2018-02-15 17:31:24 -05002783The 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 -04002784
2785### Example
2786
2787<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2788
Cary Clark2a8c48b2018-02-15 17:31:24 -05002789If <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 -04002790
2791### Example
2792
2793<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2794
Cary Clark493df1f2017-08-25 13:14:33 -04002795<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002796## getShader
2797
Cary Clarka560c472017-11-27 10:44:06 -05002798<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002799SkShader* getShader() const
2800</pre>
2801
2802Optional colors used when filling a path, such as a gradient.
2803
Cary Clark4c06f5e2017-08-04 12:48:24 -04002804Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002805
2806### Return Value
2807
Cary Clark4c06f5e2017-08-04 12:48:24 -04002808<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002809
2810### Example
2811
2812<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2813
2814#### Example Output
2815
2816~~~~
2817nullptr == shader
2818nullptr != shader
2819~~~~
2820
2821</fiddle-embed></div>
2822
2823---
2824
Cary Clark493df1f2017-08-25 13:14:33 -04002825<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002826## refShader
2827
Cary Clarka560c472017-11-27 10:44:06 -05002828<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002829sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002830</pre>
2831
2832Optional colors used when filling a path, such as a gradient.
2833
Cary Clark4c06f5e2017-08-04 12:48:24 -04002834Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002835
2836### Return Value
2837
Cary Clark4c06f5e2017-08-04 12:48:24 -04002838<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002839
2840### Example
2841
2842<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2843
2844#### Example Output
2845
2846~~~~
2847shader unique: true
2848shader unique: false
2849~~~~
2850
2851</fiddle-embed></div>
2852
2853---
2854
Cary Clark493df1f2017-08-25 13:14:33 -04002855<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002856## setShader
2857
Cary Clarka560c472017-11-27 10:44:06 -05002858<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002859void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002860</pre>
2861
2862Optional colors used when filling a path, such as a gradient.
2863
Cary Clarkd0530ba2017-09-14 11:25:39 -04002864Sets <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 -04002865Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002866
2867### Parameters
2868
Cary Clark8cc16c72017-08-25 11:51:49 -04002869<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002870how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002871 </tr>
2872</table>
2873
2874### Example
2875
2876<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2877
2878---
2879
Cary Clark08895c42018-02-01 09:37:32 -05002880## <a name="Color_Filter_Methods"></a> Color Filter Methods
2881
Cary Clark4c06f5e2017-08-04 12:48:24 -04002882<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2883<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 -04002884If <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 -04002885
Cary Clark2a8c48b2018-02-15 17:31:24 -05002886The 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 -04002887
2888### Example
2889
2890<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2891
Cary Clark493df1f2017-08-25 13:14:33 -04002892<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002893## getColorFilter
2894
Cary Clarka560c472017-11-27 10:44:06 -05002895<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002896SkColorFilter* getColorFilter() const
2897</pre>
2898
Cary Clark4c06f5e2017-08-04 12:48:24 -04002899Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2900Does 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 -04002901
2902### Return Value
2903
Cary Clark4c06f5e2017-08-04 12:48:24 -04002904<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002905
2906### Example
2907
2908<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2909
2910#### Example Output
2911
2912~~~~
2913nullptr == color filter
2914nullptr != color filter
2915~~~~
2916
2917</fiddle-embed></div>
2918
2919---
2920
Cary Clark493df1f2017-08-25 13:14:33 -04002921<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002922## refColorFilter
2923
Cary Clarka560c472017-11-27 10:44:06 -05002924<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002925sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002926</pre>
2927
Cary Clark4c06f5e2017-08-04 12:48:24 -04002928Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2929Increases <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 -04002930
2931### Return Value
2932
Cary Clark4c06f5e2017-08-04 12:48:24 -04002933<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002934
2935### Example
2936
2937<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2938
2939#### Example Output
2940
2941~~~~
2942color filter unique: true
2943color filter unique: false
2944~~~~
2945
2946</fiddle-embed></div>
2947
2948---
2949
Cary Clark493df1f2017-08-25 13:14:33 -04002950<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002951## setColorFilter
2952
Cary Clarka560c472017-11-27 10:44:06 -05002953<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002954void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002955</pre>
2956
Cary Clark6fc50412017-09-21 12:31:06 -04002957Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2958<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2959
2960Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002961
2962### Parameters
2963
Cary Clark8cc16c72017-08-25 11:51:49 -04002964<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002965<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002966 </tr>
2967</table>
2968
2969### Example
2970
2971<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2972
2973---
2974
Cary Clark08895c42018-02-01 09:37:32 -05002975## <a name="Blend_Mode_Methods"></a> Blend Mode Methods
2976
Cary Clark4c06f5e2017-08-04 12:48:24 -04002977<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 -05002978The default setting, <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002979over the destination color.
2980
2981### Example
2982
2983<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2984
2985### See Also
2986
Cary Clark4c06f5e2017-08-04 12:48:24 -04002987<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002988
Cary Clark493df1f2017-08-25 13:14:33 -04002989<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002990## getBlendMode
2991
Cary Clarka560c472017-11-27 10:44:06 -05002992<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002993SkBlendMode getBlendMode() const
2994</pre>
2995
Cary Clark4c06f5e2017-08-04 12:48:24 -04002996Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002997By default, returns <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002998
2999### Return Value
3000
3001mode used to combine source color with destination color
3002
3003### Example
3004
3005<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
3006
3007#### Example Output
3008
3009~~~~
3010kSrcOver == getBlendMode
3011kSrcOver != getBlendMode
3012~~~~
3013
3014</fiddle-embed></div>
3015
3016---
3017
Cary Clark493df1f2017-08-25 13:14:33 -04003018<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003019## isSrcOver
3020
Cary Clarka560c472017-11-27 10:44:06 -05003021<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003022bool isSrcOver() const
3023</pre>
3024
Cary Clark2a8c48b2018-02-15 17:31:24 -05003025Returns 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 -04003026
3027### Return Value
3028
Cary Clark2a8c48b2018-02-15 17:31:24 -05003029true 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 -04003030
3031### Example
3032
3033<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3034
3035#### Example Output
3036
3037~~~~
3038isSrcOver == true
3039isSrcOver != true
3040~~~~
3041
3042</fiddle-embed></div>
3043
3044---
3045
Cary Clark493df1f2017-08-25 13:14:33 -04003046<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003047## setBlendMode
3048
Cary Clarka560c472017-11-27 10:44:06 -05003049<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003050void setBlendMode(SkBlendMode mode)
3051</pre>
3052
Cary Clark7cfcbca2018-01-04 16:11:51 -05003053Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003054Does not check for valid input.
3055
3056### Parameters
3057
Cary Clark8cc16c72017-08-25 11:51:49 -04003058<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003059<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003060 </tr>
3061</table>
3062
3063### Example
3064
3065<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3066
3067#### Example Output
3068
3069~~~~
3070isSrcOver == true
3071isSrcOver != true
3072~~~~
3073
3074</fiddle-embed></div>
3075
3076---
3077
Cary Clark08895c42018-02-01 09:37:32 -05003078## <a name="Path_Effect_Methods"></a> Path Effect Methods
3079
Cary Clark4c06f5e2017-08-04 12:48:24 -04003080<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3081<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 -04003082If <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 -04003083
3084### Example
3085
3086<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3087
3088### See Also
3089
Cary Clark4c06f5e2017-08-04 12:48:24 -04003090<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003091
Cary Clark493df1f2017-08-25 13:14:33 -04003092<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003093## getPathEffect
3094
Cary Clarka560c472017-11-27 10:44:06 -05003095<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003096SkPathEffect* getPathEffect() const
3097</pre>
3098
Cary Clark4c06f5e2017-08-04 12:48:24 -04003099Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3100Does 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 -04003101
3102### Return Value
3103
Cary Clark4c06f5e2017-08-04 12:48:24 -04003104<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003105
3106### Example
3107
3108<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3109
3110#### Example Output
3111
3112~~~~
3113nullptr == path effect
3114nullptr != path effect
3115~~~~
3116
3117</fiddle-embed></div>
3118
3119---
3120
Cary Clark493df1f2017-08-25 13:14:33 -04003121<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003122## refPathEffect
3123
Cary Clarka560c472017-11-27 10:44:06 -05003124<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003125sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003126</pre>
3127
Cary Clark4c06f5e2017-08-04 12:48:24 -04003128Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3129Increases <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 -04003130
3131### Return Value
3132
Cary Clark4c06f5e2017-08-04 12:48:24 -04003133<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003134
3135### Example
3136
Cary Clarka560c472017-11-27 10:44:06 -05003137<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003138
3139#### Example Output
3140
3141~~~~
3142path effect unique: true
3143path effect unique: false
3144~~~~
3145
3146</fiddle-embed></div>
3147
3148---
3149
Cary Clark493df1f2017-08-25 13:14:33 -04003150<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003151## setPathEffect
3152
Cary Clarka560c472017-11-27 10:44:06 -05003153<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003154void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003155</pre>
3156
Cary Clark6fc50412017-09-21 12:31:06 -04003157Sets <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
3158<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3159
3160Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003161
3162### Parameters
3163
Cary Clark8cc16c72017-08-25 11:51:49 -04003164<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003165replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003166 </tr>
3167</table>
3168
3169### Example
3170
3171<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3172
3173---
3174
Cary Clark08895c42018-02-01 09:37:32 -05003175## <a name="Mask_Filter_Methods"></a> Mask Filter Methods
3176
Cary Clarkce101242017-09-01 15:51:02 -04003177<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 -05003178<a href="undocumented#Mask_Filter">Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003179
3180<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3181creating 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
3182modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003183
3184### Example
3185
Cary Clark681287e2018-03-16 11:34:15 -04003186<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003187
Cary Clark493df1f2017-08-25 13:14:33 -04003188<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003189## getMaskFilter
3190
Cary Clarka560c472017-11-27 10:44:06 -05003191<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003192SkMaskFilter* getMaskFilter() const
3193</pre>
3194
Cary Clark4c06f5e2017-08-04 12:48:24 -04003195Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3196Does 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 -04003197
3198### Return Value
3199
Cary Clark4c06f5e2017-08-04 12:48:24 -04003200<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003201
3202### Example
3203
Cary Clark681287e2018-03-16 11:34:15 -04003204<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003205
3206#### Example Output
3207
3208~~~~
3209nullptr == mask filter
3210nullptr != mask filter
3211~~~~
3212
3213</fiddle-embed></div>
3214
3215---
3216
Cary Clark493df1f2017-08-25 13:14:33 -04003217<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003218## refMaskFilter
3219
Cary Clarka560c472017-11-27 10:44:06 -05003220<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003221sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003222</pre>
3223
Cary Clark4c06f5e2017-08-04 12:48:24 -04003224Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003225
Cary Clark4c06f5e2017-08-04 12:48:24 -04003226Increases <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 -04003227
3228### Return Value
3229
Cary Clark4c06f5e2017-08-04 12:48:24 -04003230<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003231
3232### Example
3233
Cary Clark681287e2018-03-16 11:34:15 -04003234<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003235
3236#### Example Output
3237
3238~~~~
3239mask filter unique: true
3240mask filter unique: false
3241~~~~
3242
3243</fiddle-embed></div>
3244
3245---
3246
Cary Clark493df1f2017-08-25 13:14:33 -04003247<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003248## setMaskFilter
3249
Cary Clarka560c472017-11-27 10:44:06 -05003250<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003251void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003252</pre>
3253
Cary Clark6fc50412017-09-21 12:31:06 -04003254Sets <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
3255<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
3256<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3257
Cary Clark6fc50412017-09-21 12:31:06 -04003258Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003259
3260### Parameters
3261
Cary Clark8cc16c72017-08-25 11:51:49 -04003262<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003263modifies clipping mask generated from drawn geometry</td>
3264 </tr>
3265</table>
3266
3267### Example
3268
Cary Clark681287e2018-03-16 11:34:15 -04003269<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003270
3271---
3272
Cary Clark08895c42018-02-01 09:37:32 -05003273## <a name="Typeface_Methods"></a> Typeface Methods
3274
Cary Clark4c06f5e2017-08-04 12:48:24 -04003275<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3276<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3277The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003278implementation.
3279
3280### Example
3281
Ben Wagner700ff172017-11-08 15:37:22 -05003282<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003283
Cary Clark493df1f2017-08-25 13:14:33 -04003284<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003285## getTypeface
3286
Cary Clarka560c472017-11-27 10:44:06 -05003287<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003288SkTypeface* getTypeface() const
3289</pre>
3290
Cary Clark4c06f5e2017-08-04 12:48:24 -04003291Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003292Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003293
3294### Return Value
3295
Cary Clark4c06f5e2017-08-04 12:48:24 -04003296<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003297
3298### Example
3299
Cary Clark71961fb2018-01-05 14:21:59 -05003300<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003301
3302#### Example Output
3303
3304~~~~
3305nullptr == typeface
3306nullptr != typeface
3307~~~~
3308
3309</fiddle-embed></div>
3310
3311---
3312
Cary Clark493df1f2017-08-25 13:14:33 -04003313<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003314## refTypeface
3315
Cary Clarka560c472017-11-27 10:44:06 -05003316<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003317sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003318</pre>
3319
Cary Clark4c06f5e2017-08-04 12:48:24 -04003320Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003321
3322### Return Value
3323
Cary Clark4c06f5e2017-08-04 12:48:24 -04003324<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003325
3326### Example
3327
Cary Clark71961fb2018-01-05 14:21:59 -05003328<div><fiddle-embed name="4bf8ed109c4b46d8a05c8b7763c1982c">
Cary Clark12799e12017-07-28 15:18:29 -04003329
3330#### Example Output
3331
3332~~~~
3333typeface1 != typeface2
3334typeface1 == typeface2
3335~~~~
3336
3337</fiddle-embed></div>
3338
3339---
3340
Cary Clark493df1f2017-08-25 13:14:33 -04003341<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003342## setTypeface
3343
Cary Clarka560c472017-11-27 10:44:06 -05003344<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003345void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003346</pre>
3347
Cary Clark7cfcbca2018-01-04 16:11:51 -05003348Sets <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 -04003349Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3350<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003351
3352### Parameters
3353
Cary Clark8cc16c72017-08-25 11:51:49 -04003354<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003355font and style used to draw text</td>
3356 </tr>
3357</table>
3358
3359### Example
3360
Cary Clark71961fb2018-01-05 14:21:59 -05003361<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003362
3363---
3364
Cary Clark08895c42018-02-01 09:37:32 -05003365## <a name="Image_Filter_Methods"></a> Image Filter Methods
3366
Cary Clark8cc16c72017-08-25 11:51:49 -04003367<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 -05003368with <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 -04003369which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003370
Cary Clark4c06f5e2017-08-04 12:48:24 -04003371<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 -05003372can 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 -04003373<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 +00003374<a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003375
3376### Example
3377
Update Docs4410d7f2018-03-19 06:05:52 +00003378<div><fiddle-embed name="250e45c5935d54eac6aca775d1fe3475"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003379
Cary Clark493df1f2017-08-25 13:14:33 -04003380<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003381## getImageFilter
3382
Cary Clarka560c472017-11-27 10:44:06 -05003383<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003384SkImageFilter* getImageFilter() const
3385</pre>
3386
Cary Clark4c06f5e2017-08-04 12:48:24 -04003387Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3388Does 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 -04003389
3390### Return Value
3391
Cary Clark4c06f5e2017-08-04 12:48:24 -04003392<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003393
3394### Example
3395
Cary Clarka560c472017-11-27 10:44:06 -05003396<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003397
3398#### Example Output
3399
3400~~~~
3401nullptr == image filter
3402nullptr != image filter
3403~~~~
3404
3405</fiddle-embed></div>
3406
3407---
3408
Cary Clark493df1f2017-08-25 13:14:33 -04003409<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003410## refImageFilter
3411
Cary Clarka560c472017-11-27 10:44:06 -05003412<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003413sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003414</pre>
3415
Cary Clark4c06f5e2017-08-04 12:48:24 -04003416Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3417Increases <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 -04003418
3419### Return Value
3420
Cary Clark4c06f5e2017-08-04 12:48:24 -04003421<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003422
3423### Example
3424
3425<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3426
3427#### Example Output
3428
3429~~~~
3430image filter unique: true
3431image filter unique: false
3432~~~~
3433
3434</fiddle-embed></div>
3435
3436---
3437
Cary Clark493df1f2017-08-25 13:14:33 -04003438<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003439## setImageFilter
3440
Cary Clarka560c472017-11-27 10:44:06 -05003441<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003442void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003443</pre>
3444
Cary Clark6fc50412017-09-21 12:31:06 -04003445Sets <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
3446<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 -04003447on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003448
Cary Clark6fc50412017-09-21 12:31:06 -04003449Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003450
3451### Parameters
3452
Cary Clark8cc16c72017-08-25 11:51:49 -04003453<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003454how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003455 </tr>
3456</table>
3457
3458### Example
3459
3460<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3461
3462---
3463
Cary Clark08895c42018-02-01 09:37:32 -05003464## <a name="Draw_Looper_Methods"></a> Draw Looper Methods
3465
Cary Clark4c06f5e2017-08-04 12:48:24 -04003466<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 -04003467to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003468
Cary Clark4c06f5e2017-08-04 12:48:24 -04003469<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3470<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 -05003471Set <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 -04003472
3473### Example
3474
3475<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3476
Cary Clark493df1f2017-08-25 13:14:33 -04003477<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003478## getDrawLooper
3479
Cary Clarka560c472017-11-27 10:44:06 -05003480<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003481SkDrawLooper* getDrawLooper() const
3482</pre>
3483
Cary Clark4c06f5e2017-08-04 12:48:24 -04003484Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3485Does 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 -04003486
3487### Return Value
3488
Cary Clark4c06f5e2017-08-04 12:48:24 -04003489<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003490
3491### Example
3492
3493<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3494
3495#### Example Output
3496
3497~~~~
3498nullptr == draw looper
3499nullptr != draw looper
3500~~~~
3501
3502</fiddle-embed></div>
3503
3504---
3505
Cary Clark493df1f2017-08-25 13:14:33 -04003506<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003507## refDrawLooper
3508
Cary Clarka560c472017-11-27 10:44:06 -05003509<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003510sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003511</pre>
3512
Cary Clark4c06f5e2017-08-04 12:48:24 -04003513Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3514Increases <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 -04003515
3516### Return Value
3517
Cary Clark4c06f5e2017-08-04 12:48:24 -04003518<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003519
3520### Example
3521
3522<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3523
3524#### Example Output
3525
3526~~~~
3527draw looper unique: true
3528draw looper unique: false
3529~~~~
3530
3531</fiddle-embed></div>
3532
3533---
3534
Cary Clark493df1f2017-08-25 13:14:33 -04003535<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003536## getLooper
3537
Cary Clarka560c472017-11-27 10:44:06 -05003538<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003539SkDrawLooper* getLooper() const
3540</pre>
3541
Cary Clark12799e12017-07-28 15:18:29 -04003542---
3543
Cary Clark493df1f2017-08-25 13:14:33 -04003544<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003545## setDrawLooper
3546
Cary Clarka560c472017-11-27 10:44:06 -05003547<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003548void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003549</pre>
3550
Cary Clark6fc50412017-09-21 12:31:06 -04003551Sets <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
3552<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
3553drawing unaltered.
3554
3555Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003556
3557### Parameters
3558
Cary Clark8cc16c72017-08-25 11:51:49 -04003559<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003560iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003561 </tr>
3562</table>
3563
3564### Example
3565
3566<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3567
3568---
3569
Cary Clark493df1f2017-08-25 13:14:33 -04003570<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003571## setLooper
3572
Cary Clarka560c472017-11-27 10:44:06 -05003573<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003574void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003575</pre>
3576
Cary Clark12799e12017-07-28 15:18:29 -04003577---
3578
Cary Clark08895c42018-02-01 09:37:32 -05003579## <a name="Text_Align"></a> Text Align
Cary Clark12799e12017-07-28 15:18:29 -04003580
Cary Clark8cc16c72017-08-25 11:51:49 -04003581## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003582
Cary Clarka560c472017-11-27 10:44:06 -05003583<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003584enum <a href="#SkPaint_Align">Align</a> {
3585<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3586<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3587<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark1a8d7622018-03-05 13:26:16 -05003588};
3589</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003590
Cary Clark8cc16c72017-08-25 11:51:49 -04003591<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clark2a8c48b2018-02-15 17:31:24 -05003592<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>,
3593<a href="SkCanvas_Reference#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="SkCanvas_Reference#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3594<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>,
3595and <a href="SkCanvas_Reference#SkCanvas_drawString">SkCanvas::drawString</a>;
3596as 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 -04003597
3598The text position is set by the font for both horizontal and vertical text.
3599Typically, for horizontal text, the position is to the left side of the glyph on the
3600base line; and for vertical text, the position is the horizontal center of the glyph
3601at the caps height.
3602
Cary Clark7cfcbca2018-01-04 16:11:51 -05003603<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 -04003604using the metrics returned by the font.
3605
Cary Clark8cc16c72017-08-25 11:51:49 -04003606<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003607
3608### Constants
3609
3610<table>
3611 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003612 <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.
3613</td>
Cary Clark12799e12017-07-28 15:18:29 -04003614 </tr>
3615 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003616 <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 -05003617half its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3618</td>
Cary Clark12799e12017-07-28 15:18:29 -04003619 </tr>
3620 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003621 <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 -05003622and by its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3623</td>
Cary Clark12799e12017-07-28 15:18:29 -04003624 </tr>
3625
Cary Clark06c20f32018-03-20 15:53:27 -04003626
Cary Clark12799e12017-07-28 15:18:29 -04003627
Cary Clark8cc16c72017-08-25 11:51:49 -04003628## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003629
Cary Clarka560c472017-11-27 10:44:06 -05003630<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003631enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003632<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark1a8d7622018-03-05 13:26:16 -05003633};
3634</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003635
3636### Constants
3637
3638<table>
3639 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003640 <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.
3641</td>
Cary Clark12799e12017-07-28 15:18:29 -04003642 </tr>
3643
Cary Clark06c20f32018-03-20 15:53:27 -04003644
Cary Clark12799e12017-07-28 15:18:29 -04003645
3646### Example
3647
Cary Clark1a8d7622018-03-05 13:26:16 -05003648<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
3649</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003650
3651### Example
3652
Cary Clark1a8d7622018-03-05 13:26:16 -05003653<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.
3654</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003655
Cary Clark493df1f2017-08-25 13:14:33 -04003656<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003657## getTextAlign
3658
Cary Clarka560c472017-11-27 10:44:06 -05003659<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003660Align getTextAlign() const
3661</pre>
3662
Cary Clark8cc16c72017-08-25 11:51:49 -04003663Returns <a href="#Text_Align">Text Align</a>.
3664Returns <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 -04003665
3666### Return Value
3667
3668text placement relative to position
3669
3670### Example
3671
3672<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3673
3674#### Example Output
3675
3676~~~~
3677kLeft_Align == default
3678~~~~
3679
3680</fiddle-embed></div>
3681
3682---
3683
Cary Clark493df1f2017-08-25 13:14:33 -04003684<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003685## setTextAlign
3686
Cary Clarka560c472017-11-27 10:44:06 -05003687<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003688void setTextAlign(Align align)
3689</pre>
3690
Cary Clark8cc16c72017-08-25 11:51:49 -04003691Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3692Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003693
3694### Parameters
3695
Cary Clark8cc16c72017-08-25 11:51:49 -04003696<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003697text placement relative to position</td>
3698 </tr>
3699</table>
3700
3701### Example
3702
Cary Clark4c06f5e2017-08-04 12:48:24 -04003703<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 -05003704alignment out of range has no effect.
3705</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003706
3707---
3708
Cary Clark08895c42018-02-01 09:37:32 -05003709## <a name="Text_Size"></a> Text Size
3710
Cary Clark8cc16c72017-08-25 11:51:49 -04003711<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3712<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3713<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003714Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003715
3716### Example
3717
3718<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3719
Cary Clark493df1f2017-08-25 13:14:33 -04003720<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003721## getTextSize
3722
Cary Clarka560c472017-11-27 10:44:06 -05003723<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003724SkScalar getTextSize() const
3725</pre>
3726
Cary Clark8cc16c72017-08-25 11:51:49 -04003727Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003728
3729### Return Value
3730
3731typographic height of text
3732
3733### Example
3734
3735<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3736
3737---
3738
Cary Clark493df1f2017-08-25 13:14:33 -04003739<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003740## setTextSize
3741
Cary Clarka560c472017-11-27 10:44:06 -05003742<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003743void setTextSize(SkScalar textSize)
3744</pre>
3745
Cary Clark8cc16c72017-08-25 11:51:49 -04003746Sets <a href="#Text_Size">Text Size</a> in points.
3747Has 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 -04003748
3749### Parameters
3750
Cary Clark8cc16c72017-08-25 11:51:49 -04003751<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003752typographic height of text</td>
3753 </tr>
3754</table>
3755
3756### Example
3757
3758<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3759
3760---
3761
Cary Clark08895c42018-02-01 09:37:32 -05003762## <a name="Text_Scale_X"></a> Text Scale X
3763
Cary Clark8cc16c72017-08-25 11:51:49 -04003764<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003765<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003766is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003767<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3768<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003769
3770### Example
3771
3772<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3773
Cary Clark493df1f2017-08-25 13:14:33 -04003774<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003775## getTextScaleX
3776
Cary Clarka560c472017-11-27 10:44:06 -05003777<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003778SkScalar getTextScaleX() const
3779</pre>
3780
Cary Clark8cc16c72017-08-25 11:51:49 -04003781Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003782Default value is 1.
3783
3784### Return Value
3785
3786text horizontal scale
3787
3788### Example
3789
3790<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3791
3792---
3793
Cary Clark493df1f2017-08-25 13:14:33 -04003794<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003795## setTextScaleX
3796
Cary Clarka560c472017-11-27 10:44:06 -05003797<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003798void setTextScaleX(SkScalar scaleX)
3799</pre>
3800
Cary Clark8cc16c72017-08-25 11:51:49 -04003801Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003802Default value is 1.
3803
3804### Parameters
3805
Cary Clark8cc16c72017-08-25 11:51:49 -04003806<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003807text horizontal scale</td>
3808 </tr>
3809</table>
3810
3811### Example
3812
3813<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3814
3815---
3816
Cary Clark08895c42018-02-01 09:37:32 -05003817## <a name="Text_Skew_X"></a> Text Skew X
3818
Cary Clark8cc16c72017-08-25 11:51:49 -04003819<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003820<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003821is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003822<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3823<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003824
3825### Example
3826
3827<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3828
Cary Clark493df1f2017-08-25 13:14:33 -04003829<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003830## getTextSkewX
3831
Cary Clarka560c472017-11-27 10:44:06 -05003832<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003833SkScalar getTextSkewX() const
3834</pre>
3835
Cary Clark8cc16c72017-08-25 11:51:49 -04003836Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003837Default value is zero.
3838
3839### Return Value
3840
3841additional shear in x-axis relative to y-axis
3842
3843### Example
3844
3845<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3846
3847---
3848
Cary Clark493df1f2017-08-25 13:14:33 -04003849<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003850## setTextSkewX
3851
Cary Clarka560c472017-11-27 10:44:06 -05003852<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003853void setTextSkewX(SkScalar skewX)
3854</pre>
3855
Cary Clark8cc16c72017-08-25 11:51:49 -04003856Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003857Default value is zero.
3858
3859### Parameters
3860
Cary Clark8cc16c72017-08-25 11:51:49 -04003861<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003862additional shear in x-axis relative to y-axis</td>
3863 </tr>
3864</table>
3865
3866### Example
3867
3868<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3869
3870---
3871
Cary Clark08895c42018-02-01 09:37:32 -05003872## <a name="Text_Encoding"></a> Text Encoding
Cary Clark12799e12017-07-28 15:18:29 -04003873
Cary Clark8cc16c72017-08-25 11:51:49 -04003874## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003875
Cary Clarka560c472017-11-27 10:44:06 -05003876<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003877enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3878<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3879<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3880<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3881<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark1a8d7622018-03-05 13:26:16 -05003882};
3883</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003884
Cary Clark6fc50412017-09-21 12:31:06 -04003885<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003886size, or glyph indices. Characters are encoded as specified by the <a href="http://unicode.org/standard/standard.html">Unicode standard</a> .
Cary Clark6fc50412017-09-21 12:31:06 -04003887
Cary Clarka560c472017-11-27 10:44:06 -05003888Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003889All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003890in the total storage required.
3891
Cary Clark7cfcbca2018-01-04 16:11:51 -05003892<a href="https://tools.ietf.org/html/rfc3629">UTF-8 (RFC 3629)</a> encodes each character as one or more 8-bit bytes.
Cary Clark6fc50412017-09-21 12:31:06 -04003893
Cary Clark7cfcbca2018-01-04 16:11:51 -05003894<a href="https://tools.ietf.org/html/rfc2781">UTF-16 (RFC 2781)</a> encodes each character as one or two 16-bit words.
Cary Clark6fc50412017-09-21 12:31:06 -04003895
Cary Clark7cfcbca2018-01-04 16:11:51 -05003896<a href="http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf">UTF-32</a> encodes each character as one 32-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003897
Cary Clark7cfcbca2018-01-04 16:11:51 -05003898<a href="undocumented#Font_Manager">Font Manager</a> uses font data to convert character code points into glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04003899A glyph index is a 16-bit word.
3900
Cary Clark8cc16c72017-08-25 11:51:49 -04003901<a href="#SkPaint_TextEncoding">TextEncoding</a> is set to <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04003902
3903### Constants
3904
3905<table>
3906 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003907 <td><a name="SkPaint_kUTF8_TextEncoding"> <code><strong>SkPaint::kUTF8_TextEncoding </strong></code> </a></td><td>0</td><td>Uses bytes to represent UTF-8 or ASCII.
3908</td>
Cary Clark12799e12017-07-28 15:18:29 -04003909 </tr>
3910 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003911 <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.
3912</td>
Cary Clark12799e12017-07-28 15:18:29 -04003913 </tr>
3914 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003915 <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.
3916</td>
Cary Clark12799e12017-07-28 15:18:29 -04003917 </tr>
3918 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003919 <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.
3920</td>
Cary Clark12799e12017-07-28 15:18:29 -04003921 </tr>
3922
Cary Clark06c20f32018-03-20 15:53:27 -04003923
Cary Clark12799e12017-07-28 15:18:29 -04003924
3925### Example
3926
Cary Clarka560c472017-11-27 10:44:06 -05003927<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3928Second line is encoded in UTF-16.
3929Third line is encoded in UTF-32.
Cary Clark1a8d7622018-03-05 13:26:16 -05003930Fourth line has 16 bit glyph indices.
3931</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003932
Cary Clark493df1f2017-08-25 13:14:33 -04003933<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003934## getTextEncoding
3935
Cary Clarka560c472017-11-27 10:44:06 -05003936<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003937TextEncoding getTextEncoding() const
3938</pre>
3939
Cary Clark8cc16c72017-08-25 11:51:49 -04003940Returns <a href="#Text_Encoding">Text Encoding</a>.
3941<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 -04003942
3943### Return Value
3944
Cary Clark7cfcbca2018-01-04 16:11:51 -05003945one 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 -04003946<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003947
3948### Example
3949
3950<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
3951
3952#### Example Output
3953
3954~~~~
3955kUTF8_TextEncoding == text encoding
3956kGlyphID_TextEncoding == text encoding
3957~~~~
3958
3959</fiddle-embed></div>
3960
3961---
3962
Cary Clark493df1f2017-08-25 13:14:33 -04003963<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003964## setTextEncoding
3965
Cary Clarka560c472017-11-27 10:44:06 -05003966<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003967void setTextEncoding(TextEncoding encoding)
3968</pre>
3969
Cary Clark7cfcbca2018-01-04 16:11:51 -05003970Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003971<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
3972Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003973
3974### Parameters
3975
Cary Clark8cc16c72017-08-25 11:51:49 -04003976<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003977one 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 -04003978<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003979 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04003980#
3981
Cary Clark12799e12017-07-28 15:18:29 -04003982</table>
3983
3984### Example
3985
3986<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
3987
3988#### Example Output
3989
3990~~~~
39914 != text encoding
3992~~~~
3993
3994</fiddle-embed></div>
3995
3996---
3997
Cary Clark08895c42018-02-01 09:37:32 -05003998## <a name="Font_Metrics"></a> Font Metrics
3999
Cary Clark2a8c48b2018-02-15 17:31:24 -05004000<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 -05004001The 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 -04004002<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004003
Cary Clark4c06f5e2017-08-04 12:48:24 -04004004<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 -04004005X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4006are positive.
4007Y-axis values above the baseline are negative, and below the baseline are positive.
4008
4009### Example
4010
Ben Wagnere5806492017-11-09 12:08:31 -05004011<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004012
Cary Clark8cc16c72017-08-25 11:51:49 -04004013# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04004014
Cary Clarka560c472017-11-27 10:44:06 -05004015<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004016struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4017enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4018<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4019<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4020<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4021<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004022};
4023
Cary Clark8cc16c72017-08-25 11:51:49 -04004024uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4025<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4026<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4027<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4028<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4029<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4030<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4031<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4032<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4033<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4034<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4035<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4036<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4037<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4038<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4039<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004040
Cary Clark8cc16c72017-08-25 11:51:49 -04004041bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4042bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4043bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4044bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark1a8d7622018-03-05 13:26:16 -05004045};
4046</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004047
Cary Clark154beea2017-10-26 07:58:48 -04004048<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
4049computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4050not available.
4051
Ben Wagnere5806492017-11-09 12:08:31 -05004052All vertical values relative to the baseline are given y-down. As such, zero is on the
4053baseline, negative values are above the baseline, and positive values are below the
4054baseline.
4055
Cary Clark154beea2017-10-26 07:58:48 -04004056<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
4057are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004058
Cary Clark154beea2017-10-26 07:58:48 -04004059<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
4060are valid, since their value may be zero.
4061
Cary Clark8cc16c72017-08-25 11:51:49 -04004062## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004063
Cary Clarka560c472017-11-27 10:44:06 -05004064<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004065enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4066<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4067<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4068<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4069<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark1a8d7622018-03-05 13:26:16 -05004070};
4071</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004072
Cary Clark154beea2017-10-26 07:58:48 -04004073<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4074the underline or strikeout metric may be valid and zero.
4075Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4076
Cary Clark12799e12017-07-28 15:18:29 -04004077### Constants
4078
4079<table>
4080 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004081 <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.
4082</td>
Cary Clark12799e12017-07-28 15:18:29 -04004083 </tr>
4084 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004085 <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.
4086</td>
Cary Clark12799e12017-07-28 15:18:29 -04004087 </tr>
4088 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004089 <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.
4090</td>
Cary Clark12799e12017-07-28 15:18:29 -04004091 </tr>
4092 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004093 <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.
4094</td>
Cary Clark12799e12017-07-28 15:18:29 -04004095 </tr>
4096
Cary Clark06c20f32018-03-20 15:53:27 -04004097
Cary Clark12799e12017-07-28 15:18:29 -04004098
Cary Clark8cc16c72017-08-25 11:51:49 -04004099<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004100
Cary Clark8cc16c72017-08-25 11:51:49 -04004101<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004102
Cary Clark8cc16c72017-08-25 11:51:49 -04004103<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004104
Ben Wagnere5806492017-11-09 12:08:31 -05004105Greatest extent above the baseline for any glyph.
4106Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004107
Cary Clark8cc16c72017-08-25 11:51:49 -04004108<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004109
4110Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004111Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004112
Cary Clark8cc16c72017-08-25 11:51:49 -04004113<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004114
4115Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004116Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004117
Cary Clark8cc16c72017-08-25 11:51:49 -04004118<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004119
Ben Wagnere5806492017-11-09 12:08:31 -05004120Greatest extent below the baseline for any glyph.
4121Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004122
Cary Clark8cc16c72017-08-25 11:51:49 -04004123<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004124
4125Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004126Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004127
Cary Clark8cc16c72017-08-25 11:51:49 -04004128<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004129
4130Average character width, if it is available.
4131Zero if no average width is stored in the font.
4132
Cary Clark8cc16c72017-08-25 11:51:49 -04004133<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004134
4135Maximum character width.
4136
Cary Clark8cc16c72017-08-25 11:51:49 -04004137<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004138
Cary Clark2a8c48b2018-02-15 17:31:24 -05004139Minimum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004140Typically less than zero.
4141
Cary Clark8cc16c72017-08-25 11:51:49 -04004142<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004143
Cary Clark2a8c48b2018-02-15 17:31:24 -05004144Maximum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004145Typically greater than zero.
4146
Cary Clark8cc16c72017-08-25 11:51:49 -04004147<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004148
4149Height of a lower-case 'x'.
4150May be zero if no lower-case height is stored in the font.
4151
Cary Clark8cc16c72017-08-25 11:51:49 -04004152<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004153
4154Height of an upper-case letter.
4155May be zero if no upper-case height is stored in the font.
4156
Cary Clark8cc16c72017-08-25 11:51:49 -04004157<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004158
Ben Wagnere5806492017-11-09 12:08:31 -05004159Underline thickness.
4160
4161If 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 -04004162If <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 -04004163
Cary Clark8cc16c72017-08-25 11:51:49 -04004164<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004165
Ben Wagnere5806492017-11-09 12:08:31 -05004166Position of the top of the underline stroke relative to the baseline.
4167Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004168
Cary Clark8cc16c72017-08-25 11:51:49 -04004169If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4170If <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 -04004171
Cary Clark8cc16c72017-08-25 11:51:49 -04004172<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004173
Ben Wagnere5806492017-11-09 12:08:31 -05004174Strikeout thickness.
4175
4176If 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 -04004177If <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 -04004178
Cary Clark8cc16c72017-08-25 11:51:49 -04004179<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004180
Ben Wagnere5806492017-11-09 12:08:31 -05004181Position of the bottom of the strikeout stroke relative to the baseline.
4182Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004183
Cary Clark8cc16c72017-08-25 11:51:49 -04004184If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4185If <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 -04004186
Cary Clark493df1f2017-08-25 13:14:33 -04004187<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004188## hasUnderlineThickness
4189
Cary Clarka560c472017-11-27 10:44:06 -05004190<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004191bool hasUnderlineThickness(SkScalar* thickness) const
4192</pre>
4193
Ben Wagnere5806492017-11-09 12:08:31 -05004194If <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 -04004195<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,
4196return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004197
4198### Parameters
4199
Cary Clark8cc16c72017-08-25 11:51:49 -04004200<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004201storage for underline width</td>
4202 </tr>
4203</table>
4204
4205### Return Value
4206
4207true if font specifies underline width
4208
4209---
4210
Cary Clark493df1f2017-08-25 13:14:33 -04004211<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004212## hasUnderlinePosition
4213
Cary Clarka560c472017-11-27 10:44:06 -05004214<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004215bool hasUnderlinePosition(SkScalar* position) const
4216</pre>
4217
Ben Wagnere5806492017-11-09 12:08:31 -05004218If <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 -04004219<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,
4220return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004221
4222### Parameters
4223
Cary Clark8cc16c72017-08-25 11:51:49 -04004224<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4225storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004226 </tr>
4227</table>
4228
4229### Return Value
4230
Cary Clark8cc16c72017-08-25 11:51:49 -04004231true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004232
4233---
4234
Cary Clark493df1f2017-08-25 13:14:33 -04004235<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004236## hasStrikeoutThickness
4237
Cary Clarka560c472017-11-27 10:44:06 -05004238<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004239bool hasStrikeoutThickness(SkScalar* thickness) const
4240</pre>
4241
Ben Wagnere5806492017-11-09 12:08:31 -05004242If <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 -04004243<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,
4244return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004245
4246### Parameters
4247
Cary Clark8cc16c72017-08-25 11:51:49 -04004248<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004249storage for strikeout width</td>
4250 </tr>
4251</table>
4252
4253### Return Value
4254
4255true if font specifies strikeout width
4256
4257---
4258
Cary Clark493df1f2017-08-25 13:14:33 -04004259<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004260## hasStrikeoutPosition
4261
Cary Clarka560c472017-11-27 10:44:06 -05004262<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004263bool hasStrikeoutPosition(SkScalar* position) const
4264</pre>
4265
Ben Wagnere5806492017-11-09 12:08:31 -05004266If <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 -04004267<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,
4268return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004269
4270### Parameters
4271
Cary Clark8cc16c72017-08-25 11:51:49 -04004272<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4273storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004274 </tr>
4275</table>
4276
4277### Return Value
4278
Cary Clark8cc16c72017-08-25 11:51:49 -04004279true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004280
4281---
4282
Cary Clark493df1f2017-08-25 13:14:33 -04004283<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004284## getFontMetrics
4285
Cary Clarka560c472017-11-27 10:44:06 -05004286<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004287SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4288</pre>
4289
Cary Clark8cc16c72017-08-25 11:51:49 -04004290Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4291The 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 -04004292descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004293If <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>.
4294Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4295dimensions 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>,
4296<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4297Results 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 -04004298is ignored.
4299
4300### Parameters
4301
Cary Clark8cc16c72017-08-25 11:51:49 -04004302<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4303storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4304 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004305additional multiplier for returned values</td>
4306 </tr>
4307</table>
4308
4309### Return Value
4310
4311recommended spacing between lines
4312
4313### Example
4314
4315<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4316
4317### See Also
4318
Cary Clark8cc16c72017-08-25 11:51:49 -04004319<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 -04004320
4321---
4322
Cary Clark493df1f2017-08-25 13:14:33 -04004323<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004324## getFontSpacing
4325
Cary Clarka560c472017-11-27 10:44:06 -05004326<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004327SkScalar getFontSpacing() const
4328</pre>
4329
4330Returns the recommended spacing between lines: the sum of metrics
4331descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004332Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004333dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004334Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004335
4336### Return Value
4337
4338recommended spacing between lines
4339
4340### Example
4341
4342<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4343
4344#### Example Output
4345
4346~~~~
4347textSize: 12 fontSpacing: 13.9688
4348textSize: 18 fontSpacing: 20.9531
4349textSize: 24 fontSpacing: 27.9375
4350textSize: 32 fontSpacing: 37.25
4351~~~~
4352
4353</fiddle-embed></div>
4354
4355---
4356
Cary Clark493df1f2017-08-25 13:14:33 -04004357<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004358## getFontBounds
4359
Cary Clarka560c472017-11-27 10:44:06 -05004360<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004361SkRect getFontBounds() const
4362</pre>
4363
Cary Clark2a8c48b2018-02-15 17:31:24 -05004364Returns the union of bounds of all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004365Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004366ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4367and <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 -04004368
Cary Clark8cc16c72017-08-25 11:51:49 -04004369If <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 -05004370returns 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 -04004371<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 -04004372
4373### Return Value
4374
Cary Clark2a8c48b2018-02-15 17:31:24 -05004375union of bounds of all <a href="undocumented#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004376
4377### Example
4378
4379<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4380
4381#### Example Output
4382
4383~~~~
4384metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4385font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4386~~~~
4387
4388</fiddle-embed></div>
4389
4390---
4391
Cary Clark493df1f2017-08-25 13:14:33 -04004392<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004393## textToGlyphs
4394
Cary Clarka560c472017-11-27 10:44:06 -05004395<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004396int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4397</pre>
4398
Cary Clark8cc16c72017-08-25 11:51:49 -04004399Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4400Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4401<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>.
4402<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004403
Cary Clarkbc5697d2017-10-04 14:31:33 -04004404Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004405
Cary Clark8cc16c72017-08-25 11:51:49 -04004406If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4407If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004408
Cary Clark8cc16c72017-08-25 11:51:49 -04004409If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004410<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004411
4412### Parameters
4413
Cary Clark8cc16c72017-08-25 11:51:49 -04004414<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004415character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004416 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004417length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004418 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004419storage for glyph indices; may be nullptr</td>
4420 </tr>
4421</table>
4422
4423### Return Value
4424
Cary Clark8cc16c72017-08-25 11:51:49 -04004425number 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 -04004426
4427### Example
4428
4429<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4430
4431---
4432
Cary Clark493df1f2017-08-25 13:14:33 -04004433<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004434## countText
4435
Cary Clarka560c472017-11-27 10:44:06 -05004436<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004437int countText(const void* text, size_t byteLength) const
4438</pre>
4439
Cary Clark2a8c48b2018-02-15 17:31:24 -05004440Returns the number of <a href="undocumented#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4441Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004442Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004443
4444### Parameters
4445
Cary Clark8cc16c72017-08-25 11:51:49 -04004446<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004447character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004448 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004449length of character storage in bytes</td>
4450 </tr>
4451</table>
4452
4453### Return Value
4454
Cary Clark2a8c48b2018-02-15 17:31:24 -05004455number 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 -04004456
4457### Example
4458
4459<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4460
4461#### Example Output
4462
4463~~~~
4464count = 5
4465~~~~
4466
4467</fiddle-embed></div>
4468
4469---
4470
Cary Clark493df1f2017-08-25 13:14:33 -04004471<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004472## containsText
4473
Cary Clarka560c472017-11-27 10:44:06 -05004474<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004475bool containsText(const void* text, size_t byteLength) const
4476</pre>
4477
Cary Clark7cfcbca2018-01-04 16:11:51 -05004478Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004479Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004480<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004481
Cary Clark8cc16c72017-08-25 11:51:49 -04004482If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4483returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4484does 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 -04004485
Cary Clarkce101242017-09-01 15:51:02 -04004486Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004487
4488### Parameters
4489
Cary Clark8cc16c72017-08-25 11:51:49 -04004490<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004491array of characters or <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004492 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4493number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004494 </tr>
4495</table>
4496
4497### Return Value
4498
Cary Clark8cc16c72017-08-25 11:51:49 -04004499true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004500
4501### Example
4502
Cary Clark8cc16c72017-08-25 11:51:49 -04004503<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 -05004504corresponding to the Unicode surrogate code point.
4505</div>
Cary Clark12799e12017-07-28 15:18:29 -04004506
4507#### Example Output
4508
4509~~~~
45100x00b0 == has char
45110xd800 != has char
4512~~~~
4513
4514</fiddle-embed></div>
4515
4516### Example
4517
Cary Clark8cc16c72017-08-25 11:51:49 -04004518<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 -05004519that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.
4520</div>
Cary Clark12799e12017-07-28 15:18:29 -04004521
4522#### Example Output
4523
4524~~~~
45250x01ff == has glyph
45260x0000 != has glyph
45270xffff == has glyph
4528~~~~
4529
4530</fiddle-embed></div>
4531
4532### See Also
4533
Cary Clark8cc16c72017-08-25 11:51:49 -04004534<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004535
4536---
4537
Cary Clark493df1f2017-08-25 13:14:33 -04004538<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004539## glyphsToUnichars
4540
Cary Clarka560c472017-11-27 10:44:06 -05004541<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004542void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4543</pre>
4544
Cary Clark7cfcbca2018-01-04 16:11:51 -05004545Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4546<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004547Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004548by <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 -04004549
Cary Clark2a8c48b2018-02-15 17:31:24 -05004550Only supported on platforms that use FreeType as the <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004551
4552### Parameters
4553
Cary Clark8cc16c72017-08-25 11:51:49 -04004554<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004555array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004556 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004557length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004558 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004559storage for character codes, one per glyph</td>
4560 </tr>
4561</table>
4562
4563### Example
4564
Cary Clark1a8d7622018-03-05 13:26:16 -05004565<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.
4566</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004567
4568---
4569
Cary Clark08895c42018-02-01 09:37:32 -05004570## <a name="Measure_Text"></a> Measure Text
Cary Clark12799e12017-07-28 15:18:29 -04004571
Cary Clark493df1f2017-08-25 13:14:33 -04004572<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004573## measureText
4574
Cary Clarka560c472017-11-27 10:44:06 -05004575<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004576SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4577</pre>
4578
Cary Clark8cc16c72017-08-25 11:51:49 -04004579Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4580and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4581The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4582Uses <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,
4583and <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
4584<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4585Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4586The 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 -04004587
4588### Parameters
4589
Cary Clark8cc16c72017-08-25 11:51:49 -04004590<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004591character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004592 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4593number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4594 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004595returns bounding box relative to (0, 0) if not nullptr</td>
4596 </tr>
4597</table>
4598
4599### Return Value
4600
4601advance width or height
4602
4603### Example
4604
4605<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4606
4607---
4608
Cary Clark2dc84ad2018-01-26 12:56:22 -05004609<a name="SkPaint_measureText_2"></a>
4610
Cary Clarka560c472017-11-27 10:44:06 -05004611<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004612SkScalar measureText(const void* text, size_t length) const
4613</pre>
4614
Cary Clark8cc16c72017-08-25 11:51:49 -04004615Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4616and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4617The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4618Uses <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,
4619and <a href="#Text_Size">Text Size</a> to scale the metrics.
4620Does 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 -04004621
4622### Parameters
4623
Cary Clark8cc16c72017-08-25 11:51:49 -04004624<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004625character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004626 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4627number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004628 </tr>
4629</table>
4630
4631### Return Value
4632
4633advance width or height
4634
4635### Example
4636
4637<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4638
4639#### Example Output
4640
4641~~~~
4642default width = 5
4643double width = 10
4644~~~~
4645
4646</fiddle-embed></div>
4647
4648---
4649
Cary Clark493df1f2017-08-25 13:14:33 -04004650<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004651## breakText
4652
Cary Clarka560c472017-11-27 10:44:06 -05004653<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004654size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004655 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004656</pre>
4657
Cary Clark8cc16c72017-08-25 11:51:49 -04004658Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4659If <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
4660equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4661If <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
4662equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4663Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4664Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4665Uses <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,
4666and <a href="#Text_Size">Text Size</a> to scale the metrics.
4667Does 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 -04004668
4669### Parameters
4670
Cary Clark8cc16c72017-08-25 11:51:49 -04004671<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004672character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004673 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4674number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4675 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4676advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4677 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4678returns 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 -04004679 </tr>
4680</table>
4681
4682### Return Value
4683
Cary Clark8cc16c72017-08-25 11:51:49 -04004684bytes 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 -04004685
4686### Example
4687
Cary Clark4c06f5e2017-08-04 12:48:24 -04004688<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 -05004689<a href="undocumented#Line">Line</a> under "" shows measured width after breaking <a href="#SkPaint_breakText_text">text</a>.
4690</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004691
4692---
4693
Cary Clark493df1f2017-08-25 13:14:33 -04004694<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004695## getTextWidths
4696
Cary Clarka560c472017-11-27 10:44:06 -05004697<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4698int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004699</pre>
4700
Cary Clark8cc16c72017-08-25 11:51:49 -04004701Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4702the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4703Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4704If <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 -05004705if <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 -04004706If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4707If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4708Uses <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,
4709and <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>.
4710Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4711Does 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 -04004712
4713### Parameters
4714
Cary Clark8cc16c72017-08-25 11:51:49 -04004715<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004716character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004717 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4718number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4719 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4720returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4721 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4722returns <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 -04004723 </tr>
4724</table>
4725
4726### Return Value
4727
Cary Clark8cc16c72017-08-25 11:51:49 -04004728glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004729
4730### Example
4731
Cary Clark2a8c48b2018-02-15 17:31:24 -05004732<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 -05004733The underlines show the <a href="#SkPaint_getTextWidths_text">text</a> advance, spaced to keep them distinct.
4734</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004735
4736---
4737
Cary Clark08895c42018-02-01 09:37:32 -05004738## <a name="Text_Path"></a> Text Path
4739
Cary Clark2a8c48b2018-02-15 17:31:24 -05004740<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 -04004741
Cary Clark493df1f2017-08-25 13:14:33 -04004742<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004743## getTextPath
4744
Cary Clarka560c472017-11-27 10:44:06 -05004745<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4746void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004747</pre>
4748
Cary Clark8cc16c72017-08-25 11:51:49 -04004749Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4750Uses <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,
4751and <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.
4752All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4753Uses <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 -04004754
4755### Parameters
4756
Cary Clark8cc16c72017-08-25 11:51:49 -04004757<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004758character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004759 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4760number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4761 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004762<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 -04004763 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004764<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 -04004765 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004766geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004767 </tr>
4768</table>
4769
4770### Example
4771
Cary Clark4c06f5e2017-08-04 12:48:24 -04004772<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 -05004773the offset location. The result is rendered with one draw call.
4774</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004775
4776---
4777
Cary Clark493df1f2017-08-25 13:14:33 -04004778<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004779## getPosTextPath
4780
Cary Clarka560c472017-11-27 10:44:06 -05004781<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4782void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004783</pre>
4784
Cary Clark8cc16c72017-08-25 11:51:49 -04004785Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4786Uses <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,
4787and <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.
4788All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4789Uses <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>.
4790<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004791
4792### Parameters
4793
Cary Clark8cc16c72017-08-25 11:51:49 -04004794<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004795character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004796 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4797number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4798 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004799positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004800 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004801geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004802 </tr>
4803</table>
4804
4805### Example
4806
Cary Clark1a8d7622018-03-05 13:26:16 -05004807<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three <a href="undocumented#Glyph">Glyphs</a> to eliminate overlaps, and strokes the result.
4808</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004809
4810---
4811
Cary Clark08895c42018-02-01 09:37:32 -05004812## <a name="Text_Intercepts"></a> Text Intercepts
4813
Cary Clark2a8c48b2018-02-15 17:31:24 -05004814<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 -04004815of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004816underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004817
Cary Clark493df1f2017-08-25 13:14:33 -04004818<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004819## getTextIntercepts
4820
Cary Clarka560c472017-11-27 10:44:06 -05004821<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004822int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4823 const SkScalar bounds[2], SkScalar* intervals) const
4824</pre>
4825
Cary Clark8cc16c72017-08-25 11:51:49 -04004826Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4827<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 -05004828The 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 -05004829the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004830Uses <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,
4831and <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.
4832Uses <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>.
4833Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4834<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004835
4836### Parameters
4837
Cary Clark8cc16c72017-08-25 11:51:49 -04004838<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004839character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004840 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4841number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4842 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004843<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 -04004844 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004845<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 -04004846 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004847lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004848 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004849returned intersections; may be nullptr</td>
4850 </tr>
4851</table>
4852
4853### Return Value
4854
4855number of intersections; may be zero
4856
4857### Example
4858
Cary Clark1a8d7622018-03-05 13:26:16 -05004859<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
4860</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004861
4862---
4863
Cary Clark493df1f2017-08-25 13:14:33 -04004864<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004865## getPosTextIntercepts
4866
Cary Clarka560c472017-11-27 10:44:06 -05004867<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004868int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4869 const SkScalar bounds[2], SkScalar* intervals) const
4870</pre>
4871
Cary Clark8cc16c72017-08-25 11:51:49 -04004872Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4873<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 -05004874The 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 -05004875the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004876Uses <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,
4877and <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.
4878Uses <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>.
4879Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4880<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004881
4882### Parameters
4883
Cary Clark8cc16c72017-08-25 11:51:49 -04004884<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004885character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004886 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4887number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4888 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004889positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004890 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004891lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004892 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004893returned intersections; may be nullptr</td>
4894 </tr>
4895</table>
4896
4897### Return Value
4898
Cary Clarka523d2d2017-08-30 08:58:10 -04004899number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004900
4901### Example
4902
Cary Clark1a8d7622018-03-05 13:26:16 -05004903<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.
4904</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004905
4906---
4907
Cary Clark493df1f2017-08-25 13:14:33 -04004908<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004909## getPosTextHIntercepts
4910
Cary Clarka560c472017-11-27 10:44:06 -05004911<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4912int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4913 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004914</pre>
4915
Cary Clark8cc16c72017-08-25 11:51:49 -04004916Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4917<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 -05004918The 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 -05004919the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004920Uses <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,
4921and <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.
4922Uses <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>.
4923Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4924<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004925
4926### Parameters
4927
Cary Clark8cc16c72017-08-25 11:51:49 -04004928<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004929character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004930 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4931number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4932 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004933positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004934 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004935position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004936 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004937lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004938 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004939returned intersections; may be nullptr</td>
4940 </tr>
4941</table>
4942
4943### Return Value
4944
4945number of intersections; may be zero
4946
4947### Example
4948
Cary Clark1a8d7622018-03-05 13:26:16 -05004949<div><fiddle-embed name="dc9851c43acc3716aca8c9a4d40d452d"><div><a href="undocumented#Text">Text</a> intercepts do not take stroke thickness into consideration.
4950</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004951
4952---
4953
Cary Clark493df1f2017-08-25 13:14:33 -04004954<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004955## getTextBlobIntercepts
4956
Cary Clarka560c472017-11-27 10:44:06 -05004957<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4958int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004959</pre>
4960
Cary Clark8cc16c72017-08-25 11:51:49 -04004961Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4962<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clark2a8c48b2018-02-15 17:31:24 -05004963The 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 -05004964the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004965Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04004966and <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 -04004967Uses 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 -05004968<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
4969
Cary Clark8cc16c72017-08-25 11:51:49 -04004970Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
4971<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004972
4973### Parameters
4974
Cary Clark8cc16c72017-08-25 11:51:49 -04004975<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004976<a href="undocumented#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004977 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004978lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004979 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004980returned intersections; may be nullptr</td>
4981 </tr>
4982</table>
4983
4984### Return Value
4985
4986number of intersections; may be zero
4987
4988### Example
4989
Cary Clark3cd22cc2017-12-01 11:49:58 -05004990<div><fiddle-embed name="71959a66b2290d70003887c0de339266"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004991
4992---
4993
Cary Clark493df1f2017-08-25 13:14:33 -04004994<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004995## nothingToDraw
4996
Cary Clarka560c472017-11-27 10:44:06 -05004997<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004998bool nothingToDraw() const
4999</pre>
5000
Cary Clark8cc16c72017-08-25 11:51:49 -04005001Returns true if <a href="#Paint">Paint</a> prevents all drawing;
5002otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005003
Cary Clark2a8c48b2018-02-15 17:31:24 -05005004Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="undocumented#Alpha">Color Alpha</a> computes a
5005new <a href="undocumented#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005006
5007### Return Value
5008
Cary Clark8cc16c72017-08-25 11:51:49 -04005009true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005010
5011### Example
5012
5013<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
5014
5015#### Example Output
5016
5017~~~~
5018initial nothing to draw: false
5019blend dst nothing to draw: true
5020blend src over nothing to draw: false
5021alpha 0 nothing to draw: true
5022~~~~
5023
5024</fiddle-embed></div>
5025
5026---
5027
Cary Clark08895c42018-02-01 09:37:32 -05005028## <a name="Fast_Bounds"></a> Fast Bounds
5029
Cary Clark8cc16c72017-08-25 11:51:49 -04005030<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5031<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005032
Cary Clark493df1f2017-08-25 13:14:33 -04005033<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005034## canComputeFastBounds
5035
Cary Clarka560c472017-11-27 10:44:06 -05005036<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005037bool canComputeFastBounds() const
5038</pre>
5039
Cary Clark8cc16c72017-08-25 11:51:49 -04005040Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5041to 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 -04005042always returns false.
5043
5044### Return Value
5045
Cary Clark8cc16c72017-08-25 11:51:49 -04005046true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005047
5048---
5049
Cary Clark493df1f2017-08-25 13:14:33 -04005050<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005051## computeFastBounds
5052
Cary Clarka560c472017-11-27 10:44:06 -05005053<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005054const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5055</pre>
5056
Cary Clark8cc16c72017-08-25 11:51:49 -04005057Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005058raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005059effects 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 -04005060parameter. It returns the adjusted bounds that can then be used
Cary Clark2a8c48b2018-02-15 17:31:24 -05005061for <a href="SkCanvas_Reference#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005062
Cary Clarkbc5697d2017-10-04 14:31:33 -04005063The 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 -04005064should 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 -04005065use 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 -04005066<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005067
5068### Parameters
5069
Cary Clark8cc16c72017-08-25 11:51:49 -04005070<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5071geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5072 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005073computed bounds of geometry; may not be nullptr</td>
5074 </tr>
5075</table>
5076
5077### Return Value
5078
5079fast computed bounds
5080
5081---
5082
Cary Clark493df1f2017-08-25 13:14:33 -04005083<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005084## computeFastStrokeBounds
5085
Cary Clarka560c472017-11-27 10:44:06 -05005086<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005087const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5088</pre>
5089
5090### Parameters
5091
Cary Clark8cc16c72017-08-25 11:51:49 -04005092<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5093geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5094 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005095computed bounds of geometry</td>
5096 </tr>
5097</table>
5098
5099### Return Value
5100
5101fast computed bounds
5102
5103---
5104
Cary Clark493df1f2017-08-25 13:14:33 -04005105<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005106## doComputeFastBounds
5107
Cary Clarka560c472017-11-27 10:44:06 -05005108<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5109const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005110</pre>
5111
Cary Clarkce101242017-09-01 15:51:02 -04005112Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5113account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5114altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005115
5116### Parameters
5117
Cary Clark8cc16c72017-08-25 11:51:49 -04005118<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5119geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5120 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005121computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005122 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5123overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005124 </tr>
5125</table>
5126
5127### Return Value
5128
5129fast computed bounds
5130
5131---
5132
Cary Clark78de7512018-02-07 07:27:09 -05005133## <a name="Utility"></a> Utility
5134
5135| name | description |
5136| --- | --- |
Cary Clark2a8c48b2018-02-15 17:31:24 -05005137| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="undocumented#Glyph">Glyphs</a> |
5138| <a href="#SkPaint_countText">countText</a> | returns number of <a href="undocumented#Glyph">Glyphs</a> in text |
5139| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="undocumented#Glyph">Glyphs</a> into text |
Cary Clark78de7512018-02-07 07:27:09 -05005140| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
5141| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
5142| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
5143
Cary Clark493df1f2017-08-25 13:14:33 -04005144<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005145## toString
5146
Cary Clarka560c472017-11-27 10:44:06 -05005147<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark2dc84ad2018-01-26 12:56:22 -05005148void toString(SkString* str) const
Cary Clark12799e12017-07-28 15:18:29 -04005149</pre>
5150
Cary Clarkce101242017-09-01 15:51:02 -04005151Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5152internal debugging tools. The interface and implementation may be
Cary Clark7cfcbca2018-01-04 16:11:51 -05005153suppressed by defining SK_IGNORE_TO_STRING.
Cary Clark12799e12017-07-28 15:18:29 -04005154
5155### Parameters
5156
Cary Clark8cc16c72017-08-25 11:51:49 -04005157<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005158storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005159 </tr>
5160</table>
5161
5162### Example
5163
5164<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5165
5166#### Example Output
5167
5168~~~~
5169text size = 12
5170~~~~
5171
5172</fiddle-embed></div>
5173
Cary Clark2ade9972017-11-02 17:49:34 -04005174### See Also
5175
Cary Clark2a8c48b2018-02-15 17:31:24 -05005176<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 -04005177
Cary Clark12799e12017-07-28 15:18:29 -04005178---
5179