blob: 1be30418fad674e17f690c5ded87d7a7565c9ed9 [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 Clark2d4bf5f2018-04-16 08:37:38 -040050| <a href="#Alpha_Methods">Alpha Methods</a> | get and set <a href="SkColor_Reference#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> |
Cary Clark2d4bf5f2018-04-16 08:37:38 -040055| <a href="#Color_Methods">Color Methods</a> | get and set <a href="SkColor_Reference#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 Clark2d4bf5f2018-04-16 08:37:38 -040070| <a href="#LCD_Text">LCD Text</a> | text relying on the order of <a href="SkColor_Reference#RGB">Color RGB</a> stripes |
Cary Clark2a8c48b2018-02-15 17:31:24 -050071| <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 Clark12799e12017-07-28 15:18:29 -0400108
Cary Clark4855f782018-02-06 09:41:53 -0500109## <a name="Class_or_Struct"></a> Class or Struct
Cary Clark12799e12017-07-28 15:18:29 -0400110
Cary Clark5081eed2018-01-22 07:55:48 -0500111| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500112| --- | --- |
113| <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 -0400114
Cary Clark4855f782018-02-06 09:41:53 -0500115## <a name="Constructor"></a> Constructor
Cary Clark12799e12017-07-28 15:18:29 -0400116
Cary Clark5081eed2018-01-22 07:55:48 -0500117| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500118| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500119| <a href="#SkPaint_empty_constructor">SkPaint()</a> | constructs with default values |
120| <a href="#SkPaint_move_SkPaint">SkPaint(SkPaint&& paint)</a> | moves paint without copying it |
121| <a href="#SkPaint_copy_const_SkPaint">SkPaint(const SkPaint& paint)</a> | makes a shallow copy |
Cary Clark08895c42018-02-01 09:37:32 -0500122| <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 -0400123
Cary Clark4855f782018-02-06 09:41:53 -0500124## <a name="Operator"></a> Operator
Cary Clark12799e12017-07-28 15:18:29 -0400125
Cary Clark5081eed2018-01-22 07:55:48 -0500126| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500127| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500128| <a href="#SkPaint_notequal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | compares paints for inequality |
129| <a href="#SkPaint_move_operator">operator=(SkPaint&& paint)</a> | moves paint without copying it |
130| <a href="#SkPaint_copy_operator">operator=(const SkPaint& paint)</a> | makes a shallow copy |
131| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | compares paints for equality |
Cary Clark12799e12017-07-28 15:18:29 -0400132
Cary Clark4855f782018-02-06 09:41:53 -0500133## <a name="Member_Function"></a> Member Function
Cary Clark12799e12017-07-28 15:18:29 -0400134
Cary Clark5081eed2018-01-22 07:55:48 -0500135| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500136| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500137| <a href="#SkPaint_breakText">breakText</a> | returns text that fits in a width |
138| <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> | returns true if settings allow for fast bounds computation |
139| <a href="#SkPaint_computeFastBounds">computeFastBounds</a> | returns fill bounds for quick reject tests |
140| <a href="#SkPaint_computeFastStrokeBounds">computeFastStrokeBounds</a> | returns stroke bounds for quick reject tests |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500141| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="undocumented#Glyph">Glyphs</a> |
142| <a href="#SkPaint_countText">countText</a> | returns number of <a href="undocumented#Glyph">Glyphs</a> in text |
Cary Clark5081eed2018-01-22 07:55:48 -0500143| <a href="#SkPaint_doComputeFastBounds">doComputeFastBounds</a> | returns bounds for quick reject tests |
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400144| <a href="#SkPaint_getAlpha">getAlpha</a> | returns <a href="SkColor_Reference#Alpha">Color Alpha</a>, color opacity |
Cary Clark5081eed2018-01-22 07:55:48 -0500145| <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 Clark2d4bf5f2018-04-16 08:37:38 -0400146| <a href="#SkPaint_getColor">getColor</a> | returns <a href="SkColor_Reference#Alpha">Color Alpha</a> and <a href="SkColor_Reference#RGB">Color RGB</a>, one drawing color |
Cary Clark5081eed2018-01-22 07:55:48 -0500147| <a href="#SkPaint_getColorFilter">getColorFilter</a> | returns <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered |
148| <a href="#SkPaint_getDrawLooper">getDrawLooper</a> | returns <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
149| <a href="#SkPaint_getFillPath">getFillPath</a> | returns fill path equivalent to stroke |
150| <a href="#SkPaint_getFilterQuality">getFilterQuality</a> | returns <a href="undocumented#Filter_Quality">Filter Quality</a>, image filtering level |
151| <a href="#SkPaint_getFlags">getFlags</a> | returns <a href="#SkPaint_Flags">Flags</a> stored in a bit field |
152| <a href="#SkPaint_getFontBounds">getFontBounds</a> | returns union all glyph bounds |
153| <a href="#SkPaint_getFontMetrics">getFontMetrics</a> | returns <a href="undocumented#Typeface">Typeface</a> metrics scaled by text size |
154| <a href="#SkPaint_getFontSpacing">getFontSpacing</a> | returns recommended spacing between lines |
155| <a href="#SkPaint_getHash">getHash</a> | returns a shallow hash for equality checks |
156| <a href="#SkPaint_getHinting">getHinting</a> | returns <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level |
157| <a href="#SkPaint_getImageFilter">getImageFilter</a> | returns <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur |
158| <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> |
159| <a href="#SkPaint_getPathEffect">getPathEffect</a> | returns <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
160| <a href="#SkPaint_getPosTextHIntercepts">getPosTextHIntercepts</a> | returns where lines intersect horizontally positioned text; underlines |
161| <a href="#SkPaint_getPosTextIntercepts">getPosTextIntercepts</a> | returns where lines intersect positioned text; underlines |
162| <a href="#SkPaint_getPosTextPath">getPosTextPath</a> | returns <a href="SkPath_Reference#Path">Path</a> equivalent to positioned text |
163| <a href="#SkPaint_getShader">getShader</a> | returns <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
164| <a href="#SkPaint_getStrokeCap">getStrokeCap</a> | returns <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends |
165| <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a> | returns <a href="#SkPaint_Join">Join</a>, geometry on path corners |
166| <a href="#SkPaint_getStrokeMiter">getStrokeMiter</a> | returns <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners |
167| <a href="#SkPaint_getStrokeWidth">getStrokeWidth</a> | returns thickness of the stroke |
168| <a href="#SkPaint_getStyle">getStyle</a> | returns <a href="#SkPaint_Style">Style</a>: stroke, fill, or both |
169| <a href="#SkPaint_getTextAlign">getTextAlign</a> | returns <a href="#SkPaint_Align">Align</a>: left, center, or right |
170| <a href="#SkPaint_getTextBlobIntercepts">getTextBlobIntercepts</a> | returns where lines intersect <a href="undocumented#Text_Blob">Text Blob</a>; underlines |
171| <a href="#SkPaint_getTextEncoding">getTextEncoding</a> | returns character or glyph encoded size |
172| <a href="#SkPaint_getTextIntercepts">getTextIntercepts</a> | returns where lines intersect text; underlines |
173| <a href="#SkPaint_getTextPath">getTextPath</a> | returns <a href="SkPath_Reference#Path">Path</a> equivalent to text |
174| <a href="#SkPaint_getTextScaleX">getTextScaleX</a> | returns the text horizontal scale; condensed text |
175| <a href="#SkPaint_getTextSize">getTextSize</a> | returns text size in points |
176| <a href="#SkPaint_getTextSkewX">getTextSkewX</a> | returns the text horizontal skew; oblique text |
177| <a href="#SkPaint_getTextWidths">getTextWidths</a> | returns advance and bounds for each glyph in text |
178| <a href="#SkPaint_getTypeface">getTypeface</a> | returns <a href="undocumented#Typeface">Typeface</a>, font description |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500179| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="undocumented#Glyph">Glyphs</a> into text |
Cary Clark5081eed2018-01-22 07:55:48 -0500180| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | returns true if Anti-alias is set |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500181| <a href="#SkPaint_isAutohinted">isAutohinted</a> | returns true if <a href="undocumented#Glyph">Glyphs</a> are always hinted |
182| <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 -0500183| <a href="#SkPaint_isDither">isDither</a> | returns true if <a href="#Dither">Dither</a> is set |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500184| <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 -0500185| <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 -0500186| <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 -0500187| <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 -0500188| <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> |
189| <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 -0500190| <a href="#SkPaint_isVerticalText">isVerticalText</a> | returns true if <a href="#Vertical_Text">Vertical Text</a> is set |
191| <a href="#SkPaint_measureText">measureText</a> | returns advance width and bounds of text |
192| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
193| <a href="#SkPaint_refColorFilter">refColorFilter</a> | references <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered |
194| <a href="#SkPaint_refDrawLooper">refDrawLooper</a> | references <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
195| <a href="#SkPaint_refImageFilter">refImageFilter</a> | references <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur |
196| <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> |
197| <a href="#SkPaint_refPathEffect">refPathEffect</a> | references <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
198| <a href="#SkPaint_refShader">refShader</a> | references <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
199| <a href="#SkPaint_refTypeface">refTypeface</a> | references <a href="undocumented#Typeface">Typeface</a>, font description |
200| <a href="#SkPaint_reset">reset</a> | sets to default values |
201| <a href="#SkPaint_setARGB">setARGB</a> | sets color by component |
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400202| <a href="#SkPaint_setAlpha">setAlpha</a> | sets <a href="SkColor_Reference#Alpha">Color Alpha</a>, color opacity |
Cary Clark5081eed2018-01-22 07:55:48 -0500203| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | sets or clears Anti-alias |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500204| <a href="#SkPaint_setAutohinted">setAutohinted</a> | sets <a href="undocumented#Glyph">Glyphs</a> to always be hinted |
Cary Clark5081eed2018-01-22 07:55:48 -0500205| <a href="#SkPaint_setBlendMode">setBlendMode</a> | sets <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with destination |
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400206| <a href="#SkPaint_setColor">setColor</a> | sets <a href="SkColor_Reference#Alpha">Color Alpha</a> and <a href="SkColor_Reference#RGB">Color RGB</a>, one drawing color |
Cary Clark5081eed2018-01-22 07:55:48 -0500207| <a href="#SkPaint_setColorFilter">setColorFilter</a> | sets <a href="undocumented#Color_Filter">Color Filter</a>, alters color |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500208| <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 -0500209| <a href="#SkPaint_setDither">setDither</a> | sets or clears <a href="#Dither">Dither</a> |
210| <a href="#SkPaint_setDrawLooper">setDrawLooper</a> | sets <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500211| <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 -0500212| <a href="#SkPaint_setFakeBoldText">setFakeBoldText</a> | sets or clears <a href="#Fake_Bold">Fake Bold</a> |
213| <a href="#SkPaint_setFilterQuality">setFilterQuality</a> | sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level |
214| <a href="#SkPaint_setFlags">setFlags</a> | sets multiple <a href="#SkPaint_Flags">Flags</a> in a bit field |
215| <a href="#SkPaint_setHinting">setHinting</a> | sets <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level |
216| <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 -0500217| <a href="#SkPaint_setLCDRenderText">setLCDRenderText</a> | sets or clears <a href="#LCD_Text">LCD Text</a> |
Cary Clark08895c42018-02-01 09:37:32 -0500218| <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 -0500219| <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> |
220| <a href="#SkPaint_setPathEffect">setPathEffect</a> | sets <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
221| <a href="#SkPaint_setShader">setShader</a> | sets <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
222| <a href="#SkPaint_setStrokeCap">setStrokeCap</a> | sets <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends |
223| <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a> | sets <a href="#SkPaint_Join">Join</a>, geometry on path corners |
224| <a href="#SkPaint_setStrokeMiter">setStrokeMiter</a> | sets <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners |
225| <a href="#SkPaint_setStrokeWidth">setStrokeWidth</a> | sets thickness of the stroke |
226| <a href="#SkPaint_setStyle">setStyle</a> | sets <a href="#SkPaint_Style">Style</a>: stroke, fill, or both |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500227| <a href="#SkPaint_setSubpixelText">setSubpixelText</a> | sets or clears <a href="#Subpixel_Text">Subpixel Text</a> |
Cary Clark5081eed2018-01-22 07:55:48 -0500228| <a href="#SkPaint_setTextAlign">setTextAlign</a> | sets <a href="#SkPaint_Align">Align</a>: left, center, or right |
229| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | sets character or glyph encoded size |
230| <a href="#SkPaint_setTextScaleX">setTextScaleX</a> | sets the text horizontal scale; condensed text |
231| <a href="#SkPaint_setTextSize">setTextSize</a> | sets text size in points |
232| <a href="#SkPaint_setTextSkewX">setTextSkewX</a> | sets the text horizontal skew; oblique text |
233| <a href="#SkPaint_setTypeface">setTypeface</a> | sets <a href="undocumented#Typeface">Typeface</a>, font description |
234| <a href="#SkPaint_setVerticalText">setVerticalText</a> | sets or clears <a href="#Vertical_Text">Vertical Text</a> |
235| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
236| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
Cary Clark12799e12017-07-28 15:18:29 -0400237
Cary Clark08895c42018-02-01 09:37:32 -0500238## <a name="Initializers"></a> Initializers
Cary Clark12799e12017-07-28 15:18:29 -0400239
Cary Clark493df1f2017-08-25 13:14:33 -0400240<a name="SkPaint_empty_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400241## SkPaint
242
Cary Clarka560c472017-11-27 10:44:06 -0500243<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400244SkPaint()
245</pre>
246
Cary Clark8cc16c72017-08-25 11:51:49 -0400247Constructs <a href="#Paint">Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400248
249| attribute | default value |
250| --- | --- |
Cary Clarka560c472017-11-27 10:44:06 -0500251| Anti-alias | false |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500252| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400253| <a href="SkColor_Reference#Color">Color</a> | <a href="SkColor_Reference#SK_ColorBLACK">SK ColorBLACK</a> |
254| <a href="SkColor_Reference#Alpha">Color Alpha</a> | 255 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400255| <a href="undocumented#Color_Filter">Color Filter</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400256| <a href="#Dither">Dither</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400257| <a href="undocumented#Draw_Looper">Draw Looper</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400258| <a href="#Fake_Bold">Fake Bold</a> | false |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500259| <a href="undocumented#Filter_Quality">Filter Quality</a> | <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a> |
260| <a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400261| <a href="#Automatic_Hinting">Automatic Hinting</a> | false |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500262| <a href="#Full_Hinting_Spacing">Full Hinting Spacing</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400263| <a href="#SkPaint_Hinting">Hinting</a> | <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400264| <a href="undocumented#Image_Filter">Image Filter</a> | nullptr |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500265| <a href="#LCD_Text">LCD Text</a> | false |
266| <a href="#Linear_Text">Linear Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400267| <a href="#Miter_Limit">Miter Limit</a> | 4 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400268| <a href="undocumented#Mask_Filter">Mask Filter</a> | nullptr |
269| <a href="undocumented#Path_Effect">Path Effect</a> | nullptr |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400270| <a href="undocumented#Shader">Shader</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400271| <a href="#SkPaint_Style">Style</a> | <a href="#SkPaint_kFill_Style">kFill Style</a> |
272| <a href="#Text_Align">Text Align</a> | <a href="#SkPaint_kLeft_Align">kLeft Align</a> |
273| <a href="#Text_Encoding">Text Encoding</a> | <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> |
274| <a href="#Text_Scale_X">Text Scale X</a> | 1 |
275| <a href="#Text_Size">Text Size</a> | 12 |
276| <a href="#Text_Skew_X">Text Skew X</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400277| <a href="undocumented#Typeface">Typeface</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400278| <a href="#Stroke_Cap">Stroke Cap</a> | <a href="#SkPaint_kButt_Cap">kButt Cap</a> |
279| <a href="#Stroke_Join">Stroke Join</a> | <a href="#SkPaint_kMiter_Join">kMiter Join</a> |
280| <a href="#Stroke_Width">Stroke Width</a> | 0 |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500281| <a href="#Subpixel_Text">Subpixel Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400282| <a href="#Vertical_Text">Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400283
284The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500285paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400286build system.
287
288### Return Value
289
Cary Clark8cc16c72017-08-25 11:51:49 -0400290default initialized <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400291
292### Example
293
294<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
295
296---
297
Cary Clark73fa9722017-08-29 17:36:51 -0400298<a name="SkPaint_copy_const_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400299## SkPaint
300
Cary Clarka560c472017-11-27 10:44:06 -0500301<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400302SkPaint(const SkPaint& paint)
303</pre>
304
Cary Clark8cc16c72017-08-25 11:51:49 -0400305Makes 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 +0000306<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 -0400307between 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 -0400308their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400309
Update Docs949cfd42018-01-22 05:50:26 +0000310The 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 -0400311<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 -0400312This 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 -0400313
314### Parameters
315
Cary Clark73fa9722017-08-29 17:36:51 -0400316<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 -0400317original to copy</td>
318 </tr>
319</table>
320
321### Return Value
322
Cary Clark73fa9722017-08-29 17:36:51 -0400323shallow copy of <a href="#SkPaint_copy_const_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400324
325### Example
326
327<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
328
329#### Example Output
330
331~~~~
332SK_ColorRED == paint1.getColor()
333SK_ColorBLUE == paint2.getColor()
334~~~~
335
336</fiddle-embed></div>
337
338---
339
Cary Clark73fa9722017-08-29 17:36:51 -0400340<a name="SkPaint_move_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400341## SkPaint
342
Cary Clarka560c472017-11-27 10:44:06 -0500343<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400344SkPaint(SkPaint&& paint)
345</pre>
346
Cary Clarkd0530ba2017-09-14 11:25:39 -0400347Implements a move constructor to avoid increasing the reference counts
Cary Clark73fa9722017-08-29 17:36:51 -0400348of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400349
Cary Clark73fa9722017-08-29 17:36:51 -0400350After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400351
352### Parameters
353
Cary Clark73fa9722017-08-29 17:36:51 -0400354<table> <tr> <td><a name="SkPaint_move_SkPaint_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400355original to move</td>
356 </tr>
357</table>
358
359### Return Value
360
Cary Clark73fa9722017-08-29 17:36:51 -0400361content of <a href="#SkPaint_move_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400362
363### Example
364
365<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
366
367#### Example Output
368
369~~~~
370path effect unique: true
371~~~~
372
373</fiddle-embed></div>
374
375---
376
Cary Clark493df1f2017-08-25 13:14:33 -0400377<a name="SkPaint_reset"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400378## reset
379
Cary Clarka560c472017-11-27 10:44:06 -0500380<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400381void reset()
382</pre>
383
Cary Clarkbc5697d2017-10-04 14:31:33 -0400384Sets all <a href="#Paint">Paint</a> contents to their initial values. This is equivalent to replacing
385<a href="#Paint">Paint</a> with the result of <a href="#SkPaint_empty_constructor">SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400386
387### Example
388
389<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
390
391#### Example Output
392
393~~~~
394paint1 == paint2
395~~~~
396
397</fiddle-embed></div>
398
399---
400
Cary Clark493df1f2017-08-25 13:14:33 -0400401<a name="SkPaint_destructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400402## ~SkPaint
403
Cary Clarka560c472017-11-27 10:44:06 -0500404<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400405~SkPaint()
406</pre>
407
Cary Clark8cc16c72017-08-25 11:51:49 -0400408Decreases <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 +0000409<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 -0400410objects containing <a href="undocumented#Reference_Count">Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400411
412---
413
Cary Clark08895c42018-02-01 09:37:32 -0500414## <a name="Management"></a> Management
Cary Clark12799e12017-07-28 15:18:29 -0400415
Cary Clarka560c472017-11-27 10:44:06 -0500416<a name="SkPaint_copy_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400417## operator=
418
Cary Clarka560c472017-11-27 10:44:06 -0500419<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400420SkPaint& operator=(const SkPaint& paint)
421</pre>
422
Cary Clark8cc16c72017-08-25 11:51:49 -0400423Makes 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 +0000424<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 -0500425between 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 -0400426prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clarka560c472017-11-27 10:44:06 -0500427resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_operator_paint">paint</a>
428are increased by one. <a href="#SkPaint_copy_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400429
430### Parameters
431
Cary Clarka560c472017-11-27 10:44:06 -0500432<table> <tr> <td><a name="SkPaint_copy_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400433original to copy</td>
434 </tr>
435</table>
436
437### Return Value
438
Cary Clarka560c472017-11-27 10:44:06 -0500439content of <a href="#SkPaint_copy_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400440
441### Example
442
443<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
444
445#### Example Output
446
447~~~~
448SK_ColorRED == paint1.getColor()
449SK_ColorRED == paint2.getColor()
450~~~~
451
452</fiddle-embed></div>
453
454---
455
Cary Clarka560c472017-11-27 10:44:06 -0500456<a name="SkPaint_move_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400457## operator=
458
Cary Clarka560c472017-11-27 10:44:06 -0500459<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400460SkPaint& operator=(SkPaint&& paint)
461</pre>
462
Cary Clarka560c472017-11-27 10:44:06 -0500463Moves the <a href="#SkPaint_move_operator_paint">paint</a> to avoid increasing the reference counts
464of 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 -0400465prior destination are decreased by one; those objects are deleted if the resulting count
466is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400467
Cary Clarka560c472017-11-27 10:44:06 -0500468After the call, <a href="#SkPaint_move_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400469
470### Parameters
471
Cary Clarka560c472017-11-27 10:44:06 -0500472<table> <tr> <td><a name="SkPaint_move_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400473original to move</td>
474 </tr>
475</table>
476
477### Return Value
478
Cary Clarka560c472017-11-27 10:44:06 -0500479content of <a href="#SkPaint_move_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400480
481### Example
482
483<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
484
485#### Example Output
486
487~~~~
488SK_ColorRED == paint2.getColor()
489~~~~
490
491</fiddle-embed></div>
492
493---
494
Cary Clark493df1f2017-08-25 13:14:33 -0400495<a name="SkPaint_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400496## operator==
497
Cary Clarka560c472017-11-27 10:44:06 -0500498<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400499bool operator==(const SkPaint& a, const SkPaint& b)
500</pre>
501
Cary Clark8cc16c72017-08-25 11:51:49 -0400502Compares <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 +0000503if <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 -0400504<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 -0400505
506### Parameters
507
Cary Clark8cc16c72017-08-25 11:51:49 -0400508<table> <tr> <td><a name="SkPaint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
509<a href="#Paint">Paint</a> to compare</td>
510 </tr> <tr> <td><a name="SkPaint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
511<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400512 </tr>
513</table>
514
515### Return Value
516
Cary Clark8cc16c72017-08-25 11:51:49 -0400517true if <a href="#Paint">Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400518
519### Example
520
521<div><fiddle-embed name="7481a948e34672720337a631830586dd">
522
523#### Example Output
524
525~~~~
526paint1 == paint2
527paint1 != paint2
528~~~~
529
530</fiddle-embed></div>
531
Cary Clark06c20f32018-03-20 15:53:27 -0400532### See Also
533
534<a href="#SkPaint_notequal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a>
535
Cary Clark12799e12017-07-28 15:18:29 -0400536---
537
Cary Clarka560c472017-11-27 10:44:06 -0500538<a name="SkPaint_notequal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400539## operator!=
540
Cary Clarka560c472017-11-27 10:44:06 -0500541<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400542bool operator!=(const SkPaint& a, const SkPaint& b)
543</pre>
544
Cary Clarka560c472017-11-27 10:44:06 -0500545Compares <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 +0000546if <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 -0400547<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 -0400548
549### Parameters
550
Cary Clarka560c472017-11-27 10:44:06 -0500551<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400552<a href="#Paint">Paint</a> to compare</td>
Cary Clarka560c472017-11-27 10:44:06 -0500553 </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400554<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400555 </tr>
556</table>
557
558### Return Value
559
Cary Clark8cc16c72017-08-25 11:51:49 -0400560true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400561
562### Example
563
564<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
565
566#### Example Output
567
568~~~~
569paint1 == paint2
570paint1 == paint2
571~~~~
572
573</fiddle-embed></div>
574
Cary Clark06c20f32018-03-20 15:53:27 -0400575### See Also
576
577<a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a>
578
Cary Clark12799e12017-07-28 15:18:29 -0400579---
580
Cary Clark493df1f2017-08-25 13:14:33 -0400581<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400582## getHash
583
Cary Clarka560c472017-11-27 10:44:06 -0500584<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400585uint32_t getHash() const
586</pre>
587
Cary Clark8cc16c72017-08-25 11:51:49 -0400588Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400589Identical hashes guarantee that the paints are
590equivalent, but differing hashes do not guarantee that the paints have differing
591contents.
592
Cary Clark8cc16c72017-08-25 11:51:49 -0400593If <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 -0400594their hashes are also equal.
595
596The hash returned is platform and implementation specific.
597
598### Return Value
599
600a shallow hash
601
602### Example
603
604<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
605
606#### Example Output
607
608~~~~
609paint1 == paint2
610paint1.getHash() == paint2.getHash()
611~~~~
612
613</fiddle-embed></div>
614
615---
616
Cary Clark08895c42018-02-01 09:37:32 -0500617## <a name="Hinting"></a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400618
Cary Clark8cc16c72017-08-25 11:51:49 -0400619## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400620
Cary Clarka560c472017-11-27 10:44:06 -0500621<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -0400622 enum <a href="#Hinting">Hinting</a> {
623 <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
624 <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
625 <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
626 <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
627 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500628</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400629
Cary Clark8cc16c72017-08-25 11:51:49 -0400630<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
631look 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 -0400632muted effect or no effect at all depending on the platform.
633
Cary Clark7cfcbca2018-01-04 16:11:51 -0500634The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark2a8c48b2018-02-15 17:31:24 -0500635as the <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400636
637### Constants
638
639<table>
640 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400641 <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 -0500642With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
643bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400644outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -0500645to 26.6 fractional pixels.
646</td>
Cary Clark12799e12017-07-28 15:18:29 -0400647 </tr>
648 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400649 <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 -0500650With FreeType, this is equivalent in spirit to the
651FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400652lighter hinting algorithm for non-monochrome modes.
Cary Clark1a8d7622018-03-05 13:26:16 -0500653Generated <a href="undocumented#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.
654</td>
Cary Clark12799e12017-07-28 15:18:29 -0400655 </tr>
656 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400657 <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 -0500658With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
659choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -0500660gray-level rendering.
661</td>
Cary Clark12799e12017-07-28 15:18:29 -0400662 </tr>
663 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -0500664 <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
665FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
666FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
667horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -0500668variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
669</td>
Cary Clark12799e12017-07-28 15:18:29 -0400670 </tr>
671</table>
672
Cary Clark7cfcbca2018-01-04 16:11:51 -0500673On Windows with DirectWrite, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400674
Cary Clark8cc16c72017-08-25 11:51:49 -0400675<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400676Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400677
678
679
Cary Clark493df1f2017-08-25 13:14:33 -0400680<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400681## getHinting
682
Cary Clarka560c472017-11-27 10:44:06 -0500683<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400684Hinting getHinting() const
685</pre>
686
687Returns level of glyph outline adjustment.
688
689### Return Value
690
Cary Clark8cc16c72017-08-25 11:51:49 -0400691one 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 -0400692
693### Example
694
695<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
696
697#### Example Output
698
699~~~~
700SkPaint::kNormal_Hinting == paint.getHinting()
701~~~~
702
703</fiddle-embed></div>
704
705---
706
Cary Clark493df1f2017-08-25 13:14:33 -0400707<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400708## setHinting
709
Cary Clarka560c472017-11-27 10:44:06 -0500710<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400711void setHinting(Hinting hintingLevel)
712</pre>
713
714Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400715Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400716
Cary Clark8cc16c72017-08-25 11:51:49 -0400717| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400718| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400719| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400720| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
721| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
722| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400723
724### Parameters
725
Cary Clark8cc16c72017-08-25 11:51:49 -0400726<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
727one 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 -0400728 </tr>
729</table>
730
731### Example
732
733<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
734
735#### Example Output
736
737~~~~
738paint1 == paint2
739~~~~
740
741</fiddle-embed></div>
742
743---
744
Cary Clark08895c42018-02-01 09:37:32 -0500745## <a name="Flags"></a> Flags
Cary Clark12799e12017-07-28 15:18:29 -0400746
Cary Clark8cc16c72017-08-25 11:51:49 -0400747## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400748
Cary Clarka560c472017-11-27 10:44:06 -0500749<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -0400750 enum <a href="#Flags">Flags</a> {
751 <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
752 <a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
753 <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
754 <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
755 <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
756 <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
757 <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
758 <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
759 <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
760 <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -0400761
Cary Clark186d08f2018-04-03 08:43:27 -0400762 <a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
763 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500764
Cary Clark12799e12017-07-28 15:18:29 -0400765</pre>
766
Cary Clark8cc16c72017-08-25 11:51:49 -0400767The bit values stored in <a href="#Flags">Flags</a>.
768The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400769with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400770All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400771multiple settings at once.
772
773### Constants
774
775<table>
776 <tr>
Cary Clarka560c472017-11-27 10:44:06 -0500777 <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 -0400778 </tr>
779 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400780 <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 -0400781 </tr>
782 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400783 <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 -0400784 </tr>
785 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500786 <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 -0400787 </tr>
788 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500789 <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 -0400790 </tr>
791 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500792 <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 -0400793 </tr>
794 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500795 <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 -0400796 </tr>
797 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500798 <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 -0400799 </tr>
800 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400801 <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 -0400802 </tr>
803 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400804 <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 -0400805 </tr>
806 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400807 <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 -0400808 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400809<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400810
Cary Clark06c20f32018-03-20 15:53:27 -0400811
Cary Clark12799e12017-07-28 15:18:29 -0400812
Cary Clark8cc16c72017-08-25 11:51:49 -0400813## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400814
Cary Clark4855f782018-02-06 09:41:53 -0500815soonOnly valid for Android framework.
816
Cary Clarka560c472017-11-27 10:44:06 -0500817<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -0400818 enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
819 <a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
820 <a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
821 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500822</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400823
824### Constants
825
826<table>
827 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500828 <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 -0400829 </tr>
830 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500831 <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 -0400832 </tr>
Cary Clark4855f782018-02-06 09:41:53 -0500833
Cary Clark06c20f32018-03-20 15:53:27 -0400834
Cary Clark12799e12017-07-28 15:18:29 -0400835
Cary Clark493df1f2017-08-25 13:14:33 -0400836<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400837## getFlags
838
Cary Clarka560c472017-11-27 10:44:06 -0500839<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400840uint32_t getFlags() const
841</pre>
842
Cary Clark8cc16c72017-08-25 11:51:49 -0400843Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
844bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400845
846### Return Value
847
Cary Clark8cc16c72017-08-25 11:51:49 -0400848zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400849
850### Example
851
852<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
853
854#### Example Output
855
856~~~~
857(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
858~~~~
859
860</fiddle-embed></div>
861
862---
863
Cary Clark493df1f2017-08-25 13:14:33 -0400864<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400865## setFlags
866
Cary Clarka560c472017-11-27 10:44:06 -0500867<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400868void setFlags(uint32_t flags)
869</pre>
870
Cary Clark8cc16c72017-08-25 11:51:49 -0400871Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
872All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400873
874### Parameters
875
Cary Clark8cc16c72017-08-25 11:51:49 -0400876<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
877union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400878 </tr>
879</table>
880
881### Example
882
883<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
884
885#### Example Output
886
887~~~~
888paint.isAntiAlias()
889paint.isDither()
890~~~~
891
892</fiddle-embed></div>
893
894---
895
Cary Clark08895c42018-02-01 09:37:32 -0500896## <a name="Anti-alias"></a> Anti-alias
897
Cary Clarka560c472017-11-27 10:44:06 -0500898Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400899If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400900If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, pixels are drawn with <a href="SkColor_Reference#Alpha">Color Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400901
Cary Clark2a8c48b2018-02-15 17:31:24 -0500902The rule for <a href="undocumented#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400903passing through the pixel center may, but is not required to, draw the pixel.
904
Cary Clark2a8c48b2018-02-15 17:31:24 -0500905<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 -0400906active <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 -0400907
Cary Clark7cfcbca2018-01-04 16:11:51 -0500908A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500909<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400910<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400911
Cary Clarka560c472017-11-27 10:44:06 -0500912The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400913
Cary Clarka560c472017-11-27 10:44:06 -0500914Anti-alias is disabled by default.
915Anti-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 -0400916at compile time.
917
918### Example
919
920<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
921A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400922The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clark1a8d7622018-03-05 13:26:16 -0500923<a href="undocumented#Alias">Aliasing</a> easier to see.
924</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400925
Cary Clark493df1f2017-08-25 13:14:33 -0400926<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400927## isAntiAlias
928
Cary Clarka560c472017-11-27 10:44:06 -0500929<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400930bool isAntiAlias() const
931</pre>
932
Cary Clark4c06f5e2017-08-04 12:48:24 -0400933If 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 -0400934
Cary Clark8cc16c72017-08-25 11:51:49 -0400935Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400936
937### Return Value
938
Cary Clark8cc16c72017-08-25 11:51:49 -0400939<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400940
941### Example
942
943<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
944
945#### Example Output
946
947~~~~
948paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
949paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
950~~~~
951
952</fiddle-embed></div>
953
954---
955
Cary Clark493df1f2017-08-25 13:14:33 -0400956<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400957## setAntiAlias
958
Cary Clarka560c472017-11-27 10:44:06 -0500959<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400960void setAntiAlias(bool aa)
961</pre>
962
Cary Clark4c06f5e2017-08-04 12:48:24 -0400963Requests, 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 -0400964partial transparency.
965
Cary Clark8cc16c72017-08-25 11:51:49 -0400966Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
967Clears <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 -0400968
969### Parameters
970
Cary Clark8cc16c72017-08-25 11:51:49 -0400971<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
972setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400973 </tr>
974</table>
975
976### Example
977
978<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
979
980#### Example Output
981
982~~~~
983paint1 == paint2
984~~~~
985
986</fiddle-embed></div>
987
988---
989
Cary Clark08895c42018-02-01 09:37:32 -0500990## <a name="Dither"></a> Dither
991
Cary Clark7cfcbca2018-01-04 16:11:51 -0500992<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -0400993This can help to smooth color transitions and reducing banding in gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -0500994Dithering lessens visible banding from <a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
995and <a href="SkImageInfo_Reference#kRGBA_8888_SkColorType">kRGBA_8888_SkColorType</a> gradients,
996and 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 -0400997
998Dithering is always enabled for linear gradients drawing into
Cary Clark2a8c48b2018-02-15 17:31:24 -0500999<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>.
1000<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
1001<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 -04001002
Cary Clark8cc16c72017-08-25 11:51:49 -04001003<a href="#Dither">Dither</a> is disabled by default.
1004<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 -04001005at compile time.
1006
Cary Clark186d08f2018-04-03 08:43:27 -04001007Some platform implementations may ignore dithering. SetSK_IGNORE_GPU_DITHERto ignore <a href="#Dither">Dither</a> on <a href="undocumented#GPU_Surface">GPU Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001008
1009### Example
1010
1011<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 -05001012alternating nearby colors from pixel to pixel.
1013</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001014
1015### Example
1016
1017<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001018Drawing the gradient repeatedly with <a href="undocumented#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001019dither, making it easier to see.
1020</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001021
Cary Clark493df1f2017-08-25 13:14:33 -04001022<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001023## isDither
1024
Cary Clarka560c472017-11-27 10:44:06 -05001025<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001026bool isDither() const
1027</pre>
1028
1029If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001030Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001031
1032### Return Value
1033
Cary Clark8cc16c72017-08-25 11:51:49 -04001034<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001035
1036### Example
1037
1038<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1039
1040#### Example Output
1041
1042~~~~
1043paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1044paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1045~~~~
1046
1047</fiddle-embed></div>
1048
1049---
1050
Cary Clark493df1f2017-08-25 13:14:33 -04001051<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001052## setDither
1053
Cary Clarka560c472017-11-27 10:44:06 -05001054<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001055void setDither(bool dither)
1056</pre>
1057
1058Requests, but does not require, to distribute color error.
1059
Cary Clark8cc16c72017-08-25 11:51:49 -04001060Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1061Clears <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 -04001062
1063### Parameters
1064
Cary Clark8cc16c72017-08-25 11:51:49 -04001065<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1066setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001067 </tr>
1068</table>
1069
1070### Example
1071
1072<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1073
1074#### Example Output
1075
1076~~~~
1077paint1 == paint2
1078~~~~
1079
1080</fiddle-embed></div>
1081
1082### See Also
1083
Cary Clark2a8c48b2018-02-15 17:31:24 -05001084<a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001085
1086---
1087
1088### See Also
1089
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001090Gradient <a href="SkColor_Reference#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001091
Cary Clark08895c42018-02-01 09:37:32 -05001092## <a name="Device_Text"></a> Device Text
1093
Cary Clark2a8c48b2018-02-15 17:31:24 -05001094<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 -04001095
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001096When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="SkColor_Reference#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001097create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001098on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001099<a href="#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001100the color components as <a href="SkColor_Reference#RGB">Color RGB</a> or <a href="SkColor_Reference#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001101
Cary Clark7cfcbca2018-01-04 16:11:51 -05001102<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 -04001103As the opaqueness
1104of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1105
1106Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001107<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 -05001108<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 -04001109<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 -04001110
1111### Example
1112
Cary Clark2a8c48b2018-02-15 17:31:24 -05001113<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>.
1114When <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 -05001115When <a href="#Subpixel_Text">Subpixel Text</a> is enabled, the comma <a href="undocumented#Glyph">Glyphs</a> are unique, but appear evenly spaced.
1116</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001117
1118## <a name="Linear_Text"></a> Linear Text
1119
Cary Clark2a8c48b2018-02-15 17:31:24 -05001120<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 -04001121If <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 -04001122If <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 -04001123
Cary Clark493df1f2017-08-25 13:14:33 -04001124<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001125## isLinearText
1126
Cary Clarka560c472017-11-27 10:44:06 -05001127<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001128bool isLinearText() const
1129</pre>
1130
Cary Clark4c06f5e2017-08-04 12:48:24 -04001131If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001132
Cary Clark8cc16c72017-08-25 11:51:49 -04001133Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001134
1135### Return Value
1136
Cary Clark8cc16c72017-08-25 11:51:49 -04001137<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001138
1139### Example
1140
1141<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1142
1143### See Also
1144
Cary Clark8cc16c72017-08-25 11:51:49 -04001145<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001146
1147---
1148
Cary Clark493df1f2017-08-25 13:14:33 -04001149<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001150## setLinearText
1151
Cary Clarka560c472017-11-27 10:44:06 -05001152<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001153void setLinearText(bool linearText)
1154</pre>
1155
Cary Clark4c06f5e2017-08-04 12:48:24 -04001156If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001157By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001158
Cary Clark8cc16c72017-08-25 11:51:49 -04001159Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1160Clears <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 -04001161
1162### Parameters
1163
Cary Clark8cc16c72017-08-25 11:51:49 -04001164<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1165setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001166 </tr>
1167</table>
1168
1169### Example
1170
1171<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1172
1173### See Also
1174
Cary Clark8cc16c72017-08-25 11:51:49 -04001175<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001176
1177---
1178
1179## <a name="Subpixel_Text"></a> Subpixel Text
1180
Cary Clark7cfcbca2018-01-04 16:11:51 -05001181<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 -04001182As the opaqueness
1183of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1184
Cary Clark493df1f2017-08-25 13:14:33 -04001185<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001186## isSubpixelText
1187
Cary Clarka560c472017-11-27 10:44:06 -05001188<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001189bool isSubpixelText() const
1190</pre>
1191
Cary Clark2a8c48b2018-02-15 17:31:24 -05001192If 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 -04001193
Cary Clark8cc16c72017-08-25 11:51:49 -04001194Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001195
1196### Return Value
1197
Cary Clark8cc16c72017-08-25 11:51:49 -04001198<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001199
1200### Example
1201
1202<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1203
1204#### Example Output
1205
1206~~~~
1207paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1208paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1209~~~~
1210
1211</fiddle-embed></div>
1212
1213---
1214
Cary Clark493df1f2017-08-25 13:14:33 -04001215<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001216## setSubpixelText
1217
Cary Clarka560c472017-11-27 10:44:06 -05001218<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001219void setSubpixelText(bool subpixelText)
1220</pre>
1221
Cary Clark2a8c48b2018-02-15 17:31:24 -05001222Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001223
Cary Clark8cc16c72017-08-25 11:51:49 -04001224Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1225Clears <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 -04001226
1227### Parameters
1228
Cary Clark8cc16c72017-08-25 11:51:49 -04001229<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1230setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001231 </tr>
1232</table>
1233
1234### Example
1235
1236<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1237
1238#### Example Output
1239
1240~~~~
1241paint1 == paint2
1242~~~~
1243
1244</fiddle-embed></div>
1245
1246---
1247
1248## <a name="LCD_Text"></a> LCD Text
1249
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001250When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="SkColor_Reference#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001251create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001252on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001253<a href="#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001254the color components as <a href="SkColor_Reference#RGB">Color RGB</a> or <a href="SkColor_Reference#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001255
Cary Clark493df1f2017-08-25 13:14:33 -04001256<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001257## isLCDRenderText
1258
Cary Clarka560c472017-11-27 10:44:06 -05001259<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001260bool isLCDRenderText() const
1261</pre>
1262
Cary Clark2a8c48b2018-02-15 17:31:24 -05001263If true, <a href="undocumented#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001264
Cary Clark8cc16c72017-08-25 11:51:49 -04001265Returns 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 -04001266
1267### Return Value
1268
Cary Clark8cc16c72017-08-25 11:51:49 -04001269<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001270
1271### Example
1272
1273<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1274
1275#### Example Output
1276
1277~~~~
1278paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1279paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1280~~~~
1281
1282</fiddle-embed></div>
1283
1284---
1285
Cary Clark493df1f2017-08-25 13:14:33 -04001286<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001287## setLCDRenderText
1288
Cary Clarka560c472017-11-27 10:44:06 -05001289<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001290void setLCDRenderText(bool lcdText)
1291</pre>
1292
Cary Clark2a8c48b2018-02-15 17:31:24 -05001293Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001294
Cary Clark8cc16c72017-08-25 11:51:49 -04001295Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1296Clears <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 -04001297
1298### Parameters
1299
Cary Clark8cc16c72017-08-25 11:51:49 -04001300<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1301setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001302 </tr>
1303</table>
1304
1305### Example
1306
1307<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1308
1309#### Example Output
1310
1311~~~~
1312paint1 == paint2
1313~~~~
1314
1315</fiddle-embed></div>
1316
1317---
1318
Cary Clark08895c42018-02-01 09:37:32 -05001319## <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
1320
Cary Clark2a8c48b2018-02-15 17:31:24 -05001321<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 -04001322<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 -05001323in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001324
Cary Clark7cfcbca2018-01-04 16:11:51 -05001325FreeType 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 -04001326the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001327Windows may select the bitmap glyph but is not required to do so.
1328<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001329
Cary Clark2a8c48b2018-02-15 17:31:24 -05001330<a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1331<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 -04001332<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001333
1334### Example
1335
Cary Clarka560c472017-11-27 10:44:06 -05001336<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001337<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001338 includes an embedded bitmap Glyph at odd font sizes. This example works
1339 on platforms that use FreeType as their Font_Engine.
1340 Windows may, but is not required to, return a bitmap glyph if
1341 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1342 bitmap.allocN32Pixels(30, 15);
1343 bitmap.eraseColor(0);
1344 SkCanvas offscreen(bitmap);
1345 SkPaint paint;
1346 paint.setAntiAlias(true);
1347 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001348 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001349 for (bool embedded : { false, true}) {
1350 paint.setEmbeddedBitmapText(embedded);
1351 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1352 }
1353 canvas->drawBitmap(bitmap, 0, 0);
1354 canvas->scale(10, 10);
1355 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001356
Cary Clarka560c472017-11-27 10:44:06 -05001357</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001358
Cary Clark493df1f2017-08-25 13:14:33 -04001359<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001360## isEmbeddedBitmapText
1361
Cary Clarka560c472017-11-27 10:44:06 -05001362<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001363bool isEmbeddedBitmapText() const
1364</pre>
1365
Cary Clark2a8c48b2018-02-15 17:31:24 -05001366If 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 -04001367
Cary Clark8cc16c72017-08-25 11:51:49 -04001368Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001369
1370### Return Value
1371
Cary Clark8cc16c72017-08-25 11:51:49 -04001372<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001373
1374### Example
1375
1376<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1377
1378#### Example Output
1379
1380~~~~
1381paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1382paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1383~~~~
1384
1385</fiddle-embed></div>
1386
1387---
1388
Cary Clark493df1f2017-08-25 13:14:33 -04001389<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001390## setEmbeddedBitmapText
1391
Cary Clarka560c472017-11-27 10:44:06 -05001392<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001393void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1394</pre>
1395
1396Requests, but does not require, to use bitmaps in fonts instead of outlines.
1397
Cary Clark8cc16c72017-08-25 11:51:49 -04001398Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1399Clears <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 -04001400
1401### Parameters
1402
Cary Clark8cc16c72017-08-25 11:51:49 -04001403<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1404setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001405 </tr>
1406</table>
1407
1408### Example
1409
1410<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1411
1412#### Example Output
1413
1414~~~~
1415paint1 == paint2
1416~~~~
1417
1418</fiddle-embed></div>
1419
1420---
1421
Cary Clark08895c42018-02-01 09:37:32 -05001422## <a name="Automatic_Hinting"></a> Automatic Hinting
1423
Cary Clark8cc16c72017-08-25 11:51:49 -04001424If <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 -05001425instructs 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 -04001426<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
1427<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001428
Cary Clark7cfcbca2018-01-04 16:11:51 -05001429<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 -04001430
Cary Clark493df1f2017-08-25 13:14:33 -04001431<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001432## isAutohinted
1433
Cary Clarka560c472017-11-27 10:44:06 -05001434<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001435bool isAutohinted() const
1436</pre>
1437
Cary Clark8cc16c72017-08-25 11:51:49 -04001438If 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 -05001439platform 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 -05001440<a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001441
Cary Clark8cc16c72017-08-25 11:51:49 -04001442Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001443
1444### Return Value
1445
Cary Clark8cc16c72017-08-25 11:51:49 -04001446<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001447
1448### Example
1449
1450<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1451
1452#### Example Output
1453
1454~~~~
1455paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1456paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1457~~~~
1458
1459</fiddle-embed></div>
1460
1461### See Also
1462
Cary Clark8cc16c72017-08-25 11:51:49 -04001463<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001464
1465---
1466
Cary Clark493df1f2017-08-25 13:14:33 -04001467<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001468## setAutohinted
1469
Cary Clarka560c472017-11-27 10:44:06 -05001470<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001471void setAutohinted(bool useAutohinter)
1472</pre>
1473
Cary Clark8cc16c72017-08-25 11:51:49 -04001474If <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 -05001475instruct 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 -04001476<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
1477<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001478
Cary Clark7cfcbca2018-01-04 16:11:51 -05001479Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001480
Cary Clark8cc16c72017-08-25 11:51:49 -04001481Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1482Clears <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 -04001483
1484### Parameters
1485
Cary Clark8cc16c72017-08-25 11:51:49 -04001486<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1487setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001488 </tr>
1489</table>
1490
1491### Example
1492
1493<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1494
1495### See Also
1496
Cary Clark8cc16c72017-08-25 11:51:49 -04001497<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001498
1499---
1500
Cary Clark08895c42018-02-01 09:37:32 -05001501## <a name="Vertical_Text"></a> Vertical Text
1502
Cary Clark4c06f5e2017-08-04 12:48:24 -04001503<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 -05001504using <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 -04001505is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
Cary Clark2a8c48b2018-02-15 17:31:24 -05001506<a href="undocumented#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001507
Cary Clark2a8c48b2018-02-15 17:31:24 -05001508Skia 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 -05001509font substitution,
1510textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1511a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001512into glyph series.
1513
Cary Clark8cc16c72017-08-25 11:51:49 -04001514<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 -04001515
Cary Clark8cc16c72017-08-25 11:51:49 -04001516<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1517<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 -04001518
Cary Clark8cc16c72017-08-25 11:51:49 -04001519<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1520<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1521<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001522
1523### Example
1524
1525<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1526
Cary Clark493df1f2017-08-25 13:14:33 -04001527<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001528## isVerticalText
1529
Cary Clarka560c472017-11-27 10:44:06 -05001530<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001531bool isVerticalText() const
1532</pre>
1533
Cary Clark2a8c48b2018-02-15 17:31:24 -05001534If true, <a href="undocumented#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001535
Cary Clark8cc16c72017-08-25 11:51:49 -04001536Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001537
1538### Return Value
1539
Cary Clark8cc16c72017-08-25 11:51:49 -04001540<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001541
1542### Example
1543
1544<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1545
1546#### Example Output
1547
1548~~~~
1549paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1550paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1551~~~~
1552
1553</fiddle-embed></div>
1554
1555---
1556
Cary Clark493df1f2017-08-25 13:14:33 -04001557<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001558## setVerticalText
1559
Cary Clarka560c472017-11-27 10:44:06 -05001560<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001561void setVerticalText(bool verticalText)
1562</pre>
1563
1564If true, text advance positions the next glyph below the previous glyph instead of to the
1565right of previous glyph.
1566
Cary Clark8cc16c72017-08-25 11:51:49 -04001567Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1568Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001569
1570### Parameters
1571
Cary Clark8cc16c72017-08-25 11:51:49 -04001572<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1573setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001574 </tr>
1575</table>
1576
1577### Example
1578
1579<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1580
1581#### Example Output
1582
1583~~~~
1584paint1 == paint2
1585~~~~
1586
1587</fiddle-embed></div>
1588
1589---
1590
Cary Clark08895c42018-02-01 09:37:32 -05001591## <a name="Fake_Bold"></a> Fake Bold
1592
Cary Clark8cc16c72017-08-25 11:51:49 -04001593<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 -05001594is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001595bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001596
Cary Clark7cfcbca2018-01-04 16:11:51 -05001597Use <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 -04001598is not available.
1599
Cary Clark7cfcbca2018-01-04 16:11:51 -05001600A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark2a8c48b2018-02-15 17:31:24 -05001601the 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 -05001602by 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 -04001603
Cary Clark8cc16c72017-08-25 11:51:49 -04001604<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001605
1606### Example
1607
1608<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1609
Cary Clark493df1f2017-08-25 13:14:33 -04001610<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001611## isFakeBoldText
1612
Cary Clarka560c472017-11-27 10:44:06 -05001613<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001614bool isFakeBoldText() const
1615</pre>
1616
1617If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1618from outlines.
1619
Cary Clark8cc16c72017-08-25 11:51:49 -04001620Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001621
1622### Return Value
1623
Cary Clark8cc16c72017-08-25 11:51:49 -04001624<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001625
1626### Example
1627
1628<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1629
1630#### Example Output
1631
1632~~~~
1633paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1634paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1635~~~~
1636
1637</fiddle-embed></div>
1638
1639---
1640
Cary Clark493df1f2017-08-25 13:14:33 -04001641<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001642## setFakeBoldText
1643
Cary Clarka560c472017-11-27 10:44:06 -05001644<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001645void setFakeBoldText(bool fakeBoldText)
1646</pre>
1647
Cary Clarkce101242017-09-01 15:51:02 -04001648Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001649
Cary Clark8cc16c72017-08-25 11:51:49 -04001650Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1651Clears <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 -04001652
1653### Parameters
1654
Cary Clark8cc16c72017-08-25 11:51:49 -04001655<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1656setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001657 </tr>
1658</table>
1659
1660### Example
1661
1662<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1663
1664#### Example Output
1665
1666~~~~
1667paint1 == paint2
1668~~~~
1669
1670</fiddle-embed></div>
1671
1672---
1673
Cary Clark08895c42018-02-01 09:37:32 -05001674## <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
1675
Cary Clark2a8c48b2018-02-15 17:31:24 -05001676if <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 -05001677spacing 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 -05001678<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
1679FreeType as their <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001680
Cary Clark2a8c48b2018-02-15 17:31:24 -05001681<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 -05001682a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001683
Cary Clark493df1f2017-08-25 13:14:33 -04001684<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001685## isDevKernText
1686
Cary Clarka560c472017-11-27 10:44:06 -05001687<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001688bool isDevKernText() const
1689</pre>
1690
1691Returns if character spacing may be adjusted by the hinting difference.
1692
Cary Clark8cc16c72017-08-25 11:51:49 -04001693Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001694
1695### Return Value
1696
Cary Clark8cc16c72017-08-25 11:51:49 -04001697<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001698
1699### Example
1700
1701<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1702
1703---
1704
Cary Clark493df1f2017-08-25 13:14:33 -04001705<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001706## setDevKernText
1707
Cary Clarka560c472017-11-27 10:44:06 -05001708<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001709void setDevKernText(bool devKernText)
1710</pre>
1711
1712Requests, but does not require, to use hinting to adjust glyph spacing.
1713
Cary Clark8cc16c72017-08-25 11:51:49 -04001714Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1715Clears <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 -04001716
1717### Parameters
1718
Cary Clark8cc16c72017-08-25 11:51:49 -04001719<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1720setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001721 </tr>
1722</table>
1723
1724### Example
1725
1726<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1727
1728#### Example Output
1729
1730~~~~
1731paint1 == paint2
1732~~~~
1733
1734</fiddle-embed></div>
1735
1736---
1737
Cary Clark08895c42018-02-01 09:37:32 -05001738## <a name="Filter_Quality_Methods"></a> Filter Quality Methods
1739
Cary Clark4c06f5e2017-08-04 12:48:24 -04001740<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1741A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1742A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001743If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1744in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001745
Cary Clark8cc16c72017-08-25 11:51:49 -04001746<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 -04001747
1748<table> <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001749 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1750 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1751 <td><a href="SkCanvas_Reference#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1752 <td><a href="SkCanvas_Reference#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001753</table>
1754
Cary Clarka560c472017-11-27 10:44:06 -05001755and 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 -04001756
Cary Clark2a8c48b2018-02-15 17:31:24 -05001757<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 -04001758
1759### Example
1760
1761<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1762
Cary Clark493df1f2017-08-25 13:14:33 -04001763<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001764## getFilterQuality
1765
Cary Clarka560c472017-11-27 10:44:06 -05001766<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001767SkFilterQuality getFilterQuality() const
1768</pre>
1769
Cary Clark4c06f5e2017-08-04 12:48:24 -04001770Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001771draws faster; a higher setting looks better when the image is scaled.
1772
1773### Return Value
1774
Cary Clark2a8c48b2018-02-15 17:31:24 -05001775one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1776<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001777
1778### Example
1779
1780<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1781
1782#### Example Output
1783
1784~~~~
1785kNone_SkFilterQuality == paint.getFilterQuality()
1786~~~~
1787
1788</fiddle-embed></div>
1789
1790---
1791
Cary Clark493df1f2017-08-25 13:14:33 -04001792<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001793## setFilterQuality
1794
Cary Clarka560c472017-11-27 10:44:06 -05001795<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001796void setFilterQuality(SkFilterQuality quality)
1797</pre>
1798
Cary Clark4c06f5e2017-08-04 12:48:24 -04001799Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001800draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001801Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001802
1803### Parameters
1804
Cary Clark8cc16c72017-08-25 11:51:49 -04001805<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001806one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1807<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001808 </tr>
1809</table>
1810
1811### Example
1812
1813<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1814
1815#### Example Output
1816
1817~~~~
1818kHigh_SkFilterQuality == paint.getFilterQuality()
1819~~~~
1820
1821</fiddle-embed></div>
1822
1823### See Also
1824
Cary Clark4c06f5e2017-08-04 12:48:24 -04001825<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001826
1827---
1828
Cary Clark08895c42018-02-01 09:37:32 -05001829## <a name="Color_Methods"></a> Color Methods
Cary Clark12799e12017-07-28 15:18:29 -04001830
Cary Clarkab2621d2018-01-30 10:08:57 -05001831| name | description |
1832| --- | --- |
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001833| <a href="#SkPaint_getColor">getColor</a> | returns <a href="SkColor_Reference#Alpha">Color Alpha</a> and <a href="SkColor_Reference#RGB">Color RGB</a>, one drawing color |
1834| <a href="#SkPaint_setColor">setColor</a> | sets <a href="SkColor_Reference#Alpha">Color Alpha</a> and <a href="SkColor_Reference#RGB">Color RGB</a>, one drawing color |
Cary Clark12799e12017-07-28 15:18:29 -04001835
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001836<a href="SkColor_Reference#Color">Color</a> specifies the <a href="SkColor_Reference#RGB_Red">Color RGB Red</a>, <a href="SkColor_Reference#RGB_Blue">Color RGB Blue</a>, <a href="SkColor_Reference#RGB_Green">Color RGB Green</a>, and <a href="SkColor_Reference#Alpha">Color Alpha</a>
Cary Clarkab2621d2018-01-30 10:08:57 -05001837values used to draw a filled or stroked shape in a 32-bit value. Each component
1838occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1839All values in any combination are valid.
1840
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001841<a href="SkColor_Reference#Color">Color</a> is not <a href="undocumented#Premultiply">Premultiplied</a>; <a href="SkColor_Reference#Alpha">Color Alpha</a> sets the transparency independent of
1842<a href="SkColor_Reference#RGB">Color RGB</a>: <a href="SkColor_Reference#RGB_Red">Color RGB Red</a>, <a href="SkColor_Reference#RGB_Blue">Color RGB Blue</a>, and <a href="SkColor_Reference#RGB_Green">Color RGB Green</a>.
Cary Clarkab2621d2018-01-30 10:08:57 -05001843
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001844The bit positions of <a href="SkColor_Reference#Alpha">Color Alpha</a> and <a href="SkColor_Reference#RGB">Color RGB</a> are independent of the bit
Cary Clarkab2621d2018-01-30 10:08:57 -05001845positions on the output device, which may have more or fewer bits, and may have
1846a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001847
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001848| bit positions | <a href="SkColor_Reference#Alpha">Color Alpha</a> | <a href="SkColor_Reference#RGB_Red">Color RGB Red</a> | <a href="SkColor_Reference#RGB_Blue">Color RGB Blue</a> | <a href="SkColor_Reference#RGB_Green">Color RGB Green</a> |
Cary Clark12799e12017-07-28 15:18:29 -04001849| --- | --- | --- | --- | --- |
1850| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1851
1852### Example
1853
1854<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1855
Cary Clark493df1f2017-08-25 13:14:33 -04001856<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001857## getColor
1858
Cary Clarka560c472017-11-27 10:44:06 -05001859<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001860SkColor getColor() const
1861</pre>
1862
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001863Retrieves <a href="SkColor_Reference#Alpha">Alpha</a> and <a href="SkColor_Reference#RGB">Color RGB</a>, <a href="undocumented#Unpremultiply">Unpremultiplied</a>, packed into 32 bits.
1864Use helpers <a href="SkColor_Reference#SkColorGetA">SkColorGetA</a>, <a href="SkColor_Reference#SkColorGetR">SkColorGetR</a>, <a href="SkColor_Reference#SkColorGetG">SkColorGetG</a>, and <a href="SkColor_Reference#SkColorGetB">SkColorGetB</a> to extract
Cary Clark12799e12017-07-28 15:18:29 -04001865a color component.
1866
1867### Return Value
1868
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001869<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="SkColor_Reference#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001870
1871### Example
1872
1873<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1874
1875#### Example Output
1876
1877~~~~
1878Yellow is 100% red, 100% green, and 0% blue.
1879~~~~
1880
1881</fiddle-embed></div>
1882
1883### See Also
1884
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001885<a href="SkColor_Reference#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001886
1887---
1888
Cary Clark493df1f2017-08-25 13:14:33 -04001889<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001890## setColor
1891
Cary Clarka560c472017-11-27 10:44:06 -05001892<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001893void setColor(SkColor color)
1894</pre>
1895
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001896Sets <a href="SkColor_Reference#Alpha">Alpha</a> and <a href="SkColor_Reference#RGB">Color RGB</a> used when stroking and filling. The <a href="#SkPaint_setColor_color">color</a> is a 32-bit value,
1897<a href="undocumented#Unpremultiply">Unpremultiplied</a>, packing 8-bit components for <a href="SkColor_Reference#Alpha">Alpha</a>, <a href="SkColor_Reference#RGB_Red">Red</a>, <a href="SkColor_Reference#RGB_Blue">Blue</a>, and <a href="SkColor_Reference#RGB_Green">Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001898
1899### Parameters
1900
Cary Clark8cc16c72017-08-25 11:51:49 -04001901<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001902<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="SkColor_Reference#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001903 </tr>
1904</table>
1905
1906### Example
1907
1908<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1909
1910#### Example Output
1911
1912~~~~
1913green1 == green2
1914~~~~
1915
1916</fiddle-embed></div>
1917
1918### See Also
1919
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001920<a href="SkColor_Reference#SkColor">SkColor</a> <a href="#SkPaint_setARGB">setARGB</a> <a href="SkColor_Reference#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001921
1922---
1923
1924## <a name="Alpha_Methods"></a> Alpha Methods
1925
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001926<a href="SkColor_Reference#Alpha">Color Alpha</a> sets the transparency independent of <a href="SkColor_Reference#RGB">Color RGB</a>: <a href="SkColor_Reference#RGB_Red">Color RGB Red</a>, <a href="SkColor_Reference#RGB_Blue">Color RGB Blue</a>, and <a href="SkColor_Reference#RGB_Green">Color RGB Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001927
Cary Clark493df1f2017-08-25 13:14:33 -04001928<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001929## getAlpha
1930
Cary Clarka560c472017-11-27 10:44:06 -05001931<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001932uint8_t getAlpha() const
1933</pre>
1934
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001935Retrieves <a href="SkColor_Reference#Alpha">Alpha</a> from the <a href="SkColor_Reference#Color">Color</a> used when stroking and filling.
Cary Clark12799e12017-07-28 15:18:29 -04001936
1937### Return Value
1938
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001939<a href="SkColor_Reference#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001940
1941### Example
1942
1943<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1944
1945#### Example Output
1946
1947~~~~
1948255 == paint.getAlpha()
1949~~~~
1950
1951</fiddle-embed></div>
1952
1953---
1954
Cary Clark493df1f2017-08-25 13:14:33 -04001955<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001956## setAlpha
1957
Cary Clarka560c472017-11-27 10:44:06 -05001958<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001959void setAlpha(U8CPU a)
1960</pre>
1961
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001962Replaces <a href="SkColor_Reference#Alpha">Alpha</a>, leaving <a href="SkColor_Reference#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001963unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001964build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001965<a href="#SkPaint_setAlpha_a">a</a> set to zero makes <a href="SkColor_Reference#Color">Color</a> fully transparent; <a href="#SkPaint_setAlpha_a">a</a> set to 255 makes <a href="SkColor_Reference#Color">Color</a>
Cary Clark12799e12017-07-28 15:18:29 -04001966fully opaque.
1967
1968### Parameters
1969
Cary Clark8cc16c72017-08-25 11:51:49 -04001970<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001971<a href="SkColor_Reference#Alpha">Alpha</a> component of <a href="SkColor_Reference#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001972 </tr>
1973</table>
1974
1975### Example
1976
1977<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1978
1979#### Example Output
1980
1981~~~~
19820x44112233 == paint.getColor()
1983~~~~
1984
1985</fiddle-embed></div>
1986
1987---
1988
Cary Clark493df1f2017-08-25 13:14:33 -04001989<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001990## setARGB
1991
Cary Clarka560c472017-11-27 10:44:06 -05001992<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001993void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
1994</pre>
1995
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001996Sets <a href="SkColor_Reference#Color">Color</a> used when drawing solid fills. The color components range from 0 to 255.
1997The color is <a href="undocumented#Unpremultiply">Unpremultiplied</a>; <a href="SkColor_Reference#Alpha">Alpha</a> sets the transparency independent of <a href="SkColor_Reference#RGB">Color RGB</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001998
1999### Parameters
2000
Cary Clark8cc16c72017-08-25 11:51:49 -04002001<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002002amount of <a href="SkColor_Reference#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002003 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002004amount of <a href="SkColor_Reference#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002005 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002006amount of <a href="SkColor_Reference#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002007 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002008amount of <a href="SkColor_Reference#RGB_Blue">Color RGB Blue</a>, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002009 </tr>
2010</table>
2011
2012### Example
2013
2014<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2015
2016#### Example Output
2017
2018~~~~
2019transRed1 == transRed2
2020~~~~
2021
2022</fiddle-embed></div>
2023
2024### See Also
2025
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002026<a href="#SkPaint_setColor">setColor</a> <a href="SkColor_Reference#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002027
2028---
2029
Cary Clark08895c42018-02-01 09:37:32 -05002030## <a name="Style"></a> Style
2031
Cary Clark8cc16c72017-08-25 11:51:49 -04002032<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2033Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002034
Cary Clark8cc16c72017-08-25 11:51:49 -04002035Set <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 -04002036The fill covers the area inside the geometry for most shapes.
2037
Cary Clark8cc16c72017-08-25 11:51:49 -04002038Set <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 -04002039
Cary Clark2a8c48b2018-02-15 17:31:24 -05002040## <a name="Style_Fill"></a> Style Fill
Cary Clark12799e12017-07-28 15:18:29 -04002041
2042### See Also
2043
Cary Clark2a8c48b2018-02-15 17:31:24 -05002044<a href="SkPath_Reference#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002045
Cary Clark2a8c48b2018-02-15 17:31:24 -05002046## <a name="Style_Stroke"></a> Style Stroke
Cary Clark12799e12017-07-28 15:18:29 -04002047
Cary Clarkbc5697d2017-10-04 14:31:33 -04002048The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002049<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>.
2050The 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 -04002051The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002052
Cary Clark8cc16c72017-08-25 11:51:49 -04002053As <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 Clark2d4bf5f2018-04-16 08:37:38 -04002054may have gaps, and if <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, <a href="SkColor_Reference#Alpha">Color Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04002055
Cary Clark2a8c48b2018-02-15 17:31:24 -05002056## <a name="Style_Hairline"></a> Style Hairline
Cary Clark12799e12017-07-28 15:18:29 -04002057
Cary Clark2a8c48b2018-02-15 17:31:24 -05002058<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Style_Hairline">Hairline</a>.
2059<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 -05002060flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002061
Cary Clark2a8c48b2018-02-15 17:31:24 -05002062<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
2063two 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 -04002064pixel. 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 -05002065GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002066while stroking.
2067
Cary Clark8cc16c72017-08-25 11:51:49 -04002068## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002069
Cary Clarka560c472017-11-27 10:44:06 -05002070<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04002071 enum <a href="#SkPaint_Style">Style</a> {
2072 <a href="#SkPaint_kFill_Style">kFill Style</a>,
2073 <a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2074 <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
2075 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002076
2077 static constexpr int <a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1;
Cary Clark1a8d7622018-03-05 13:26:16 -05002078</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002079
Cary Clark8cc16c72017-08-25 11:51:49 -04002080Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002081The stroke and fill
2082share all paint attributes; for instance, they are drawn with the same color.
2083
Cary Clark8cc16c72017-08-25 11:51:49 -04002084Use <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 -04002085a fill draw.
2086
2087### Constants
2088
2089<table>
2090 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002091 <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 -05002092Applies 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>.
2093<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 -04002094<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 -05002095The <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 -04002096and to create an unfilled hole inside the shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05002097<a href="#SkPaint_Style">Style</a> is set to <a href="#SkPaint_kFill_Style">kFill Style</a> by default.
2098</td>
Cary Clark12799e12017-07-28 15:18:29 -04002099 </tr>
2100 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002101 <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 -05002102Applies 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>.
2103<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 -04002104and ignore the set <a href="#SkPaint_Style">Style</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05002105The stroke construction is unaffected by the <a href="SkPath_Reference#Fill_Type">Path Fill Type</a>.
2106</td>
Cary Clark12799e12017-07-28 15:18:29 -04002107 </tr>
2108 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002109 <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 -05002110Applies 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>.
2111<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 -05002112and the set <a href="SkPath_Reference#Fill_Type">Path Fill Type</a> is ignored.
2113</td>
Cary Clark12799e12017-07-28 15:18:29 -04002114 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04002115 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002116 <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 -05002117May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.
2118</td>
Cary Clark12799e12017-07-28 15:18:29 -04002119 </tr>
2120
Cary Clark06c20f32018-03-20 15:53:27 -04002121
Cary Clark12799e12017-07-28 15:18:29 -04002122
Cary Clark493df1f2017-08-25 13:14:33 -04002123<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002124## getStyle
2125
Cary Clarka560c472017-11-27 10:44:06 -05002126<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002127Style getStyle() const
2128</pre>
2129
2130Whether the geometry is filled, stroked, or filled and stroked.
2131
2132### Return Value
2133
Cary Clark8cc16c72017-08-25 11:51:49 -04002134one 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 -04002135
2136### Example
2137
2138<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2139
2140#### Example Output
2141
2142~~~~
2143SkPaint::kFill_Style == paint.getStyle()
2144~~~~
2145
2146</fiddle-embed></div>
2147
2148### See Also
2149
Cary Clark8cc16c72017-08-25 11:51:49 -04002150<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002151
2152---
2153
Cary Clark493df1f2017-08-25 13:14:33 -04002154<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002155## setStyle
2156
Cary Clarka560c472017-11-27 10:44:06 -05002157<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002158void setStyle(Style style)
2159</pre>
2160
2161Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002162Has 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 -04002163
2164### Parameters
2165
Cary Clark8cc16c72017-08-25 11:51:49 -04002166<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2167one 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 -04002168 </tr>
2169</table>
2170
2171### Example
2172
2173<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2174
2175### See Also
2176
Cary Clark8cc16c72017-08-25 11:51:49 -04002177<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002178
2179---
2180
2181### See Also
2182
Cary Clark2a8c48b2018-02-15 17:31:24 -05002183<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 -04002184
Cary Clark08895c42018-02-01 09:37:32 -05002185## <a name="Stroke_Width"></a> Stroke Width
2186
Cary Clark8cc16c72017-08-25 11:51:49 -04002187<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002188of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002189set 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 -04002190
2191When width is greater than zero, the stroke encompasses as many pixels partially
2192or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002193the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002194
Cary Clark2a8c48b2018-02-15 17:31:24 -05002195The stroke dimensions are scaled by the canvas matrix, but <a href="#Style_Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002196remains one pixel wide regardless of scaling.
2197
2198The default width for the paint is zero.
2199
2200### Example
2201
Cary Clark7cfcbca2018-01-04 16:11:51 -05002202<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 -05002203line and the platform implementation.
2204</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002205
Cary Clark493df1f2017-08-25 13:14:33 -04002206<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002207## getStrokeWidth
2208
Cary Clarka560c472017-11-27 10:44:06 -05002209<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002210SkScalar getStrokeWidth() const
2211</pre>
2212
Cary Clark8cc16c72017-08-25 11:51:49 -04002213Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002214outline the shape.
2215
2216### Return Value
2217
Cary Clark2a8c48b2018-02-15 17:31:24 -05002218zero for <a href="#Style_Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002219
2220### Example
2221
2222<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2223
2224#### Example Output
2225
2226~~~~
22270 == paint.getStrokeWidth()
2228~~~~
2229
2230</fiddle-embed></div>
2231
2232---
2233
Cary Clark493df1f2017-08-25 13:14:33 -04002234<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002235## setStrokeWidth
2236
Cary Clarka560c472017-11-27 10:44:06 -05002237<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002238void setStrokeWidth(SkScalar width)
2239</pre>
2240
2241Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002242outline the shape.
2243Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002244
2245### Parameters
2246
Cary Clark8cc16c72017-08-25 11:51:49 -04002247<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002248zero thickness for <a href="#Style_Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002249 </tr>
2250</table>
2251
2252### Example
2253
2254<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2255
2256#### Example Output
2257
2258~~~~
22595 == paint.getStrokeWidth()
2260~~~~
2261
2262</fiddle-embed></div>
2263
2264---
2265
Cary Clark08895c42018-02-01 09:37:32 -05002266## <a name="Miter_Limit"></a> Miter Limit
2267
Cary Clark8cc16c72017-08-25 11:51:49 -04002268<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002269relative to the stroke width.
2270
Cary Clark8cc16c72017-08-25 11:51:49 -04002271<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2272is 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>
2273or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002274
Cary Clark8cc16c72017-08-25 11:51:49 -04002275If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2276is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002277
Cary Clark8cc16c72017-08-25 11:51:49 -04002278<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002279
Cary Clark8cc16c72017-08-25 11:51:49 -04002280miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002281The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002282in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002283
2284Here are some miter limits and the angles that triggers them.
2285
2286| miter limit | angle in degrees |
2287| --- | --- |
2288| 10 | 11.48 |
2289| 9 | 12.76 |
2290| 8 | 14.36 |
2291| 7 | 16.43 |
2292| 6 | 19.19 |
2293| 5 | 23.07 |
2294| 4 | 28.96 |
2295| 3 | 38.94 |
2296| 2 | 60 |
2297| 1 | 180 |
2298
2299### Example
2300
2301<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2302When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002303by a bevel join.
2304</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002305
Cary Clark493df1f2017-08-25 13:14:33 -04002306<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002307## getStrokeMiter
2308
Cary Clarka560c472017-11-27 10:44:06 -05002309<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002310SkScalar getStrokeMiter() const
2311</pre>
2312
2313The limit at which a sharp corner is drawn beveled.
2314
2315### Return Value
2316
Cary Clark8cc16c72017-08-25 11:51:49 -04002317zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002318
2319### Example
2320
2321<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2322
2323#### Example Output
2324
2325~~~~
2326default miter limit == 4
2327~~~~
2328
2329</fiddle-embed></div>
2330
2331### See Also
2332
Cary Clark8cc16c72017-08-25 11:51:49 -04002333<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 -04002334
2335---
2336
Cary Clark493df1f2017-08-25 13:14:33 -04002337<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002338## setStrokeMiter
2339
Cary Clarka560c472017-11-27 10:44:06 -05002340<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002341void setStrokeMiter(SkScalar miter)
2342</pre>
2343
2344The limit at which a sharp corner is drawn beveled.
2345Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002346Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002347
2348### Parameters
2349
Cary Clark8cc16c72017-08-25 11:51:49 -04002350<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2351zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002352 </tr>
2353</table>
2354
2355### Example
2356
2357<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2358
2359#### Example Output
2360
2361~~~~
2362default miter limit == 8
2363~~~~
2364
2365</fiddle-embed></div>
2366
2367### See Also
2368
Cary Clark8cc16c72017-08-25 11:51:49 -04002369<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 -04002370
2371---
2372
Cary Clark08895c42018-02-01 09:37:32 -05002373## <a name="Stroke_Cap"></a> Stroke Cap
Cary Clark12799e12017-07-28 15:18:29 -04002374
Cary Clark8cc16c72017-08-25 11:51:49 -04002375## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002376
Cary Clarka560c472017-11-27 10:44:06 -05002377<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04002378 enum <a href="#SkPaint_Cap">Cap</a> {
2379 <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2380 <a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2381 <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002382
Cary Clark186d08f2018-04-03 08:43:27 -04002383 <a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2384 <a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2385 };
Cary Clark6fc50412017-09-21 12:31:06 -04002386
Cary Clark186d08f2018-04-03 08:43:27 -04002387 static constexpr int <a href="#SkPaint_kCapCount">kCapCount</a> = <a href="#SkPaint_kLast_Cap">kLast Cap</a> + 1;
Cary Clark1a8d7622018-03-05 13:26:16 -05002388</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002389
Cary Clark2a8c48b2018-02-15 17:31:24 -05002390<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 -04002391
2392### Constants
2393
2394<table>
2395 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002396 <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.
2397</td>
Cary Clark12799e12017-07-28 15:18:29 -04002398 </tr>
2399 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002400 <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 -05002401and end.
2402</td>
Cary Clark12799e12017-07-28 15:18:29 -04002403 </tr>
2404 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002405 <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 -04002406and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002407of the stroke.
2408</td>
Cary Clark12799e12017-07-28 15:18:29 -04002409 </tr>
2410 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002411 <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>.
2412</td>
Cary Clark12799e12017-07-28 15:18:29 -04002413 </tr>
2414 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002415 <td><a name="SkPaint_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 -05002416<a href="#Stroke_Cap">Stroke Cap</a> is set to <a href="#SkPaint_kButt_Cap">kButt Cap</a> by default.
2417</td>
Cary Clark12799e12017-07-28 15:18:29 -04002418 </tr>
2419 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002420 <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 -05002421May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.
2422</td>
Cary Clark12799e12017-07-28 15:18:29 -04002423 </tr>
2424
Cary Clark7cfcbca2018-01-04 16:11:51 -05002425Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002426follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002427
Cary Clark2a8c48b2018-02-15 17:31:24 -05002428If 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 -04002429visible beginning and end.
2430
Cary Clark2a8c48b2018-02-15 17:31:24 -05002431<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 -04002432
Cary Clark2a8c48b2018-02-15 17:31:24 -05002433<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Contour_Zero_Length">Zero Length Contour</a> is not drawn.
2434<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 -04002435at the contour point.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002436<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 -04002437<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002438
Cary Clark8cc16c72017-08-25 11:51:49 -04002439<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 -04002440
Cary Clark12799e12017-07-28 15:18:29 -04002441### Example
2442
Cary Clark2ade9972017-11-02 17:49:34 -04002443<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002444
Cary Clark493df1f2017-08-25 13:14:33 -04002445<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002446## getStrokeCap
2447
Cary Clarka560c472017-11-27 10:44:06 -05002448<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002449Cap getStrokeCap() const
2450</pre>
2451
2452The geometry drawn at the beginning and end of strokes.
2453
2454### Return Value
2455
Cary Clark8cc16c72017-08-25 11:51:49 -04002456one 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 -04002457
2458### Example
2459
2460<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2461
2462#### Example Output
2463
2464~~~~
2465kButt_Cap == default stroke cap
2466~~~~
2467
2468</fiddle-embed></div>
2469
2470### See Also
2471
Cary Clark8cc16c72017-08-25 11:51:49 -04002472<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002473
2474---
2475
Cary Clark493df1f2017-08-25 13:14:33 -04002476<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002477## setStrokeCap
2478
Cary Clarka560c472017-11-27 10:44:06 -05002479<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002480void setStrokeCap(Cap cap)
2481</pre>
2482
2483The geometry drawn at the beginning and end of strokes.
2484
2485### Parameters
2486
Cary Clark8cc16c72017-08-25 11:51:49 -04002487<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2488one 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>;
2489has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002490 </tr>
2491</table>
2492
2493### Example
2494
2495<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2496
2497#### Example Output
2498
2499~~~~
2500kRound_Cap == paint.getStrokeCap()
2501~~~~
2502
2503</fiddle-embed></div>
2504
2505### See Also
2506
Cary Clark8cc16c72017-08-25 11:51:49 -04002507<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002508
2509---
2510
Cary Clark08895c42018-02-01 09:37:32 -05002511## <a name="Stroke_Join"></a> Stroke Join
2512
Cary Clark2a8c48b2018-02-15 17:31:24 -05002513<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 -04002514
Cary Clark7cfcbca2018-01-04 16:11:51 -05002515Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002516follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002517
2518If the contour direction changes abruptly, because the tangent direction leading
2519to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002520the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002521
2522### Example
2523
Cary Clark2ade9972017-11-02 17:49:34 -04002524<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002525
Cary Clark8cc16c72017-08-25 11:51:49 -04002526## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002527
Cary Clarka560c472017-11-27 10:44:06 -05002528<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04002529 enum <a href="#SkPaint_Join">Join</a> {
2530 <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2531 <a href="#SkPaint_kRound_Join">kRound Join</a>,
2532 <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002533
Cary Clark186d08f2018-04-03 08:43:27 -04002534 <a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2535 <a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2536 };
Cary Clark6fc50412017-09-21 12:31:06 -04002537
Cary Clark186d08f2018-04-03 08:43:27 -04002538 static constexpr int <a href="#SkPaint_kJoinCount">kJoinCount</a> = <a href="#SkPaint_kLast_Join">kLast Join</a> + 1;
Cary Clark1a8d7622018-03-05 13:26:16 -05002539</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002540
Cary Clark8cc16c72017-08-25 11:51:49 -04002541<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 -04002542affects the four corners of a stroked rectangle, and the connected segments in a
2543stroked path.
2544
2545Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2546radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2547connect the thick strokes.
2548
Cary Clark7cfcbca2018-01-04 16:11:51 -05002549The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002550not contain the actual join. For instance, a fill path constructed with round joins does
2551not necessarily include circles at each connected segment.
2552
2553### Constants
2554
2555<table>
2556 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002557 <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 -05002558If the extension exceeds <a href="#Miter_Limit">Miter Limit</a>, <a href="#SkPaint_kBevel_Join">kBevel Join</a> is used instead.
2559</td>
Cary Clark12799e12017-07-28 15:18:29 -04002560 </tr>
2561 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002562 <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.
2563</td>
Cary Clark12799e12017-07-28 15:18:29 -04002564 </tr>
2565 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002566 <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.
2567</td>
Cary Clark12799e12017-07-28 15:18:29 -04002568 </tr>
2569 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002570 <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>.
2571</td>
Cary Clark12799e12017-07-28 15:18:29 -04002572 </tr>
2573 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002574 <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 -05002575<a href="#Stroke_Join">Stroke Join</a> is set to <a href="#SkPaint_kMiter_Join">kMiter Join</a> by default.
2576</td>
Cary Clark12799e12017-07-28 15:18:29 -04002577 </tr>
2578 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002579 <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 -05002580May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.
2581</td>
Cary Clark12799e12017-07-28 15:18:29 -04002582 </tr>
2583</table>
2584
2585### Example
2586
2587<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2588
2589### See Also
2590
Cary Clark8cc16c72017-08-25 11:51:49 -04002591<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 -04002592
2593
2594
Cary Clark493df1f2017-08-25 13:14:33 -04002595<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002596## getStrokeJoin
2597
Cary Clarka560c472017-11-27 10:44:06 -05002598<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002599Join getStrokeJoin() const
2600</pre>
2601
Cary Clark0c5f5462017-12-15 11:21:51 -05002602The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002603
2604### Return Value
2605
Cary Clark8cc16c72017-08-25 11:51:49 -04002606one 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 -04002607
2608### Example
2609
2610<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2611
2612#### Example Output
2613
2614~~~~
2615kMiter_Join == default stroke join
2616~~~~
2617
2618</fiddle-embed></div>
2619
2620### See Also
2621
Cary Clark8cc16c72017-08-25 11:51:49 -04002622<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002623
2624---
2625
Cary Clark493df1f2017-08-25 13:14:33 -04002626<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002627## setStrokeJoin
2628
Cary Clarka560c472017-11-27 10:44:06 -05002629<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002630void setStrokeJoin(Join join)
2631</pre>
2632
Cary Clark0c5f5462017-12-15 11:21:51 -05002633The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002634
2635### Parameters
2636
Cary Clark8cc16c72017-08-25 11:51:49 -04002637<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2638one 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 -04002639otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002640 </tr>
2641</table>
2642
2643### Example
2644
2645<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2646
2647#### Example Output
2648
2649~~~~
2650kMiter_Join == paint.getStrokeJoin()
2651~~~~
2652
2653</fiddle-embed></div>
2654
2655### See Also
2656
Cary Clark8cc16c72017-08-25 11:51:49 -04002657<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002658
2659---
2660
2661### See Also
2662
Cary Clark8cc16c72017-08-25 11:51:49 -04002663<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002664
Cary Clark08895c42018-02-01 09:37:32 -05002665## <a name="Fill_Path"></a> Fill Path
2666
Cary Clark8cc16c72017-08-25 11:51:49 -04002667<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 -04002668
Cary Clark8cc16c72017-08-25 11:51:49 -04002669If <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 -04002670replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2671destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002672
Cary Clark4c06f5e2017-08-04 12:48:24 -04002673Fill <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
2674the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002675
Cary Clark7cfcbca2018-01-04 16:11:51 -05002676If <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 -04002677and <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>,
2678and <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 -04002679
Cary Clark7cfcbca2018-01-04 16:11:51 -05002680Fill <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 -04002681
Cary Clark8cc16c72017-08-25 11:51:49 -04002682If 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 -05002683returns false since <a href="#Style_Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002684
Cary Clark493df1f2017-08-25 13:14:33 -04002685<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002686## getFillPath
2687
Cary Clarka560c472017-11-27 10:44:06 -05002688<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2689bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002690</pre>
2691
2692The filled equivalent of the stroked path.
2693
2694### Parameters
2695
Cary Clark8cc16c72017-08-25 11:51:49 -04002696<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002697<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002698 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2699resulting <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>
2700 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002701optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002702 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002703if > 1, increase precision, else if (0 < res < 1) reduce precision
2704to favor speed and size</td>
2705 </tr>
2706</table>
2707
2708### Return Value
2709
Cary Clark2a8c48b2018-02-15 17:31:24 -05002710true 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 -04002711
2712### Example
2713
Cary Clark2a8c48b2018-02-15 17:31:24 -05002714<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.
2715At the lowest precision, the <a href="SkPath_Reference#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002716At the highest precision, the filled path has high fidelity compared to the original stroke.
2717</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002718
2719---
2720
Cary Clark2dc84ad2018-01-26 12:56:22 -05002721<a name="SkPaint_getFillPath_2"></a>
2722
Cary Clarka560c472017-11-27 10:44:06 -05002723<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002724bool getFillPath(const SkPath& src, SkPath* dst) const
2725</pre>
2726
2727The filled equivalent of the stroked path.
2728
Cary Clark8cc16c72017-08-25 11:51:49 -04002729Replaces <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>.
2730<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 -04002731
2732### Parameters
2733
Cary Clark8cc16c72017-08-25 11:51:49 -04002734<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002735<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002736 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2737resulting <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 -04002738 </tr>
2739</table>
2740
2741### Return Value
2742
Cary Clark2a8c48b2018-02-15 17:31:24 -05002743true 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 -04002744
2745### Example
2746
2747<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2748
2749---
2750
2751### See Also
2752
Cary Clark8cc16c72017-08-25 11:51:49 -04002753<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 -04002754
Cary Clark08895c42018-02-01 09:37:32 -05002755## <a name="Shader_Methods"></a> Shader Methods
2756
Cary Clark4c06f5e2017-08-04 12:48:24 -04002757<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2758<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002759If <a href="#Paint">Paint</a> has no <a href="undocumented#Shader">Shader</a>, then <a href="SkColor_Reference#Color">Color</a> fills the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002760
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002761<a href="undocumented#Shader">Shader</a> is modulated by <a href="SkColor_Reference#Alpha">Color Alpha</a> component of <a href="SkColor_Reference#Color">Color</a>.
2762If <a href="undocumented#Shader">Shader</a> object defines only <a href="SkColor_Reference#Alpha">Color Alpha</a>, then <a href="SkColor_Reference#Color">Color</a> modulated by <a href="SkColor_Reference#Alpha">Color Alpha</a> describes
Cary Clark12799e12017-07-28 15:18:29 -04002763the fill.
2764
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002765The drawn transparency can be modified without altering <a href="undocumented#Shader">Shader</a>, by changing <a href="SkColor_Reference#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002766
2767### Example
2768
2769<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2770
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002771If <a href="undocumented#Shader">Shader</a> generates only <a href="SkColor_Reference#Alpha">Color Alpha</a> then all components of <a href="SkColor_Reference#Color">Color</a> modulate the output.
Cary Clark12799e12017-07-28 15:18:29 -04002772
2773### Example
2774
2775<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2776
Cary Clark493df1f2017-08-25 13:14:33 -04002777<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002778## getShader
2779
Cary Clarka560c472017-11-27 10:44:06 -05002780<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002781SkShader* getShader() const
2782</pre>
2783
2784Optional colors used when filling a path, such as a gradient.
2785
Cary Clark4c06f5e2017-08-04 12:48:24 -04002786Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002787
2788### Return Value
2789
Cary Clark4c06f5e2017-08-04 12:48:24 -04002790<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002791
2792### Example
2793
2794<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2795
2796#### Example Output
2797
2798~~~~
2799nullptr == shader
2800nullptr != shader
2801~~~~
2802
2803</fiddle-embed></div>
2804
2805---
2806
Cary Clark493df1f2017-08-25 13:14:33 -04002807<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002808## refShader
2809
Cary Clarka560c472017-11-27 10:44:06 -05002810<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002811sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002812</pre>
2813
2814Optional colors used when filling a path, such as a gradient.
2815
Cary Clark4c06f5e2017-08-04 12:48:24 -04002816Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002817
2818### Return Value
2819
Cary Clark4c06f5e2017-08-04 12:48:24 -04002820<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002821
2822### Example
2823
2824<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2825
2826#### Example Output
2827
2828~~~~
2829shader unique: true
2830shader unique: false
2831~~~~
2832
2833</fiddle-embed></div>
2834
2835---
2836
Cary Clark493df1f2017-08-25 13:14:33 -04002837<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002838## setShader
2839
Cary Clarka560c472017-11-27 10:44:06 -05002840<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002841void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002842</pre>
2843
2844Optional colors used when filling a path, such as a gradient.
2845
Cary Clarkd0530ba2017-09-14 11:25:39 -04002846Sets <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 -04002847Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002848
2849### Parameters
2850
Cary Clark8cc16c72017-08-25 11:51:49 -04002851<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002852how geometry is filled with color; if nullptr, <a href="SkColor_Reference#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002853 </tr>
2854</table>
2855
2856### Example
2857
2858<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2859
2860---
2861
Cary Clark08895c42018-02-01 09:37:32 -05002862## <a name="Color_Filter_Methods"></a> Color Filter Methods
2863
Cary Clark4c06f5e2017-08-04 12:48:24 -04002864<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2865<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 -04002866If <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 -04002867
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002868The drawn transparency can be modified without altering <a href="undocumented#Color_Filter">Color Filter</a>, by changing <a href="SkColor_Reference#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002869
2870### Example
2871
2872<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2873
Cary Clark493df1f2017-08-25 13:14:33 -04002874<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002875## getColorFilter
2876
Cary Clarka560c472017-11-27 10:44:06 -05002877<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002878SkColorFilter* getColorFilter() const
2879</pre>
2880
Cary Clark4c06f5e2017-08-04 12:48:24 -04002881Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2882Does 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 -04002883
2884### Return Value
2885
Cary Clark4c06f5e2017-08-04 12:48:24 -04002886<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002887
2888### Example
2889
2890<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2891
2892#### Example Output
2893
2894~~~~
2895nullptr == color filter
2896nullptr != color filter
2897~~~~
2898
2899</fiddle-embed></div>
2900
2901---
2902
Cary Clark493df1f2017-08-25 13:14:33 -04002903<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002904## refColorFilter
2905
Cary Clarka560c472017-11-27 10:44:06 -05002906<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002907sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002908</pre>
2909
Cary Clark4c06f5e2017-08-04 12:48:24 -04002910Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2911Increases <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 -04002912
2913### Return Value
2914
Cary Clark4c06f5e2017-08-04 12:48:24 -04002915<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002916
2917### Example
2918
2919<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2920
2921#### Example Output
2922
2923~~~~
2924color filter unique: true
2925color filter unique: false
2926~~~~
2927
2928</fiddle-embed></div>
2929
2930---
2931
Cary Clark493df1f2017-08-25 13:14:33 -04002932<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002933## setColorFilter
2934
Cary Clarka560c472017-11-27 10:44:06 -05002935<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002936void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002937</pre>
2938
Cary Clark6fc50412017-09-21 12:31:06 -04002939Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2940<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2941
2942Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002943
2944### Parameters
2945
Cary Clark8cc16c72017-08-25 11:51:49 -04002946<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002947<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002948 </tr>
2949</table>
2950
2951### Example
2952
2953<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2954
2955---
2956
Cary Clark08895c42018-02-01 09:37:32 -05002957## <a name="Blend_Mode_Methods"></a> Blend Mode Methods
2958
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002959<a href="undocumented#Blend_Mode">Blend Mode</a> describes how <a href="SkColor_Reference#Color">Color</a> combines with the destination color.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002960The default setting, <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002961over the destination color.
2962
2963### Example
2964
2965<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2966
2967### See Also
2968
Cary Clark4c06f5e2017-08-04 12:48:24 -04002969<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002970
Cary Clark493df1f2017-08-25 13:14:33 -04002971<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002972## getBlendMode
2973
Cary Clarka560c472017-11-27 10:44:06 -05002974<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002975SkBlendMode getBlendMode() const
2976</pre>
2977
Cary Clark4c06f5e2017-08-04 12:48:24 -04002978Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002979By default, returns <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002980
2981### Return Value
2982
2983mode used to combine source color with destination color
2984
2985### Example
2986
2987<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
2988
2989#### Example Output
2990
2991~~~~
2992kSrcOver == getBlendMode
2993kSrcOver != getBlendMode
2994~~~~
2995
2996</fiddle-embed></div>
2997
2998---
2999
Cary Clark493df1f2017-08-25 13:14:33 -04003000<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003001## isSrcOver
3002
Cary Clarka560c472017-11-27 10:44:06 -05003003<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003004bool isSrcOver() const
3005</pre>
3006
Cary Clark2a8c48b2018-02-15 17:31:24 -05003007Returns 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 -04003008
3009### Return Value
3010
Cary Clark2a8c48b2018-02-15 17:31:24 -05003011true 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 -04003012
3013### Example
3014
3015<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3016
3017#### Example Output
3018
3019~~~~
3020isSrcOver == true
3021isSrcOver != true
3022~~~~
3023
3024</fiddle-embed></div>
3025
3026---
3027
Cary Clark493df1f2017-08-25 13:14:33 -04003028<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003029## setBlendMode
3030
Cary Clarka560c472017-11-27 10:44:06 -05003031<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003032void setBlendMode(SkBlendMode mode)
3033</pre>
3034
Cary Clark7cfcbca2018-01-04 16:11:51 -05003035Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003036Does not check for valid input.
3037
3038### Parameters
3039
Cary Clark8cc16c72017-08-25 11:51:49 -04003040<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003041<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003042 </tr>
3043</table>
3044
3045### Example
3046
3047<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3048
3049#### Example Output
3050
3051~~~~
3052isSrcOver == true
3053isSrcOver != true
3054~~~~
3055
3056</fiddle-embed></div>
3057
3058---
3059
Cary Clark08895c42018-02-01 09:37:32 -05003060## <a name="Path_Effect_Methods"></a> Path Effect Methods
3061
Cary Clark4c06f5e2017-08-04 12:48:24 -04003062<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3063<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 -04003064If <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 -04003065
3066### Example
3067
3068<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3069
3070### See Also
3071
Cary Clark4c06f5e2017-08-04 12:48:24 -04003072<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003073
Cary Clark493df1f2017-08-25 13:14:33 -04003074<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003075## getPathEffect
3076
Cary Clarka560c472017-11-27 10:44:06 -05003077<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003078SkPathEffect* getPathEffect() const
3079</pre>
3080
Cary Clark4c06f5e2017-08-04 12:48:24 -04003081Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3082Does 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 -04003083
3084### Return Value
3085
Cary Clark4c06f5e2017-08-04 12:48:24 -04003086<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003087
3088### Example
3089
3090<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3091
3092#### Example Output
3093
3094~~~~
3095nullptr == path effect
3096nullptr != path effect
3097~~~~
3098
3099</fiddle-embed></div>
3100
3101---
3102
Cary Clark493df1f2017-08-25 13:14:33 -04003103<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003104## refPathEffect
3105
Cary Clarka560c472017-11-27 10:44:06 -05003106<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003107sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003108</pre>
3109
Cary Clark4c06f5e2017-08-04 12:48:24 -04003110Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3111Increases <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 -04003112
3113### Return Value
3114
Cary Clark4c06f5e2017-08-04 12:48:24 -04003115<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003116
3117### Example
3118
Cary Clarka560c472017-11-27 10:44:06 -05003119<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003120
3121#### Example Output
3122
3123~~~~
3124path effect unique: true
3125path effect unique: false
3126~~~~
3127
3128</fiddle-embed></div>
3129
3130---
3131
Cary Clark493df1f2017-08-25 13:14:33 -04003132<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003133## setPathEffect
3134
Cary Clarka560c472017-11-27 10:44:06 -05003135<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003136void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003137</pre>
3138
Cary Clark6fc50412017-09-21 12:31:06 -04003139Sets <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
3140<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3141
3142Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003143
3144### Parameters
3145
Cary Clark8cc16c72017-08-25 11:51:49 -04003146<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003147replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003148 </tr>
3149</table>
3150
3151### Example
3152
3153<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3154
3155---
3156
Cary Clark08895c42018-02-01 09:37:32 -05003157## <a name="Mask_Filter_Methods"></a> Mask Filter Methods
3158
Cary Clarkce101242017-09-01 15:51:02 -04003159<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 -05003160<a href="undocumented#Mask_Filter">Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003161
3162<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3163creating 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
3164modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003165
3166### Example
3167
Cary Clark681287e2018-03-16 11:34:15 -04003168<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003169
Cary Clark493df1f2017-08-25 13:14:33 -04003170<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003171## getMaskFilter
3172
Cary Clarka560c472017-11-27 10:44:06 -05003173<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003174SkMaskFilter* getMaskFilter() const
3175</pre>
3176
Cary Clark4c06f5e2017-08-04 12:48:24 -04003177Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3178Does 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 -04003179
3180### Return Value
3181
Cary Clark4c06f5e2017-08-04 12:48:24 -04003182<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003183
3184### Example
3185
Cary Clark681287e2018-03-16 11:34:15 -04003186<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003187
3188#### Example Output
3189
3190~~~~
3191nullptr == mask filter
3192nullptr != mask filter
3193~~~~
3194
3195</fiddle-embed></div>
3196
3197---
3198
Cary Clark493df1f2017-08-25 13:14:33 -04003199<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003200## refMaskFilter
3201
Cary Clarka560c472017-11-27 10:44:06 -05003202<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003203sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003204</pre>
3205
Cary Clark4c06f5e2017-08-04 12:48:24 -04003206Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003207
Cary Clark4c06f5e2017-08-04 12:48:24 -04003208Increases <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 -04003209
3210### Return Value
3211
Cary Clark4c06f5e2017-08-04 12:48:24 -04003212<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003213
3214### Example
3215
Cary Clark681287e2018-03-16 11:34:15 -04003216<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003217
3218#### Example Output
3219
3220~~~~
3221mask filter unique: true
3222mask filter unique: false
3223~~~~
3224
3225</fiddle-embed></div>
3226
3227---
3228
Cary Clark493df1f2017-08-25 13:14:33 -04003229<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003230## setMaskFilter
3231
Cary Clarka560c472017-11-27 10:44:06 -05003232<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003233void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003234</pre>
3235
Cary Clark6fc50412017-09-21 12:31:06 -04003236Sets <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
3237<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
3238<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3239
Cary Clark6fc50412017-09-21 12:31:06 -04003240Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003241
3242### Parameters
3243
Cary Clark8cc16c72017-08-25 11:51:49 -04003244<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003245modifies clipping mask generated from drawn geometry</td>
3246 </tr>
3247</table>
3248
3249### Example
3250
Cary Clark681287e2018-03-16 11:34:15 -04003251<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003252
3253---
3254
Cary Clark08895c42018-02-01 09:37:32 -05003255## <a name="Typeface_Methods"></a> Typeface Methods
3256
Cary Clark4c06f5e2017-08-04 12:48:24 -04003257<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3258<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3259The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003260implementation.
3261
3262### Example
3263
Ben Wagner700ff172017-11-08 15:37:22 -05003264<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003265
Cary Clark493df1f2017-08-25 13:14:33 -04003266<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003267## getTypeface
3268
Cary Clarka560c472017-11-27 10:44:06 -05003269<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003270SkTypeface* getTypeface() const
3271</pre>
3272
Cary Clark4c06f5e2017-08-04 12:48:24 -04003273Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003274Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003275
3276### Return Value
3277
Cary Clark4c06f5e2017-08-04 12:48:24 -04003278<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003279
3280### Example
3281
Cary Clark71961fb2018-01-05 14:21:59 -05003282<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003283
3284#### Example Output
3285
3286~~~~
3287nullptr == typeface
3288nullptr != typeface
3289~~~~
3290
3291</fiddle-embed></div>
3292
3293---
3294
Cary Clark493df1f2017-08-25 13:14:33 -04003295<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003296## refTypeface
3297
Cary Clarka560c472017-11-27 10:44:06 -05003298<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003299sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003300</pre>
3301
Cary Clark4c06f5e2017-08-04 12:48:24 -04003302Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003303
3304### Return Value
3305
Cary Clark4c06f5e2017-08-04 12:48:24 -04003306<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003307
3308### Example
3309
Cary Clark71961fb2018-01-05 14:21:59 -05003310<div><fiddle-embed name="4bf8ed109c4b46d8a05c8b7763c1982c">
Cary Clark12799e12017-07-28 15:18:29 -04003311
3312#### Example Output
3313
3314~~~~
3315typeface1 != typeface2
3316typeface1 == typeface2
3317~~~~
3318
3319</fiddle-embed></div>
3320
3321---
3322
Cary Clark493df1f2017-08-25 13:14:33 -04003323<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003324## setTypeface
3325
Cary Clarka560c472017-11-27 10:44:06 -05003326<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003327void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003328</pre>
3329
Cary Clark7cfcbca2018-01-04 16:11:51 -05003330Sets <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 -04003331Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3332<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003333
3334### Parameters
3335
Cary Clark8cc16c72017-08-25 11:51:49 -04003336<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003337font and style used to draw text</td>
3338 </tr>
3339</table>
3340
3341### Example
3342
Cary Clark71961fb2018-01-05 14:21:59 -05003343<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003344
3345---
3346
Cary Clark08895c42018-02-01 09:37:32 -05003347## <a name="Image_Filter_Methods"></a> Image Filter Methods
3348
Cary Clark8cc16c72017-08-25 11:51:49 -04003349<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 -05003350with <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 -04003351which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003352
Cary Clark4c06f5e2017-08-04 12:48:24 -04003353<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 Clark2d4bf5f2018-04-16 08:37:38 -04003354can operate on all channels of <a href="SkColor_Reference#Color">Color</a>, while <a href="undocumented#Mask_Filter">Mask Filter</a> generates <a href="SkColor_Reference#Alpha">Alpha</a> only.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003355<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 +00003356<a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003357
3358### Example
3359
Update Docs4410d7f2018-03-19 06:05:52 +00003360<div><fiddle-embed name="250e45c5935d54eac6aca775d1fe3475"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003361
Cary Clark493df1f2017-08-25 13:14:33 -04003362<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003363## getImageFilter
3364
Cary Clarka560c472017-11-27 10:44:06 -05003365<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003366SkImageFilter* getImageFilter() const
3367</pre>
3368
Cary Clark4c06f5e2017-08-04 12:48:24 -04003369Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3370Does 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 -04003371
3372### Return Value
3373
Cary Clark4c06f5e2017-08-04 12:48:24 -04003374<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003375
3376### Example
3377
Cary Clarka560c472017-11-27 10:44:06 -05003378<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003379
3380#### Example Output
3381
3382~~~~
3383nullptr == image filter
3384nullptr != image filter
3385~~~~
3386
3387</fiddle-embed></div>
3388
3389---
3390
Cary Clark493df1f2017-08-25 13:14:33 -04003391<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003392## refImageFilter
3393
Cary Clarka560c472017-11-27 10:44:06 -05003394<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003395sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003396</pre>
3397
Cary Clark4c06f5e2017-08-04 12:48:24 -04003398Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3399Increases <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 -04003400
3401### Return Value
3402
Cary Clark4c06f5e2017-08-04 12:48:24 -04003403<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003404
3405### Example
3406
3407<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3408
3409#### Example Output
3410
3411~~~~
3412image filter unique: true
3413image filter unique: false
3414~~~~
3415
3416</fiddle-embed></div>
3417
3418---
3419
Cary Clark493df1f2017-08-25 13:14:33 -04003420<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003421## setImageFilter
3422
Cary Clarka560c472017-11-27 10:44:06 -05003423<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003424void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003425</pre>
3426
Cary Clark6fc50412017-09-21 12:31:06 -04003427Sets <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
3428<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 -04003429on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003430
Cary Clark6fc50412017-09-21 12:31:06 -04003431Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003432
3433### Parameters
3434
Cary Clark8cc16c72017-08-25 11:51:49 -04003435<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003436how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003437 </tr>
3438</table>
3439
3440### Example
3441
3442<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3443
3444---
3445
Cary Clark08895c42018-02-01 09:37:32 -05003446## <a name="Draw_Looper_Methods"></a> Draw Looper Methods
3447
Cary Clark4c06f5e2017-08-04 12:48:24 -04003448<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 -04003449to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003450
Cary Clark4c06f5e2017-08-04 12:48:24 -04003451<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3452<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 -05003453Set <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 -04003454
3455### Example
3456
3457<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3458
Cary Clark493df1f2017-08-25 13:14:33 -04003459<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003460## getDrawLooper
3461
Cary Clarka560c472017-11-27 10:44:06 -05003462<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003463SkDrawLooper* getDrawLooper() const
3464</pre>
3465
Cary Clark4c06f5e2017-08-04 12:48:24 -04003466Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3467Does 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 -04003468
3469### Return Value
3470
Cary Clark4c06f5e2017-08-04 12:48:24 -04003471<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003472
3473### Example
3474
3475<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3476
3477#### Example Output
3478
3479~~~~
3480nullptr == draw looper
3481nullptr != draw looper
3482~~~~
3483
3484</fiddle-embed></div>
3485
3486---
3487
Cary Clark493df1f2017-08-25 13:14:33 -04003488<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003489## refDrawLooper
3490
Cary Clarka560c472017-11-27 10:44:06 -05003491<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003492sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003493</pre>
3494
Cary Clark4c06f5e2017-08-04 12:48:24 -04003495Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3496Increases <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 -04003497
3498### Return Value
3499
Cary Clark4c06f5e2017-08-04 12:48:24 -04003500<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003501
3502### Example
3503
3504<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3505
3506#### Example Output
3507
3508~~~~
3509draw looper unique: true
3510draw looper unique: false
3511~~~~
3512
3513</fiddle-embed></div>
3514
3515---
3516
Cary Clark493df1f2017-08-25 13:14:33 -04003517<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003518## getLooper
3519
Cary Clarka560c472017-11-27 10:44:06 -05003520<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003521SkDrawLooper* getLooper() const
3522</pre>
3523
Cary Clark12799e12017-07-28 15:18:29 -04003524---
3525
Cary Clark493df1f2017-08-25 13:14:33 -04003526<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003527## setDrawLooper
3528
Cary Clarka560c472017-11-27 10:44:06 -05003529<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003530void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003531</pre>
3532
Cary Clark6fc50412017-09-21 12:31:06 -04003533Sets <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
3534<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
3535drawing unaltered.
3536
3537Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003538
3539### Parameters
3540
Cary Clark8cc16c72017-08-25 11:51:49 -04003541<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003542iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003543 </tr>
3544</table>
3545
3546### Example
3547
3548<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3549
3550---
3551
Cary Clark493df1f2017-08-25 13:14:33 -04003552<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003553## setLooper
3554
Cary Clarka560c472017-11-27 10:44:06 -05003555<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003556void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003557</pre>
3558
Cary Clark12799e12017-07-28 15:18:29 -04003559---
3560
Cary Clark08895c42018-02-01 09:37:32 -05003561## <a name="Text_Align"></a> Text Align
Cary Clark12799e12017-07-28 15:18:29 -04003562
Cary Clark8cc16c72017-08-25 11:51:49 -04003563## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003564
Cary Clarka560c472017-11-27 10:44:06 -05003565<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003566 enum <a href="#SkPaint_Align">Align</a> {
3567 <a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3568 <a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3569 <a href="#SkPaint_kRight_Align">kRight Align</a>,
3570 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04003571
3572 static constexpr int <a href="#SkPaint_kAlignCount">kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05003573</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003574
Cary Clark8cc16c72017-08-25 11:51:49 -04003575<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clark2a8c48b2018-02-15 17:31:24 -05003576<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>,
3577<a href="SkCanvas_Reference#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="SkCanvas_Reference#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3578<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>,
3579and <a href="SkCanvas_Reference#SkCanvas_drawString">SkCanvas::drawString</a>;
3580as 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 -04003581
3582The text position is set by the font for both horizontal and vertical text.
3583Typically, for horizontal text, the position is to the left side of the glyph on the
3584base line; and for vertical text, the position is the horizontal center of the glyph
3585at the caps height.
3586
Cary Clark7cfcbca2018-01-04 16:11:51 -05003587<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 -04003588using the metrics returned by the font.
3589
Cary Clark8cc16c72017-08-25 11:51:49 -04003590<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003591
3592### Constants
3593
3594<table>
3595 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003596 <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.
3597</td>
Cary Clark12799e12017-07-28 15:18:29 -04003598 </tr>
3599 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003600 <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 -05003601half its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3602</td>
Cary Clark12799e12017-07-28 15:18:29 -04003603 </tr>
3604 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003605 <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 -05003606and by its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3607</td>
Cary Clark12799e12017-07-28 15:18:29 -04003608 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04003609 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003610 <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.
3611</td>
Cary Clark12799e12017-07-28 15:18:29 -04003612 </tr>
3613
Cary Clark06c20f32018-03-20 15:53:27 -04003614
Cary Clark12799e12017-07-28 15:18:29 -04003615
3616### Example
3617
Cary Clark1a8d7622018-03-05 13:26:16 -05003618<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
3619</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003620
3621### Example
3622
Cary Clark1a8d7622018-03-05 13:26:16 -05003623<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.
3624</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003625
Cary Clark493df1f2017-08-25 13:14:33 -04003626<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003627## getTextAlign
3628
Cary Clarka560c472017-11-27 10:44:06 -05003629<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003630Align getTextAlign() const
3631</pre>
3632
Cary Clark8cc16c72017-08-25 11:51:49 -04003633Returns <a href="#Text_Align">Text Align</a>.
3634Returns <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 -04003635
3636### Return Value
3637
3638text placement relative to position
3639
3640### Example
3641
3642<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3643
3644#### Example Output
3645
3646~~~~
3647kLeft_Align == default
3648~~~~
3649
3650</fiddle-embed></div>
3651
3652---
3653
Cary Clark493df1f2017-08-25 13:14:33 -04003654<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003655## setTextAlign
3656
Cary Clarka560c472017-11-27 10:44:06 -05003657<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003658void setTextAlign(Align align)
3659</pre>
3660
Cary Clark8cc16c72017-08-25 11:51:49 -04003661Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3662Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003663
3664### Parameters
3665
Cary Clark8cc16c72017-08-25 11:51:49 -04003666<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003667text placement relative to position</td>
3668 </tr>
3669</table>
3670
3671### Example
3672
Cary Clark4c06f5e2017-08-04 12:48:24 -04003673<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 -05003674alignment out of range has no effect.
3675</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003676
3677---
3678
Cary Clark08895c42018-02-01 09:37:32 -05003679## <a name="Text_Size"></a> Text Size
3680
Cary Clark8cc16c72017-08-25 11:51:49 -04003681<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3682<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3683<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003684Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003685
3686### Example
3687
3688<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3689
Cary Clark493df1f2017-08-25 13:14:33 -04003690<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003691## getTextSize
3692
Cary Clarka560c472017-11-27 10:44:06 -05003693<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003694SkScalar getTextSize() const
3695</pre>
3696
Cary Clark8cc16c72017-08-25 11:51:49 -04003697Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003698
3699### Return Value
3700
3701typographic height of text
3702
3703### Example
3704
3705<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3706
3707---
3708
Cary Clark493df1f2017-08-25 13:14:33 -04003709<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003710## setTextSize
3711
Cary Clarka560c472017-11-27 10:44:06 -05003712<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003713void setTextSize(SkScalar textSize)
3714</pre>
3715
Cary Clark8cc16c72017-08-25 11:51:49 -04003716Sets <a href="#Text_Size">Text Size</a> in points.
3717Has 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 -04003718
3719### Parameters
3720
Cary Clark8cc16c72017-08-25 11:51:49 -04003721<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003722typographic height of text</td>
3723 </tr>
3724</table>
3725
3726### Example
3727
3728<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3729
3730---
3731
Cary Clark08895c42018-02-01 09:37:32 -05003732## <a name="Text_Scale_X"></a> Text Scale X
3733
Cary Clark8cc16c72017-08-25 11:51:49 -04003734<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003735<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003736is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003737<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3738<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003739
3740### Example
3741
3742<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3743
Cary Clark493df1f2017-08-25 13:14:33 -04003744<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003745## getTextScaleX
3746
Cary Clarka560c472017-11-27 10:44:06 -05003747<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003748SkScalar getTextScaleX() const
3749</pre>
3750
Cary Clark8cc16c72017-08-25 11:51:49 -04003751Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003752Default value is 1.
3753
3754### Return Value
3755
3756text horizontal scale
3757
3758### Example
3759
3760<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3761
3762---
3763
Cary Clark493df1f2017-08-25 13:14:33 -04003764<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003765## setTextScaleX
3766
Cary Clarka560c472017-11-27 10:44:06 -05003767<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003768void setTextScaleX(SkScalar scaleX)
3769</pre>
3770
Cary Clark8cc16c72017-08-25 11:51:49 -04003771Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003772Default value is 1.
3773
3774### Parameters
3775
Cary Clark8cc16c72017-08-25 11:51:49 -04003776<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003777text horizontal scale</td>
3778 </tr>
3779</table>
3780
3781### Example
3782
3783<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3784
3785---
3786
Cary Clark08895c42018-02-01 09:37:32 -05003787## <a name="Text_Skew_X"></a> Text Skew X
3788
Cary Clark8cc16c72017-08-25 11:51:49 -04003789<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003790<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003791is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003792<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3793<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003794
3795### Example
3796
3797<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3798
Cary Clark493df1f2017-08-25 13:14:33 -04003799<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003800## getTextSkewX
3801
Cary Clarka560c472017-11-27 10:44:06 -05003802<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003803SkScalar getTextSkewX() const
3804</pre>
3805
Cary Clark8cc16c72017-08-25 11:51:49 -04003806Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003807Default value is zero.
3808
3809### Return Value
3810
3811additional shear in x-axis relative to y-axis
3812
3813### Example
3814
3815<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3816
3817---
3818
Cary Clark493df1f2017-08-25 13:14:33 -04003819<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003820## setTextSkewX
3821
Cary Clarka560c472017-11-27 10:44:06 -05003822<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003823void setTextSkewX(SkScalar skewX)
3824</pre>
3825
Cary Clark8cc16c72017-08-25 11:51:49 -04003826Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003827Default value is zero.
3828
3829### Parameters
3830
Cary Clark8cc16c72017-08-25 11:51:49 -04003831<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003832additional shear in x-axis relative to y-axis</td>
3833 </tr>
3834</table>
3835
3836### Example
3837
3838<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3839
3840---
3841
Cary Clark08895c42018-02-01 09:37:32 -05003842## <a name="Text_Encoding"></a> Text Encoding
Cary Clark12799e12017-07-28 15:18:29 -04003843
Cary Clark8cc16c72017-08-25 11:51:49 -04003844## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003845
Cary Clarka560c472017-11-27 10:44:06 -05003846<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003847 enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3848 <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3849 <a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3850 <a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3851 <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
3852 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003853</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003854
Cary Clark6fc50412017-09-21 12:31:06 -04003855<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003856size, 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 -04003857
Cary Clarka560c472017-11-27 10:44:06 -05003858Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003859All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003860in the total storage required.
3861
Cary Clark7cfcbca2018-01-04 16:11:51 -05003862<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 -04003863
Cary Clark7cfcbca2018-01-04 16:11:51 -05003864<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 -04003865
Cary Clark7cfcbca2018-01-04 16:11:51 -05003866<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 -04003867
Cary Clark7cfcbca2018-01-04 16:11:51 -05003868<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 -04003869A glyph index is a 16-bit word.
3870
Cary Clark8cc16c72017-08-25 11:51:49 -04003871<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 -04003872
3873### Constants
3874
3875<table>
3876 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003877 <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.
3878</td>
Cary Clark12799e12017-07-28 15:18:29 -04003879 </tr>
3880 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003881 <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.
3882</td>
Cary Clark12799e12017-07-28 15:18:29 -04003883 </tr>
3884 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003885 <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.
3886</td>
Cary Clark12799e12017-07-28 15:18:29 -04003887 </tr>
3888 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003889 <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.
3890</td>
Cary Clark12799e12017-07-28 15:18:29 -04003891 </tr>
3892
Cary Clark06c20f32018-03-20 15:53:27 -04003893
Cary Clark12799e12017-07-28 15:18:29 -04003894
3895### Example
3896
Cary Clarka560c472017-11-27 10:44:06 -05003897<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3898Second line is encoded in UTF-16.
3899Third line is encoded in UTF-32.
Cary Clark1a8d7622018-03-05 13:26:16 -05003900Fourth line has 16 bit glyph indices.
3901</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003902
Cary Clark493df1f2017-08-25 13:14:33 -04003903<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003904## getTextEncoding
3905
Cary Clarka560c472017-11-27 10:44:06 -05003906<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003907TextEncoding getTextEncoding() const
3908</pre>
3909
Cary Clark8cc16c72017-08-25 11:51:49 -04003910Returns <a href="#Text_Encoding">Text Encoding</a>.
3911<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 -04003912
3913### Return Value
3914
Cary Clark7cfcbca2018-01-04 16:11:51 -05003915one 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 -04003916<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003917
3918### Example
3919
3920<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
3921
3922#### Example Output
3923
3924~~~~
3925kUTF8_TextEncoding == text encoding
3926kGlyphID_TextEncoding == text encoding
3927~~~~
3928
3929</fiddle-embed></div>
3930
3931---
3932
Cary Clark493df1f2017-08-25 13:14:33 -04003933<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003934## setTextEncoding
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 -04003937void setTextEncoding(TextEncoding encoding)
3938</pre>
3939
Cary Clark7cfcbca2018-01-04 16:11:51 -05003940Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003941<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
3942Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003943
3944### Parameters
3945
Cary Clark8cc16c72017-08-25 11:51:49 -04003946<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003947one 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 -04003948<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003949 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04003950#
3951
Cary Clark12799e12017-07-28 15:18:29 -04003952</table>
3953
3954### Example
3955
3956<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
3957
3958#### Example Output
3959
3960~~~~
39614 != text encoding
3962~~~~
3963
3964</fiddle-embed></div>
3965
3966---
3967
Cary Clark08895c42018-02-01 09:37:32 -05003968## <a name="Font_Metrics"></a> Font Metrics
3969
Cary Clark2a8c48b2018-02-15 17:31:24 -05003970<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 -05003971The 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 -04003972<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04003973
Cary Clark4c06f5e2017-08-04 12:48:24 -04003974<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 -04003975X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
3976are positive.
3977Y-axis values above the baseline are negative, and below the baseline are positive.
3978
3979### Example
3980
Ben Wagnere5806492017-11-09 12:08:31 -05003981<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003982
Cary Clark8cc16c72017-08-25 11:51:49 -04003983# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04003984
Cary Clarka560c472017-11-27 10:44:06 -05003985<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003986 struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
3987 enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
3988 <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
3989 <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
3990 <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
3991 <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
3992 };
Cary Clark12799e12017-07-28 15:18:29 -04003993
Cary Clark186d08f2018-04-03 08:43:27 -04003994 uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
3995 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
3996 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
3997 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
3998 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
3999 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4000 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4001 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4002 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4003 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4004 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4005 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4006 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4007 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4008 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4009 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004010
Cary Clark186d08f2018-04-03 08:43:27 -04004011 bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4012 bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4013 bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4014 bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
4015 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004016</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004017
Cary Clark154beea2017-10-26 07:58:48 -04004018<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
4019computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4020not available.
4021
Ben Wagnere5806492017-11-09 12:08:31 -05004022All vertical values relative to the baseline are given y-down. As such, zero is on the
4023baseline, negative values are above the baseline, and positive values are below the
4024baseline.
4025
Cary Clark154beea2017-10-26 07:58:48 -04004026<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
4027are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004028
Cary Clark154beea2017-10-26 07:58:48 -04004029<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
4030are valid, since their value may be zero.
4031
Cary Clark8cc16c72017-08-25 11:51:49 -04004032## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004033
Cary Clarka560c472017-11-27 10:44:06 -05004034<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04004035 enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4036 <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4037 <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4038 <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4039 <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
4040 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004041</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004042
Cary Clark154beea2017-10-26 07:58:48 -04004043<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4044the underline or strikeout metric may be valid and zero.
4045Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4046
Cary Clark12799e12017-07-28 15:18:29 -04004047### Constants
4048
4049<table>
4050 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004051 <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.
4052</td>
Cary Clark12799e12017-07-28 15:18:29 -04004053 </tr>
4054 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004055 <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.
4056</td>
Cary Clark12799e12017-07-28 15:18:29 -04004057 </tr>
4058 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004059 <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.
4060</td>
Cary Clark12799e12017-07-28 15:18:29 -04004061 </tr>
4062 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004063 <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.
4064</td>
Cary Clark12799e12017-07-28 15:18:29 -04004065 </tr>
4066
Cary Clark06c20f32018-03-20 15:53:27 -04004067
Cary Clark12799e12017-07-28 15:18:29 -04004068
Cary Clark8cc16c72017-08-25 11:51:49 -04004069<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004070
Cary Clark8cc16c72017-08-25 11:51:49 -04004071<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004072
Cary Clark8cc16c72017-08-25 11:51:49 -04004073<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004074
Ben Wagnere5806492017-11-09 12:08:31 -05004075Greatest extent above the baseline for any glyph.
4076Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004077
Cary Clark8cc16c72017-08-25 11:51:49 -04004078<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004079
4080Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004081Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004082
Cary Clark8cc16c72017-08-25 11:51:49 -04004083<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004084
4085Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004086Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004087
Cary Clark8cc16c72017-08-25 11:51:49 -04004088<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004089
Ben Wagnere5806492017-11-09 12:08:31 -05004090Greatest extent below the baseline for any glyph.
4091Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004092
Cary Clark8cc16c72017-08-25 11:51:49 -04004093<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004094
4095Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004096Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004097
Cary Clark8cc16c72017-08-25 11:51:49 -04004098<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004099
4100Average character width, if it is available.
4101Zero if no average width is stored in the font.
4102
Cary Clark8cc16c72017-08-25 11:51:49 -04004103<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004104
4105Maximum character width.
4106
Cary Clark8cc16c72017-08-25 11:51:49 -04004107<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004108
Cary Clark2a8c48b2018-02-15 17:31:24 -05004109Minimum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004110Typically less than zero.
4111
Cary Clark8cc16c72017-08-25 11:51:49 -04004112<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004113
Cary Clark2a8c48b2018-02-15 17:31:24 -05004114Maximum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004115Typically greater than zero.
4116
Cary Clark8cc16c72017-08-25 11:51:49 -04004117<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004118
4119Height of a lower-case 'x'.
4120May be zero if no lower-case height is stored in the font.
4121
Cary Clark8cc16c72017-08-25 11:51:49 -04004122<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004123
4124Height of an upper-case letter.
4125May be zero if no upper-case height is stored in the font.
4126
Cary Clark8cc16c72017-08-25 11:51:49 -04004127<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004128
Ben Wagnere5806492017-11-09 12:08:31 -05004129Underline thickness.
4130
4131If 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 -04004132If <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 -04004133
Cary Clark8cc16c72017-08-25 11:51:49 -04004134<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004135
Ben Wagnere5806492017-11-09 12:08:31 -05004136Position of the top of the underline stroke relative to the baseline.
4137Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004138
Cary Clark8cc16c72017-08-25 11:51:49 -04004139If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4140If <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 -04004141
Cary Clark8cc16c72017-08-25 11:51:49 -04004142<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004143
Ben Wagnere5806492017-11-09 12:08:31 -05004144Strikeout thickness.
4145
4146If 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 -04004147If <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 -04004148
Cary Clark8cc16c72017-08-25 11:51:49 -04004149<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004150
Ben Wagnere5806492017-11-09 12:08:31 -05004151Position of the bottom of the strikeout stroke relative to the baseline.
4152Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004153
Cary Clark8cc16c72017-08-25 11:51:49 -04004154If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4155If <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 -04004156
Cary Clark493df1f2017-08-25 13:14:33 -04004157<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004158## hasUnderlineThickness
4159
Cary Clarka560c472017-11-27 10:44:06 -05004160<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004161bool hasUnderlineThickness(SkScalar* thickness) const
4162</pre>
4163
Ben Wagnere5806492017-11-09 12:08:31 -05004164If <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 -04004165<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,
4166return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004167
4168### Parameters
4169
Cary Clark8cc16c72017-08-25 11:51:49 -04004170<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004171storage for underline width</td>
4172 </tr>
4173</table>
4174
4175### Return Value
4176
4177true if font specifies underline width
4178
4179---
4180
Cary Clark493df1f2017-08-25 13:14:33 -04004181<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004182## hasUnderlinePosition
4183
Cary Clarka560c472017-11-27 10:44:06 -05004184<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004185bool hasUnderlinePosition(SkScalar* position) const
4186</pre>
4187
Ben Wagnere5806492017-11-09 12:08:31 -05004188If <a href="#Font_Metrics">Font Metrics</a> has a valid underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004189<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,
4190return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004191
4192### Parameters
4193
Cary Clark8cc16c72017-08-25 11:51:49 -04004194<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4195storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004196 </tr>
4197</table>
4198
4199### Return Value
4200
Cary Clark8cc16c72017-08-25 11:51:49 -04004201true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004202
4203---
4204
Cary Clark493df1f2017-08-25 13:14:33 -04004205<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004206## hasStrikeoutThickness
4207
Cary Clarka560c472017-11-27 10:44:06 -05004208<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004209bool hasStrikeoutThickness(SkScalar* thickness) const
4210</pre>
4211
Ben Wagnere5806492017-11-09 12:08:31 -05004212If <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 -04004213<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,
4214return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004215
4216### Parameters
4217
Cary Clark8cc16c72017-08-25 11:51:49 -04004218<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004219storage for strikeout width</td>
4220 </tr>
4221</table>
4222
4223### Return Value
4224
4225true if font specifies strikeout width
4226
4227---
4228
Cary Clark493df1f2017-08-25 13:14:33 -04004229<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004230## hasStrikeoutPosition
4231
Cary Clarka560c472017-11-27 10:44:06 -05004232<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004233bool hasStrikeoutPosition(SkScalar* position) const
4234</pre>
4235
Ben Wagnere5806492017-11-09 12:08:31 -05004236If <a href="#Font_Metrics">Font Metrics</a> has a valid strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004237<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,
4238return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004239
4240### Parameters
4241
Cary Clark8cc16c72017-08-25 11:51:49 -04004242<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4243storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004244 </tr>
4245</table>
4246
4247### Return Value
4248
Cary Clark8cc16c72017-08-25 11:51:49 -04004249true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004250
4251---
4252
Cary Clark493df1f2017-08-25 13:14:33 -04004253<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004254## getFontMetrics
4255
Cary Clarka560c472017-11-27 10:44:06 -05004256<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004257SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4258</pre>
4259
Cary Clark8cc16c72017-08-25 11:51:49 -04004260Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4261The 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 -04004262descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004263If <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>.
4264Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4265dimensions 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>,
4266<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4267Results 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 -04004268is ignored.
4269
4270### Parameters
4271
Cary Clark8cc16c72017-08-25 11:51:49 -04004272<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4273storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4274 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004275additional multiplier for returned values</td>
4276 </tr>
4277</table>
4278
4279### Return Value
4280
4281recommended spacing between lines
4282
4283### Example
4284
4285<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4286
4287### See Also
4288
Cary Clark8cc16c72017-08-25 11:51:49 -04004289<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 -04004290
4291---
4292
Cary Clark493df1f2017-08-25 13:14:33 -04004293<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004294## getFontSpacing
4295
Cary Clarka560c472017-11-27 10:44:06 -05004296<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004297SkScalar getFontSpacing() const
4298</pre>
4299
4300Returns the recommended spacing between lines: the sum of metrics
4301descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004302Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004303dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004304Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004305
4306### Return Value
4307
4308recommended spacing between lines
4309
4310### Example
4311
4312<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4313
4314#### Example Output
4315
4316~~~~
4317textSize: 12 fontSpacing: 13.9688
4318textSize: 18 fontSpacing: 20.9531
4319textSize: 24 fontSpacing: 27.9375
4320textSize: 32 fontSpacing: 37.25
4321~~~~
4322
4323</fiddle-embed></div>
4324
4325---
4326
Cary Clark493df1f2017-08-25 13:14:33 -04004327<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004328## getFontBounds
4329
Cary Clarka560c472017-11-27 10:44:06 -05004330<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004331SkRect getFontBounds() const
4332</pre>
4333
Cary Clark2a8c48b2018-02-15 17:31:24 -05004334Returns the union of bounds of all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004335Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004336ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4337and <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 -04004338
Cary Clark8cc16c72017-08-25 11:51:49 -04004339If <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 -05004340returns 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 -04004341<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 -04004342
4343### Return Value
4344
Cary Clark2a8c48b2018-02-15 17:31:24 -05004345union of bounds of all <a href="undocumented#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004346
4347### Example
4348
4349<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4350
4351#### Example Output
4352
4353~~~~
4354metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4355font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4356~~~~
4357
4358</fiddle-embed></div>
4359
4360---
4361
Cary Clark493df1f2017-08-25 13:14:33 -04004362<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004363## textToGlyphs
4364
Cary Clarka560c472017-11-27 10:44:06 -05004365<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004366int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4367</pre>
4368
Cary Clark8cc16c72017-08-25 11:51:49 -04004369Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4370Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4371<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>.
4372<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004373
Cary Clarkbc5697d2017-10-04 14:31:33 -04004374Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004375
Cary Clark8cc16c72017-08-25 11:51:49 -04004376If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4377If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004378
Cary Clark8cc16c72017-08-25 11:51:49 -04004379If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004380<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004381
4382### Parameters
4383
Cary Clark8cc16c72017-08-25 11:51:49 -04004384<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004385character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004386 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004387length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004388 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004389storage for glyph indices; may be nullptr</td>
4390 </tr>
4391</table>
4392
4393### Return Value
4394
Cary Clark8cc16c72017-08-25 11:51:49 -04004395number 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 -04004396
4397### Example
4398
4399<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4400
4401---
4402
Cary Clark493df1f2017-08-25 13:14:33 -04004403<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004404## countText
4405
Cary Clarka560c472017-11-27 10:44:06 -05004406<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004407int countText(const void* text, size_t byteLength) const
4408</pre>
4409
Cary Clark2a8c48b2018-02-15 17:31:24 -05004410Returns the number of <a href="undocumented#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4411Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004412Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004413
4414### Parameters
4415
Cary Clark8cc16c72017-08-25 11:51:49 -04004416<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004417character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004418 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004419length of character storage in bytes</td>
4420 </tr>
4421</table>
4422
4423### Return Value
4424
Cary Clark2a8c48b2018-02-15 17:31:24 -05004425number 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 -04004426
4427### Example
4428
4429<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4430
4431#### Example Output
4432
4433~~~~
4434count = 5
4435~~~~
4436
4437</fiddle-embed></div>
4438
4439---
4440
Cary Clark493df1f2017-08-25 13:14:33 -04004441<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004442## containsText
4443
Cary Clarka560c472017-11-27 10:44:06 -05004444<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004445bool containsText(const void* text, size_t byteLength) const
4446</pre>
4447
Cary Clark7cfcbca2018-01-04 16:11:51 -05004448Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004449Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004450<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004451
Cary Clark8cc16c72017-08-25 11:51:49 -04004452If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4453returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4454does 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 -04004455
Cary Clarkce101242017-09-01 15:51:02 -04004456Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004457
4458### Parameters
4459
Cary Clark8cc16c72017-08-25 11:51:49 -04004460<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004461array of characters or <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004462 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4463number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004464 </tr>
4465</table>
4466
4467### Return Value
4468
Cary Clark8cc16c72017-08-25 11:51:49 -04004469true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004470
4471### Example
4472
Cary Clark8cc16c72017-08-25 11:51:49 -04004473<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 -05004474corresponding to the Unicode surrogate code point.
4475</div>
Cary Clark12799e12017-07-28 15:18:29 -04004476
4477#### Example Output
4478
4479~~~~
44800x00b0 == has char
44810xd800 != has char
4482~~~~
4483
4484</fiddle-embed></div>
4485
4486### Example
4487
Cary Clark8cc16c72017-08-25 11:51:49 -04004488<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 -05004489that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.
4490</div>
Cary Clark12799e12017-07-28 15:18:29 -04004491
4492#### Example Output
4493
4494~~~~
44950x01ff == has glyph
44960x0000 != has glyph
44970xffff == has glyph
4498~~~~
4499
4500</fiddle-embed></div>
4501
4502### See Also
4503
Cary Clark8cc16c72017-08-25 11:51:49 -04004504<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004505
4506---
4507
Cary Clark493df1f2017-08-25 13:14:33 -04004508<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004509## glyphsToUnichars
4510
Cary Clarka560c472017-11-27 10:44:06 -05004511<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004512void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4513</pre>
4514
Cary Clark7cfcbca2018-01-04 16:11:51 -05004515Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4516<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004517Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004518by <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 -04004519
Cary Clark2a8c48b2018-02-15 17:31:24 -05004520Only supported on platforms that use FreeType as the <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004521
4522### Parameters
4523
Cary Clark8cc16c72017-08-25 11:51:49 -04004524<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004525array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004526 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004527length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004528 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004529storage for character codes, one per glyph</td>
4530 </tr>
4531</table>
4532
4533### Example
4534
Cary Clark1a8d7622018-03-05 13:26:16 -05004535<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.
4536</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004537
4538---
4539
Cary Clark08895c42018-02-01 09:37:32 -05004540## <a name="Measure_Text"></a> Measure Text
Cary Clark12799e12017-07-28 15:18:29 -04004541
Cary Clark493df1f2017-08-25 13:14:33 -04004542<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004543## measureText
4544
Cary Clarka560c472017-11-27 10:44:06 -05004545<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004546SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4547</pre>
4548
Cary Clark8cc16c72017-08-25 11:51:49 -04004549Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4550and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4551The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4552Uses <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,
4553and <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
4554<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4555Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4556The 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 -04004557
4558### Parameters
4559
Cary Clark8cc16c72017-08-25 11:51:49 -04004560<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004561character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004562 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4563number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4564 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004565returns bounding box relative to (0, 0) if not nullptr</td>
4566 </tr>
4567</table>
4568
4569### Return Value
4570
4571advance width or height
4572
4573### Example
4574
4575<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4576
4577---
4578
Cary Clark2dc84ad2018-01-26 12:56:22 -05004579<a name="SkPaint_measureText_2"></a>
4580
Cary Clarka560c472017-11-27 10:44:06 -05004581<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004582SkScalar measureText(const void* text, size_t length) const
4583</pre>
4584
Cary Clark8cc16c72017-08-25 11:51:49 -04004585Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4586and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4587The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4588Uses <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,
4589and <a href="#Text_Size">Text Size</a> to scale the metrics.
4590Does 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 -04004591
4592### Parameters
4593
Cary Clark8cc16c72017-08-25 11:51:49 -04004594<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004595character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004596 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4597number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004598 </tr>
4599</table>
4600
4601### Return Value
4602
4603advance width or height
4604
4605### Example
4606
4607<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4608
4609#### Example Output
4610
4611~~~~
4612default width = 5
4613double width = 10
4614~~~~
4615
4616</fiddle-embed></div>
4617
4618---
4619
Cary Clark493df1f2017-08-25 13:14:33 -04004620<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004621## breakText
4622
Cary Clarka560c472017-11-27 10:44:06 -05004623<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004624size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004625 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004626</pre>
4627
Cary Clark8cc16c72017-08-25 11:51:49 -04004628Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4629If <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
4630equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4631If <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
4632equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4633Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4634Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4635Uses <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,
4636and <a href="#Text_Size">Text Size</a> to scale the metrics.
4637Does 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 -04004638
4639### Parameters
4640
Cary Clark8cc16c72017-08-25 11:51:49 -04004641<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004642character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004643 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4644number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4645 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4646advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4647 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4648returns 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 -04004649 </tr>
4650</table>
4651
4652### Return Value
4653
Cary Clark8cc16c72017-08-25 11:51:49 -04004654bytes 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 -04004655
4656### Example
4657
Cary Clark4c06f5e2017-08-04 12:48:24 -04004658<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 -05004659<a href="undocumented#Line">Line</a> under "" shows measured width after breaking <a href="#SkPaint_breakText_text">text</a>.
4660</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004661
4662---
4663
Cary Clark493df1f2017-08-25 13:14:33 -04004664<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004665## getTextWidths
4666
Cary Clarka560c472017-11-27 10:44:06 -05004667<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4668int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004669</pre>
4670
Cary Clark8cc16c72017-08-25 11:51:49 -04004671Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4672the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4673Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4674If <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 -05004675if <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 -04004676If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4677If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4678Uses <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,
4679and <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>.
4680Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4681Does 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 -04004682
4683### Parameters
4684
Cary Clark8cc16c72017-08-25 11:51:49 -04004685<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004686character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004687 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4688number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4689 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4690returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4691 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4692returns <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 -04004693 </tr>
4694</table>
4695
4696### Return Value
4697
Cary Clark8cc16c72017-08-25 11:51:49 -04004698glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004699
4700### Example
4701
Cary Clark2a8c48b2018-02-15 17:31:24 -05004702<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 -05004703The underlines show the <a href="#SkPaint_getTextWidths_text">text</a> advance, spaced to keep them distinct.
4704</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004705
4706---
4707
Cary Clark08895c42018-02-01 09:37:32 -05004708## <a name="Text_Path"></a> Text Path
4709
Cary Clark2a8c48b2018-02-15 17:31:24 -05004710<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 -04004711
Cary Clark493df1f2017-08-25 13:14:33 -04004712<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004713## getTextPath
4714
Cary Clarka560c472017-11-27 10:44:06 -05004715<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4716void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004717</pre>
4718
Cary Clark8cc16c72017-08-25 11:51:49 -04004719Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4720Uses <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,
4721and <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.
4722All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4723Uses <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 -04004724
4725### Parameters
4726
Cary Clark8cc16c72017-08-25 11:51:49 -04004727<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004728character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004729 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4730number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4731 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004732<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 -04004733 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004734<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 -04004735 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004736geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004737 </tr>
4738</table>
4739
4740### Example
4741
Cary Clark4c06f5e2017-08-04 12:48:24 -04004742<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 -05004743the offset location. The result is rendered with one draw call.
4744</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004745
4746---
4747
Cary Clark493df1f2017-08-25 13:14:33 -04004748<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004749## getPosTextPath
4750
Cary Clarka560c472017-11-27 10:44:06 -05004751<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4752void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004753</pre>
4754
Cary Clark8cc16c72017-08-25 11:51:49 -04004755Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4756Uses <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,
4757and <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.
4758All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4759Uses <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>.
4760<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004761
4762### Parameters
4763
Cary Clark8cc16c72017-08-25 11:51:49 -04004764<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004765character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004766 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4767number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4768 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004769positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004770 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004771geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004772 </tr>
4773</table>
4774
4775### Example
4776
Cary Clark1a8d7622018-03-05 13:26:16 -05004777<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three <a href="undocumented#Glyph">Glyphs</a> to eliminate overlaps, and strokes the result.
4778</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004779
4780---
4781
Cary Clark08895c42018-02-01 09:37:32 -05004782## <a name="Text_Intercepts"></a> Text Intercepts
4783
Cary Clark2a8c48b2018-02-15 17:31:24 -05004784<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 -04004785of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004786underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004787
Cary Clark493df1f2017-08-25 13:14:33 -04004788<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004789## getTextIntercepts
4790
Cary Clarka560c472017-11-27 10:44:06 -05004791<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004792int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4793 const SkScalar bounds[2], SkScalar* intervals) const
4794</pre>
4795
Cary Clark8cc16c72017-08-25 11:51:49 -04004796Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4797<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 -05004798The 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 -05004799the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004800Uses <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,
4801and <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.
4802Uses <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>.
4803Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4804<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004805
4806### Parameters
4807
Cary Clark8cc16c72017-08-25 11:51:49 -04004808<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004809character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004810 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4811number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4812 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004813<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 -04004814 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004815<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 -04004816 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004817lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004818 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004819returned intersections; may be nullptr</td>
4820 </tr>
4821</table>
4822
4823### Return Value
4824
4825number of intersections; may be zero
4826
4827### Example
4828
Cary Clark1a8d7622018-03-05 13:26:16 -05004829<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
4830</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004831
4832---
4833
Cary Clark493df1f2017-08-25 13:14:33 -04004834<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004835## getPosTextIntercepts
4836
Cary Clarka560c472017-11-27 10:44:06 -05004837<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004838int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4839 const SkScalar bounds[2], SkScalar* intervals) const
4840</pre>
4841
Cary Clark8cc16c72017-08-25 11:51:49 -04004842Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4843<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 -05004844The 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 -05004845the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004846Uses <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,
4847and <a href="#Text_Size">Text Size</a>, <a href="#Fake_Bold">Fake Bold</a>, and <a href="undocumented#Path_Effect">Path Effect</a> to scale and modify the glyph paths.
4848Uses <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>.
4849Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4850<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004851
4852### Parameters
4853
Cary Clark8cc16c72017-08-25 11:51:49 -04004854<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004855character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004856 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4857number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4858 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004859positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004860 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004861lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004862 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004863returned intersections; may be nullptr</td>
4864 </tr>
4865</table>
4866
4867### Return Value
4868
Cary Clarka523d2d2017-08-30 08:58:10 -04004869number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004870
4871### Example
4872
Cary Clark1a8d7622018-03-05 13:26:16 -05004873<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.
4874</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004875
4876---
4877
Cary Clark493df1f2017-08-25 13:14:33 -04004878<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004879## getPosTextHIntercepts
4880
Cary Clarka560c472017-11-27 10:44:06 -05004881<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4882int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4883 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004884</pre>
4885
Cary Clark8cc16c72017-08-25 11:51:49 -04004886Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4887<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 -05004888The 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 -05004889the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004890Uses <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,
4891and <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.
4892Uses <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>.
4893Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4894<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004895
4896### Parameters
4897
Cary Clark8cc16c72017-08-25 11:51:49 -04004898<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004899character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004900 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4901number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4902 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004903positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004904 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004905position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004906 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004907lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004908 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004909returned intersections; may be nullptr</td>
4910 </tr>
4911</table>
4912
4913### Return Value
4914
4915number of intersections; may be zero
4916
4917### Example
4918
Cary Clark1a8d7622018-03-05 13:26:16 -05004919<div><fiddle-embed name="dc9851c43acc3716aca8c9a4d40d452d"><div><a href="undocumented#Text">Text</a> intercepts do not take stroke thickness into consideration.
4920</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004921
4922---
4923
Cary Clark493df1f2017-08-25 13:14:33 -04004924<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004925## getTextBlobIntercepts
4926
Cary Clarka560c472017-11-27 10:44:06 -05004927<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4928int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004929</pre>
4930
Cary Clark8cc16c72017-08-25 11:51:49 -04004931Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4932<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clark2a8c48b2018-02-15 17:31:24 -05004933The 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 -05004934the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004935Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04004936and <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 -04004937Uses 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 -05004938<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
4939
Cary Clark8cc16c72017-08-25 11:51:49 -04004940Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
4941<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004942
4943### Parameters
4944
Cary Clark8cc16c72017-08-25 11:51:49 -04004945<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004946<a href="undocumented#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004947 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004948lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004949 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004950returned intersections; may be nullptr</td>
4951 </tr>
4952</table>
4953
4954### Return Value
4955
4956number of intersections; may be zero
4957
4958### Example
4959
Cary Clark3cd22cc2017-12-01 11:49:58 -05004960<div><fiddle-embed name="71959a66b2290d70003887c0de339266"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004961
4962---
4963
Cary Clark493df1f2017-08-25 13:14:33 -04004964<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004965## nothingToDraw
4966
Cary Clarka560c472017-11-27 10:44:06 -05004967<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004968bool nothingToDraw() const
4969</pre>
4970
Cary Clark8cc16c72017-08-25 11:51:49 -04004971Returns true if <a href="#Paint">Paint</a> prevents all drawing;
4972otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004973
Cary Clark2d4bf5f2018-04-16 08:37:38 -04004974Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="SkColor_Reference#Alpha">Color Alpha</a> computes a
4975new <a href="SkColor_Reference#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004976
4977### Return Value
4978
Cary Clark8cc16c72017-08-25 11:51:49 -04004979true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004980
4981### Example
4982
4983<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
4984
4985#### Example Output
4986
4987~~~~
4988initial nothing to draw: false
4989blend dst nothing to draw: true
4990blend src over nothing to draw: false
4991alpha 0 nothing to draw: true
4992~~~~
4993
4994</fiddle-embed></div>
4995
4996---
4997
Cary Clark08895c42018-02-01 09:37:32 -05004998## <a name="Fast_Bounds"></a> Fast Bounds
4999
Cary Clark8cc16c72017-08-25 11:51:49 -04005000<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5001<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005002
Cary Clark493df1f2017-08-25 13:14:33 -04005003<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005004## canComputeFastBounds
5005
Cary Clarka560c472017-11-27 10:44:06 -05005006<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005007bool canComputeFastBounds() const
5008</pre>
5009
Cary Clark8cc16c72017-08-25 11:51:49 -04005010Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5011to 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 -04005012always returns false.
5013
5014### Return Value
5015
Cary Clark8cc16c72017-08-25 11:51:49 -04005016true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005017
5018---
5019
Cary Clark493df1f2017-08-25 13:14:33 -04005020<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005021## computeFastBounds
5022
Cary Clarka560c472017-11-27 10:44:06 -05005023<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005024const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5025</pre>
5026
Cary Clark8cc16c72017-08-25 11:51:49 -04005027Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005028raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005029effects 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 -04005030parameter. It returns the adjusted bounds that can then be used
Cary Clark2a8c48b2018-02-15 17:31:24 -05005031for <a href="SkCanvas_Reference#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005032
Cary Clarkbc5697d2017-10-04 14:31:33 -04005033The 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 -04005034should 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 -04005035use 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 -04005036<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005037
5038### Parameters
5039
Cary Clark8cc16c72017-08-25 11:51:49 -04005040<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5041geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5042 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005043computed bounds of geometry; may not be nullptr</td>
5044 </tr>
5045</table>
5046
5047### Return Value
5048
5049fast computed bounds
5050
5051---
5052
Cary Clark493df1f2017-08-25 13:14:33 -04005053<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005054## computeFastStrokeBounds
5055
Cary Clarka560c472017-11-27 10:44:06 -05005056<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005057const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5058</pre>
5059
5060### Parameters
5061
Cary Clark8cc16c72017-08-25 11:51:49 -04005062<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5063geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5064 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005065computed bounds of geometry</td>
5066 </tr>
5067</table>
5068
5069### Return Value
5070
5071fast computed bounds
5072
5073---
5074
Cary Clark493df1f2017-08-25 13:14:33 -04005075<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005076## doComputeFastBounds
5077
Cary Clarka560c472017-11-27 10:44:06 -05005078<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5079const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005080</pre>
5081
Cary Clarkce101242017-09-01 15:51:02 -04005082Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5083account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5084altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005085
5086### Parameters
5087
Cary Clark8cc16c72017-08-25 11:51:49 -04005088<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5089geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5090 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005091computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005092 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5093overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005094 </tr>
5095</table>
5096
5097### Return Value
5098
5099fast computed bounds
5100
5101---
5102
Cary Clark78de7512018-02-07 07:27:09 -05005103## <a name="Utility"></a> Utility
5104
5105| name | description |
5106| --- | --- |
Cary Clark2a8c48b2018-02-15 17:31:24 -05005107| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="undocumented#Glyph">Glyphs</a> |
5108| <a href="#SkPaint_countText">countText</a> | returns number of <a href="undocumented#Glyph">Glyphs</a> in text |
5109| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="undocumented#Glyph">Glyphs</a> into text |
Cary Clark78de7512018-02-07 07:27:09 -05005110| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
5111| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
5112| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
5113
Cary Clark493df1f2017-08-25 13:14:33 -04005114<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005115## toString
5116
Cary Clarka560c472017-11-27 10:44:06 -05005117<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark2dc84ad2018-01-26 12:56:22 -05005118void toString(SkString* str) const
Cary Clark12799e12017-07-28 15:18:29 -04005119</pre>
5120
Cary Clarkce101242017-09-01 15:51:02 -04005121Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
Update Docs485dc862018-04-06 06:23:24 +00005122internal debugging tools.
Cary Clark12799e12017-07-28 15:18:29 -04005123
5124### Parameters
5125
Cary Clark8cc16c72017-08-25 11:51:49 -04005126<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005127storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005128 </tr>
5129</table>
5130
5131### Example
5132
5133<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5134
5135#### Example Output
5136
5137~~~~
5138text size = 12
5139~~~~
5140
5141</fiddle-embed></div>
5142
Cary Clark2ade9972017-11-02 17:49:34 -04005143### See Also
5144
Cary Clark2a8c48b2018-02-15 17:31:24 -05005145<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 -04005146
Cary Clark12799e12017-07-28 15:18:29 -04005147---
5148