blob: a0207fa69e965a41adcdd0ab1f0801d6e0da3395 [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 |
Cary Clark5081eed2018-01-22 07:55:48 -0500182| <a href="#SkPaint_isDither">isDither</a> | returns true if <a href="#Dither">Dither</a> is set |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500183| <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 -0500184| <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 -0500185| <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 -0500186| <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 -0500187| <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> |
188| <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 -0500189| <a href="#SkPaint_isVerticalText">isVerticalText</a> | returns true if <a href="#Vertical_Text">Vertical Text</a> is set |
190| <a href="#SkPaint_measureText">measureText</a> | returns advance width and bounds of text |
191| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
192| <a href="#SkPaint_refColorFilter">refColorFilter</a> | references <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered |
193| <a href="#SkPaint_refDrawLooper">refDrawLooper</a> | references <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
194| <a href="#SkPaint_refImageFilter">refImageFilter</a> | references <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur |
195| <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> |
196| <a href="#SkPaint_refPathEffect">refPathEffect</a> | references <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
197| <a href="#SkPaint_refShader">refShader</a> | references <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
198| <a href="#SkPaint_refTypeface">refTypeface</a> | references <a href="undocumented#Typeface">Typeface</a>, font description |
199| <a href="#SkPaint_reset">reset</a> | sets to default values |
200| <a href="#SkPaint_setARGB">setARGB</a> | sets color by component |
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400201| <a href="#SkPaint_setAlpha">setAlpha</a> | sets <a href="SkColor_Reference#Alpha">Color Alpha</a>, color opacity |
Cary Clark5081eed2018-01-22 07:55:48 -0500202| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | sets or clears Anti-alias |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500203| <a href="#SkPaint_setAutohinted">setAutohinted</a> | sets <a href="undocumented#Glyph">Glyphs</a> to always be hinted |
Cary Clark5081eed2018-01-22 07:55:48 -0500204| <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 -0400205| <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 -0500206| <a href="#SkPaint_setColorFilter">setColorFilter</a> | sets <a href="undocumented#Color_Filter">Color Filter</a>, alters color |
Cary Clark5081eed2018-01-22 07:55:48 -0500207| <a href="#SkPaint_setDither">setDither</a> | sets or clears <a href="#Dither">Dither</a> |
208| <a href="#SkPaint_setDrawLooper">setDrawLooper</a> | sets <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500209| <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 -0500210| <a href="#SkPaint_setFakeBoldText">setFakeBoldText</a> | sets or clears <a href="#Fake_Bold">Fake Bold</a> |
211| <a href="#SkPaint_setFilterQuality">setFilterQuality</a> | sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level |
212| <a href="#SkPaint_setFlags">setFlags</a> | sets multiple <a href="#SkPaint_Flags">Flags</a> in a bit field |
213| <a href="#SkPaint_setHinting">setHinting</a> | sets <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level |
214| <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 -0500215| <a href="#SkPaint_setLCDRenderText">setLCDRenderText</a> | sets or clears <a href="#LCD_Text">LCD Text</a> |
Cary Clark08895c42018-02-01 09:37:32 -0500216| <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 -0500217| <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> |
218| <a href="#SkPaint_setPathEffect">setPathEffect</a> | sets <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
219| <a href="#SkPaint_setShader">setShader</a> | sets <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
220| <a href="#SkPaint_setStrokeCap">setStrokeCap</a> | sets <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends |
221| <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a> | sets <a href="#SkPaint_Join">Join</a>, geometry on path corners |
222| <a href="#SkPaint_setStrokeMiter">setStrokeMiter</a> | sets <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners |
223| <a href="#SkPaint_setStrokeWidth">setStrokeWidth</a> | sets thickness of the stroke |
224| <a href="#SkPaint_setStyle">setStyle</a> | sets <a href="#SkPaint_Style">Style</a>: stroke, fill, or both |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500225| <a href="#SkPaint_setSubpixelText">setSubpixelText</a> | sets or clears <a href="#Subpixel_Text">Subpixel Text</a> |
Cary Clark5081eed2018-01-22 07:55:48 -0500226| <a href="#SkPaint_setTextAlign">setTextAlign</a> | sets <a href="#SkPaint_Align">Align</a>: left, center, or right |
227| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | sets character or glyph encoded size |
228| <a href="#SkPaint_setTextScaleX">setTextScaleX</a> | sets the text horizontal scale; condensed text |
229| <a href="#SkPaint_setTextSize">setTextSize</a> | sets text size in points |
230| <a href="#SkPaint_setTextSkewX">setTextSkewX</a> | sets the text horizontal skew; oblique text |
231| <a href="#SkPaint_setTypeface">setTypeface</a> | sets <a href="undocumented#Typeface">Typeface</a>, font description |
232| <a href="#SkPaint_setVerticalText">setVerticalText</a> | sets or clears <a href="#Vertical_Text">Vertical Text</a> |
233| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
234| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
Cary Clark12799e12017-07-28 15:18:29 -0400235
Cary Clark08895c42018-02-01 09:37:32 -0500236## <a name="Initializers"></a> Initializers
Cary Clark12799e12017-07-28 15:18:29 -0400237
Cary Clark493df1f2017-08-25 13:14:33 -0400238<a name="SkPaint_empty_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400239## SkPaint
240
Cary Clarka560c472017-11-27 10:44:06 -0500241<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400242SkPaint()
243</pre>
244
Cary Clark8cc16c72017-08-25 11:51:49 -0400245Constructs <a href="#Paint">Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400246
247| attribute | default value |
248| --- | --- |
Cary Clarka560c472017-11-27 10:44:06 -0500249| Anti-alias | false |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500250| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400251| <a href="SkColor_Reference#Color">Color</a> | <a href="SkColor_Reference#SK_ColorBLACK">SK ColorBLACK</a> |
252| <a href="SkColor_Reference#Alpha">Color Alpha</a> | 255 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400253| <a href="undocumented#Color_Filter">Color Filter</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400254| <a href="#Dither">Dither</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400255| <a href="undocumented#Draw_Looper">Draw Looper</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400256| <a href="#Fake_Bold">Fake Bold</a> | false |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500257| <a href="undocumented#Filter_Quality">Filter Quality</a> | <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a> |
258| <a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400259| <a href="#Automatic_Hinting">Automatic Hinting</a> | false |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500260| <a href="#Full_Hinting_Spacing">Full Hinting Spacing</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400261| <a href="#SkPaint_Hinting">Hinting</a> | <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400262| <a href="undocumented#Image_Filter">Image Filter</a> | nullptr |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500263| <a href="#LCD_Text">LCD Text</a> | false |
264| <a href="#Linear_Text">Linear Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400265| <a href="#Miter_Limit">Miter Limit</a> | 4 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400266| <a href="undocumented#Mask_Filter">Mask Filter</a> | nullptr |
267| <a href="undocumented#Path_Effect">Path Effect</a> | nullptr |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400268| <a href="undocumented#Shader">Shader</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400269| <a href="#SkPaint_Style">Style</a> | <a href="#SkPaint_kFill_Style">kFill Style</a> |
270| <a href="#Text_Align">Text Align</a> | <a href="#SkPaint_kLeft_Align">kLeft Align</a> |
271| <a href="#Text_Encoding">Text Encoding</a> | <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> |
272| <a href="#Text_Scale_X">Text Scale X</a> | 1 |
273| <a href="#Text_Size">Text Size</a> | 12 |
274| <a href="#Text_Skew_X">Text Skew X</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400275| <a href="undocumented#Typeface">Typeface</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400276| <a href="#Stroke_Cap">Stroke Cap</a> | <a href="#SkPaint_kButt_Cap">kButt Cap</a> |
277| <a href="#Stroke_Join">Stroke Join</a> | <a href="#SkPaint_kMiter_Join">kMiter Join</a> |
278| <a href="#Stroke_Width">Stroke Width</a> | 0 |
Cary Clark2a8c48b2018-02-15 17:31:24 -0500279| <a href="#Subpixel_Text">Subpixel Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400280| <a href="#Vertical_Text">Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400281
282The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500283paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400284build system.
285
286### Return Value
287
Cary Clark8cc16c72017-08-25 11:51:49 -0400288default initialized <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400289
290### Example
291
292<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
293
294---
295
Cary Clark73fa9722017-08-29 17:36:51 -0400296<a name="SkPaint_copy_const_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400297## SkPaint
298
Cary Clarka560c472017-11-27 10:44:06 -0500299<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400300SkPaint(const SkPaint& paint)
301</pre>
302
Cary Clark8cc16c72017-08-25 11:51:49 -0400303Makes 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 +0000304<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 -0400305between 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 -0400306their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400307
Update Docs949cfd42018-01-22 05:50:26 +0000308The 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 -0400309<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 -0400310This 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 -0400311
312### Parameters
313
Cary Clark73fa9722017-08-29 17:36:51 -0400314<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 -0400315original to copy</td>
316 </tr>
317</table>
318
319### Return Value
320
Cary Clark73fa9722017-08-29 17:36:51 -0400321shallow copy of <a href="#SkPaint_copy_const_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400322
323### Example
324
325<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
326
327#### Example Output
328
329~~~~
330SK_ColorRED == paint1.getColor()
331SK_ColorBLUE == paint2.getColor()
332~~~~
333
334</fiddle-embed></div>
335
336---
337
Cary Clark73fa9722017-08-29 17:36:51 -0400338<a name="SkPaint_move_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400339## SkPaint
340
Cary Clarka560c472017-11-27 10:44:06 -0500341<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400342SkPaint(SkPaint&& paint)
343</pre>
344
Cary Clarkd0530ba2017-09-14 11:25:39 -0400345Implements a move constructor to avoid increasing the reference counts
Cary Clark73fa9722017-08-29 17:36:51 -0400346of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400347
Cary Clark73fa9722017-08-29 17:36:51 -0400348After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400349
350### Parameters
351
Cary Clark73fa9722017-08-29 17:36:51 -0400352<table> <tr> <td><a name="SkPaint_move_SkPaint_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400353original to move</td>
354 </tr>
355</table>
356
357### Return Value
358
Cary Clark73fa9722017-08-29 17:36:51 -0400359content of <a href="#SkPaint_move_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400360
361### Example
362
363<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
364
365#### Example Output
366
367~~~~
368path effect unique: true
369~~~~
370
371</fiddle-embed></div>
372
373---
374
Cary Clark493df1f2017-08-25 13:14:33 -0400375<a name="SkPaint_reset"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400376## reset
377
Cary Clarka560c472017-11-27 10:44:06 -0500378<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400379void reset()
380</pre>
381
Cary Clarkbc5697d2017-10-04 14:31:33 -0400382Sets all <a href="#Paint">Paint</a> contents to their initial values. This is equivalent to replacing
383<a href="#Paint">Paint</a> with the result of <a href="#SkPaint_empty_constructor">SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400384
385### Example
386
387<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
388
389#### Example Output
390
391~~~~
392paint1 == paint2
393~~~~
394
395</fiddle-embed></div>
396
397---
398
Cary Clark493df1f2017-08-25 13:14:33 -0400399<a name="SkPaint_destructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400400## ~SkPaint
401
Cary Clarka560c472017-11-27 10:44:06 -0500402<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400403~SkPaint()
404</pre>
405
Cary Clark8cc16c72017-08-25 11:51:49 -0400406Decreases <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 +0000407<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 -0400408objects containing <a href="undocumented#Reference_Count">Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400409
410---
411
Cary Clark08895c42018-02-01 09:37:32 -0500412## <a name="Management"></a> Management
Cary Clark12799e12017-07-28 15:18:29 -0400413
Cary Clarka560c472017-11-27 10:44:06 -0500414<a name="SkPaint_copy_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400415## operator=
416
Cary Clarka560c472017-11-27 10:44:06 -0500417<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400418SkPaint& operator=(const SkPaint& paint)
419</pre>
420
Cary Clark8cc16c72017-08-25 11:51:49 -0400421Makes 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 +0000422<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 -0500423between 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 -0400424prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clarka560c472017-11-27 10:44:06 -0500425resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_operator_paint">paint</a>
426are increased by one. <a href="#SkPaint_copy_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400427
428### Parameters
429
Cary Clarka560c472017-11-27 10:44:06 -0500430<table> <tr> <td><a name="SkPaint_copy_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400431original to copy</td>
432 </tr>
433</table>
434
435### Return Value
436
Cary Clarka560c472017-11-27 10:44:06 -0500437content of <a href="#SkPaint_copy_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400438
439### Example
440
441<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
442
443#### Example Output
444
445~~~~
446SK_ColorRED == paint1.getColor()
447SK_ColorRED == paint2.getColor()
448~~~~
449
450</fiddle-embed></div>
451
452---
453
Cary Clarka560c472017-11-27 10:44:06 -0500454<a name="SkPaint_move_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400455## operator=
456
Cary Clarka560c472017-11-27 10:44:06 -0500457<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400458SkPaint& operator=(SkPaint&& paint)
459</pre>
460
Cary Clarka560c472017-11-27 10:44:06 -0500461Moves the <a href="#SkPaint_move_operator_paint">paint</a> to avoid increasing the reference counts
462of 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 -0400463prior destination are decreased by one; those objects are deleted if the resulting count
464is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400465
Cary Clarka560c472017-11-27 10:44:06 -0500466After the call, <a href="#SkPaint_move_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400467
468### Parameters
469
Cary Clarka560c472017-11-27 10:44:06 -0500470<table> <tr> <td><a name="SkPaint_move_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400471original to move</td>
472 </tr>
473</table>
474
475### Return Value
476
Cary Clarka560c472017-11-27 10:44:06 -0500477content of <a href="#SkPaint_move_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400478
479### Example
480
481<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
482
483#### Example Output
484
485~~~~
486SK_ColorRED == paint2.getColor()
487~~~~
488
489</fiddle-embed></div>
490
491---
492
Cary Clark493df1f2017-08-25 13:14:33 -0400493<a name="SkPaint_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400494## operator==
495
Cary Clarka560c472017-11-27 10:44:06 -0500496<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400497bool operator==(const SkPaint& a, const SkPaint& b)
498</pre>
499
Cary Clark8cc16c72017-08-25 11:51:49 -0400500Compares <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 +0000501if <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 -0400502<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 -0400503
504### Parameters
505
Cary Clark8cc16c72017-08-25 11:51:49 -0400506<table> <tr> <td><a name="SkPaint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
507<a href="#Paint">Paint</a> to compare</td>
508 </tr> <tr> <td><a name="SkPaint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
509<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400510 </tr>
511</table>
512
513### Return Value
514
Cary Clark8cc16c72017-08-25 11:51:49 -0400515true if <a href="#Paint">Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400516
517### Example
518
519<div><fiddle-embed name="7481a948e34672720337a631830586dd">
520
521#### Example Output
522
523~~~~
524paint1 == paint2
525paint1 != paint2
526~~~~
527
528</fiddle-embed></div>
529
Cary Clark06c20f32018-03-20 15:53:27 -0400530### See Also
531
532<a href="#SkPaint_notequal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a>
533
Cary Clark12799e12017-07-28 15:18:29 -0400534---
535
Cary Clarka560c472017-11-27 10:44:06 -0500536<a name="SkPaint_notequal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400537## operator!=
538
Cary Clarka560c472017-11-27 10:44:06 -0500539<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400540bool operator!=(const SkPaint& a, const SkPaint& b)
541</pre>
542
Cary Clarka560c472017-11-27 10:44:06 -0500543Compares <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a>, and returns true if <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a> are not equivalent. May return true
Update Docs949cfd42018-01-22 05:50:26 +0000544if <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400545<a href="undocumented#Draw_Looper">Draw Looper</a>, or <a href="undocumented#Image_Filter">Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400546
547### Parameters
548
Cary Clarka560c472017-11-27 10:44:06 -0500549<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400550<a href="#Paint">Paint</a> to compare</td>
Cary Clarka560c472017-11-27 10:44:06 -0500551 </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400552<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400553 </tr>
554</table>
555
556### Return Value
557
Cary Clark8cc16c72017-08-25 11:51:49 -0400558true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400559
560### Example
561
562<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
563
564#### Example Output
565
566~~~~
567paint1 == paint2
568paint1 == paint2
569~~~~
570
571</fiddle-embed></div>
572
Cary Clark06c20f32018-03-20 15:53:27 -0400573### See Also
574
575<a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a>
576
Cary Clark12799e12017-07-28 15:18:29 -0400577---
578
Cary Clark493df1f2017-08-25 13:14:33 -0400579<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400580## getHash
581
Cary Clarka560c472017-11-27 10:44:06 -0500582<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400583uint32_t getHash() const
584</pre>
585
Cary Clark8cc16c72017-08-25 11:51:49 -0400586Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400587Identical hashes guarantee that the paints are
588equivalent, but differing hashes do not guarantee that the paints have differing
589contents.
590
Cary Clark8cc16c72017-08-25 11:51:49 -0400591If <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 -0400592their hashes are also equal.
593
594The hash returned is platform and implementation specific.
595
596### Return Value
597
598a shallow hash
599
600### Example
601
602<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
603
604#### Example Output
605
606~~~~
607paint1 == paint2
608paint1.getHash() == paint2.getHash()
609~~~~
610
611</fiddle-embed></div>
612
613---
614
Cary Clark08895c42018-02-01 09:37:32 -0500615## <a name="Hinting"></a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400616
Cary Clark8cc16c72017-08-25 11:51:49 -0400617## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400618
Cary Clarka560c472017-11-27 10:44:06 -0500619<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -0400620 enum <a href="#Hinting">Hinting</a> {
621 <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
622 <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
623 <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
624 <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
625 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500626</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400627
Cary Clark8cc16c72017-08-25 11:51:49 -0400628<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
629look 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 -0400630muted effect or no effect at all depending on the platform.
631
Cary Clark7cfcbca2018-01-04 16:11:51 -0500632The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark2a8c48b2018-02-15 17:31:24 -0500633as the <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400634
635### Constants
636
637<table>
638 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400639 <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 -0500640With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
641bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400642outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -0500643to 26.6 fractional pixels.
644</td>
Cary Clark12799e12017-07-28 15:18:29 -0400645 </tr>
646 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400647 <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 -0500648With FreeType, this is equivalent in spirit to the
649FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400650lighter hinting algorithm for non-monochrome modes.
Cary Clark1a8d7622018-03-05 13:26:16 -0500651Generated <a href="undocumented#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.
652</td>
Cary Clark12799e12017-07-28 15:18:29 -0400653 </tr>
654 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400655 <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 -0500656With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
657choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -0500658gray-level rendering.
659</td>
Cary Clark12799e12017-07-28 15:18:29 -0400660 </tr>
661 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -0500662 <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
663FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
664FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
665horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -0500666variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
667</td>
Cary Clark12799e12017-07-28 15:18:29 -0400668 </tr>
669</table>
670
Cary Clark7cfcbca2018-01-04 16:11:51 -0500671On Windows with DirectWrite, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400672
Cary Clark8cc16c72017-08-25 11:51:49 -0400673<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400674Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400675
676
677
Cary Clark493df1f2017-08-25 13:14:33 -0400678<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400679## getHinting
680
Cary Clarka560c472017-11-27 10:44:06 -0500681<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400682Hinting getHinting() const
683</pre>
684
685Returns level of glyph outline adjustment.
686
687### Return Value
688
Cary Clark8cc16c72017-08-25 11:51:49 -0400689one 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 -0400690
691### Example
692
693<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
694
695#### Example Output
696
697~~~~
698SkPaint::kNormal_Hinting == paint.getHinting()
699~~~~
700
701</fiddle-embed></div>
702
703---
704
Cary Clark493df1f2017-08-25 13:14:33 -0400705<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400706## setHinting
707
Cary Clarka560c472017-11-27 10:44:06 -0500708<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400709void setHinting(Hinting hintingLevel)
710</pre>
711
712Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400713Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400714
Cary Clark8cc16c72017-08-25 11:51:49 -0400715| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400716| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400717| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400718| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
719| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
720| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400721
722### Parameters
723
Cary Clark8cc16c72017-08-25 11:51:49 -0400724<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
725one 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 -0400726 </tr>
727</table>
728
729### Example
730
731<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
732
733#### Example Output
734
735~~~~
736paint1 == paint2
737~~~~
738
739</fiddle-embed></div>
740
741---
742
Cary Clark08895c42018-02-01 09:37:32 -0500743## <a name="Flags"></a> Flags
Cary Clark12799e12017-07-28 15:18:29 -0400744
Cary Clark8cc16c72017-08-25 11:51:49 -0400745## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400746
Cary Clarka560c472017-11-27 10:44:06 -0500747<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -0400748 enum <a href="#Flags">Flags</a> {
749 <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
750 <a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
751 <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
752 <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
753 <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
754 <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
755 <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
756 <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
757 <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
758 <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -0400759
Cary Clark186d08f2018-04-03 08:43:27 -0400760 <a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
761 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500762
Cary Clark12799e12017-07-28 15:18:29 -0400763</pre>
764
Cary Clark8cc16c72017-08-25 11:51:49 -0400765The bit values stored in <a href="#Flags">Flags</a>.
766The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400767with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400768All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400769multiple settings at once.
770
771### Constants
772
773<table>
774 <tr>
skia-bookmaker525f9a92018-05-03 06:27:39 +0000775 <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 -0400776 </tr>
777 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400778 <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 -0400779 </tr>
780 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400781 <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 -0400782 </tr>
783 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500784 <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 -0400785 </tr>
786 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500787 <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 -0400788 </tr>
789 <tr>
skia-bookmaker525f9a92018-05-03 06:27:39 +0000790 <td><a name="SkPaint_kDevKernText_Flag"> <code><strong>SkPaint::kDevKernText_Flag </strong></code> </a></td><td>0x0100</td><td></td>
Cary Clark12799e12017-07-28 15:18:29 -0400791 </tr>
792 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500793 <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 -0400794 </tr>
795 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500796 <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 -0400797 </tr>
798 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400799 <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 -0400800 </tr>
801 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400802 <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 -0400803 </tr>
804 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400805 <td><a name="SkPaint_kAllFlags"> <code><strong>SkPaint::kAllFlags </strong></code> </a></td><td>0xFFFF</td><td>mask of all <a href="#Flags">Flags</a>, including private flags and flags reserved for future use</td>
Cary Clark12799e12017-07-28 15:18:29 -0400806 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400807<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400808
Cary Clark06c20f32018-03-20 15:53:27 -0400809
Cary Clark12799e12017-07-28 15:18:29 -0400810
Cary Clark8cc16c72017-08-25 11:51:49 -0400811## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400812
Cary Clark4855f782018-02-06 09:41:53 -0500813soonOnly valid for Android framework.
814
Cary Clarka560c472017-11-27 10:44:06 -0500815<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -0400816 enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
817 <a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
818 <a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
819 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500820</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400821
822### Constants
823
824<table>
825 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500826 <td><a name="SkPaint_kUnderlineText_ReserveFlag"> <code><strong>SkPaint::kUnderlineText_ReserveFlag </strong></code> </a></td><td>0x0008</td><td>soon</td>
Cary Clark12799e12017-07-28 15:18:29 -0400827 </tr>
828 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500829 <td><a name="SkPaint_kStrikeThruText_ReserveFlag"> <code><strong>SkPaint::kStrikeThruText_ReserveFlag </strong></code> </a></td><td>0x0010</td><td>soon</td>
Cary Clark12799e12017-07-28 15:18:29 -0400830 </tr>
Cary Clark4855f782018-02-06 09:41:53 -0500831
Cary Clark06c20f32018-03-20 15:53:27 -0400832
Cary Clark12799e12017-07-28 15:18:29 -0400833
Cary Clark493df1f2017-08-25 13:14:33 -0400834<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400835## getFlags
836
Cary Clarka560c472017-11-27 10:44:06 -0500837<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400838uint32_t getFlags() const
839</pre>
840
Cary Clark8cc16c72017-08-25 11:51:49 -0400841Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
842bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400843
844### Return Value
845
Cary Clark8cc16c72017-08-25 11:51:49 -0400846zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400847
848### Example
849
850<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
851
852#### Example Output
853
854~~~~
855(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
856~~~~
857
858</fiddle-embed></div>
859
860---
861
Cary Clark493df1f2017-08-25 13:14:33 -0400862<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400863## setFlags
864
Cary Clarka560c472017-11-27 10:44:06 -0500865<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400866void setFlags(uint32_t flags)
867</pre>
868
Cary Clark8cc16c72017-08-25 11:51:49 -0400869Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
870All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400871
872### Parameters
873
Cary Clark8cc16c72017-08-25 11:51:49 -0400874<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
875union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400876 </tr>
877</table>
878
879### Example
880
881<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
882
883#### Example Output
884
885~~~~
886paint.isAntiAlias()
887paint.isDither()
888~~~~
889
890</fiddle-embed></div>
891
892---
893
Cary Clark08895c42018-02-01 09:37:32 -0500894## <a name="Anti-alias"></a> Anti-alias
895
Cary Clarka560c472017-11-27 10:44:06 -0500896Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400897If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400898If <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 -0400899
Cary Clark2a8c48b2018-02-15 17:31:24 -0500900The rule for <a href="undocumented#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400901passing through the pixel center may, but is not required to, draw the pixel.
902
Cary Clark2a8c48b2018-02-15 17:31:24 -0500903<a href="undocumented#Raster_Engine">Raster Engine</a> draws <a href="undocumented#Alias">Aliased</a> pixels whose centers are on or to the right of the start of an
Cary Clark4c06f5e2017-08-04 12:48:24 -0400904active <a href="SkPath_Reference#Path">Path</a> edge, and whose center is to the left of the end of the active <a href="SkPath_Reference#Path">Path</a> edge.
Cary Clark12799e12017-07-28 15:18:29 -0400905
Cary Clark7cfcbca2018-01-04 16:11:51 -0500906A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500907<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400908<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400909
Cary Clarka560c472017-11-27 10:44:06 -0500910The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400911
Cary Clarka560c472017-11-27 10:44:06 -0500912Anti-alias is disabled by default.
913Anti-alias can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -0400914at compile time.
915
916### Example
917
918<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
919A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400920The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clark1a8d7622018-03-05 13:26:16 -0500921<a href="undocumented#Alias">Aliasing</a> easier to see.
922</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400923
Cary Clark493df1f2017-08-25 13:14:33 -0400924<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400925## isAntiAlias
926
Cary Clarka560c472017-11-27 10:44:06 -0500927<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400928bool isAntiAlias() const
929</pre>
930
Cary Clark4c06f5e2017-08-04 12:48:24 -0400931If true, pixels on the active edges of <a href="SkPath_Reference#Path">Path</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -0400932
Cary Clark8cc16c72017-08-25 11:51:49 -0400933Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400934
935### Return Value
936
Cary Clark8cc16c72017-08-25 11:51:49 -0400937<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400938
939### Example
940
941<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
942
943#### Example Output
944
945~~~~
946paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
947paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
948~~~~
949
950</fiddle-embed></div>
951
952---
953
Cary Clark493df1f2017-08-25 13:14:33 -0400954<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400955## setAntiAlias
956
Cary Clarka560c472017-11-27 10:44:06 -0500957<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400958void setAntiAlias(bool aa)
959</pre>
960
Cary Clark4c06f5e2017-08-04 12:48:24 -0400961Requests, but does not require, that <a href="SkPath_Reference#Path">Path</a> edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -0400962partial transparency.
963
Cary Clark8cc16c72017-08-25 11:51:49 -0400964Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
965Clears <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -0400966
967### Parameters
968
Cary Clark8cc16c72017-08-25 11:51:49 -0400969<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
970setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400971 </tr>
972</table>
973
974### Example
975
976<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
977
978#### Example Output
979
980~~~~
981paint1 == paint2
982~~~~
983
984</fiddle-embed></div>
985
986---
987
Cary Clark08895c42018-02-01 09:37:32 -0500988## <a name="Dither"></a> Dither
989
Cary Clark7cfcbca2018-01-04 16:11:51 -0500990<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -0400991This can help to smooth color transitions and reducing banding in gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -0500992Dithering lessens visible banding from <a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
993and <a href="SkImageInfo_Reference#kRGBA_8888_SkColorType">kRGBA_8888_SkColorType</a> gradients,
994and improves rendering into a <a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400995
996Dithering is always enabled for linear gradients drawing into
Cary Clark2a8c48b2018-02-15 17:31:24 -0500997<a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and <a href="SkImageInfo_Reference#kRGBA_8888_SkColorType">kRGBA_8888_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
998<a href="#Dither">Dither</a> cannot be enabled for <a href="SkImageInfo_Reference#kAlpha_8_SkColorType">kAlpha_8_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and
999<a href="SkImageInfo_Reference#kRGBA_F16_SkColorType">kRGBA_F16_SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001000
Cary Clark8cc16c72017-08-25 11:51:49 -04001001<a href="#Dither">Dither</a> is disabled by default.
1002<a href="#Dither">Dither</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kDither_Flag">kDither Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -04001003at compile time.
1004
Cary Clark186d08f2018-04-03 08:43:27 -04001005Some 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 -04001006
1007### Example
1008
1009<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
Cary Clark1a8d7622018-03-05 13:26:16 -05001010alternating nearby colors from pixel to pixel.
1011</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001012
1013### Example
1014
1015<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001016Drawing the gradient repeatedly with <a href="undocumented#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001017dither, making it easier to see.
1018</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001019
Cary Clark493df1f2017-08-25 13:14:33 -04001020<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001021## isDither
1022
Cary Clarka560c472017-11-27 10:44:06 -05001023<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001024bool isDither() const
1025</pre>
1026
1027If true, color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001028
Cary Clark8cc16c72017-08-25 11:51:49 -04001029Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001030
1031### Return Value
1032
Cary Clark8cc16c72017-08-25 11:51:49 -04001033<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001034
1035### Example
1036
1037<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1038
1039#### Example Output
1040
1041~~~~
1042paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1043paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1044~~~~
1045
1046</fiddle-embed></div>
1047
1048---
1049
Cary Clark493df1f2017-08-25 13:14:33 -04001050<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001051## setDither
1052
Cary Clarka560c472017-11-27 10:44:06 -05001053<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001054void setDither(bool dither)
1055</pre>
1056
1057Requests, but does not require, to distribute color error.
1058
Cary Clark8cc16c72017-08-25 11:51:49 -04001059Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1060Clears <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 -04001061
1062### Parameters
1063
Cary Clark8cc16c72017-08-25 11:51:49 -04001064<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1065setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001066 </tr>
1067</table>
1068
1069### Example
1070
1071<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1072
1073#### Example Output
1074
1075~~~~
1076paint1 == paint2
1077~~~~
1078
1079</fiddle-embed></div>
1080
1081### See Also
1082
Cary Clark2a8c48b2018-02-15 17:31:24 -05001083<a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001084
1085---
1086
1087### See Also
1088
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001089Gradient <a href="SkColor_Reference#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001090
Cary Clark08895c42018-02-01 09:37:32 -05001091## <a name="Device_Text"></a> Device Text
1092
Cary Clark2a8c48b2018-02-15 17:31:24 -05001093<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 -04001094
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001095When 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 -04001096create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001097on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001098<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 -04001099the 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 -04001100
Cary Clark7cfcbca2018-01-04 16:11:51 -05001101<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 -04001102As the opaqueness
1103of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1104
1105Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001106<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 -05001107<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 -04001108<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 -04001109
1110### Example
1111
Cary Clark2a8c48b2018-02-15 17:31:24 -05001112<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>.
1113When <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 -05001114When <a href="#Subpixel_Text">Subpixel Text</a> is enabled, the comma <a href="undocumented#Glyph">Glyphs</a> are unique, but appear evenly spaced.
1115</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001116
1117## <a name="Linear_Text"></a> Linear Text
1118
Cary Clark2a8c48b2018-02-15 17:31:24 -05001119<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 -04001120If <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 -04001121If <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 -04001122
Cary Clark493df1f2017-08-25 13:14:33 -04001123<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001124## isLinearText
1125
Cary Clarka560c472017-11-27 10:44:06 -05001126<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001127bool isLinearText() const
1128</pre>
1129
Cary Clark4c06f5e2017-08-04 12:48:24 -04001130If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001131
Cary Clark8cc16c72017-08-25 11:51:49 -04001132Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001133
1134### Return Value
1135
Cary Clark8cc16c72017-08-25 11:51:49 -04001136<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001137
1138### Example
1139
1140<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1141
1142### See Also
1143
Cary Clark8cc16c72017-08-25 11:51:49 -04001144<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001145
1146---
1147
Cary Clark493df1f2017-08-25 13:14:33 -04001148<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001149## setLinearText
1150
Cary Clarka560c472017-11-27 10:44:06 -05001151<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001152void setLinearText(bool linearText)
1153</pre>
1154
Cary Clark4c06f5e2017-08-04 12:48:24 -04001155If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001156By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001157
Cary Clark8cc16c72017-08-25 11:51:49 -04001158Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1159Clears <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 -04001160
1161### Parameters
1162
Cary Clark8cc16c72017-08-25 11:51:49 -04001163<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1164setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001165 </tr>
1166</table>
1167
1168### Example
1169
1170<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1171
1172### See Also
1173
Cary Clark8cc16c72017-08-25 11:51:49 -04001174<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001175
1176---
1177
1178## <a name="Subpixel_Text"></a> Subpixel Text
1179
Cary Clark7cfcbca2018-01-04 16:11:51 -05001180<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 -04001181As the opaqueness
1182of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1183
Cary Clark493df1f2017-08-25 13:14:33 -04001184<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001185## isSubpixelText
1186
Cary Clarka560c472017-11-27 10:44:06 -05001187<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001188bool isSubpixelText() const
1189</pre>
1190
Cary Clark2a8c48b2018-02-15 17:31:24 -05001191If 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 -04001192
Cary Clark8cc16c72017-08-25 11:51:49 -04001193Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001194
1195### Return Value
1196
Cary Clark8cc16c72017-08-25 11:51:49 -04001197<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001198
1199### Example
1200
1201<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1202
1203#### Example Output
1204
1205~~~~
1206paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1207paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1208~~~~
1209
1210</fiddle-embed></div>
1211
1212---
1213
Cary Clark493df1f2017-08-25 13:14:33 -04001214<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001215## setSubpixelText
1216
Cary Clarka560c472017-11-27 10:44:06 -05001217<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001218void setSubpixelText(bool subpixelText)
1219</pre>
1220
Cary Clark2a8c48b2018-02-15 17:31:24 -05001221Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001222
Cary Clark8cc16c72017-08-25 11:51:49 -04001223Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1224Clears <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 -04001225
1226### Parameters
1227
Cary Clark8cc16c72017-08-25 11:51:49 -04001228<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1229setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001230 </tr>
1231</table>
1232
1233### Example
1234
1235<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1236
1237#### Example Output
1238
1239~~~~
1240paint1 == paint2
1241~~~~
1242
1243</fiddle-embed></div>
1244
1245---
1246
1247## <a name="LCD_Text"></a> LCD Text
1248
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001249When 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 -04001250create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001251on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001252<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 -04001253the 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 -04001254
Cary Clark493df1f2017-08-25 13:14:33 -04001255<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001256## isLCDRenderText
1257
Cary Clarka560c472017-11-27 10:44:06 -05001258<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001259bool isLCDRenderText() const
1260</pre>
1261
Cary Clark2a8c48b2018-02-15 17:31:24 -05001262If true, <a href="undocumented#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001263
Cary Clark8cc16c72017-08-25 11:51:49 -04001264Returns 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 -04001265
1266### Return Value
1267
Cary Clark8cc16c72017-08-25 11:51:49 -04001268<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001269
1270### Example
1271
1272<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1273
1274#### Example Output
1275
1276~~~~
1277paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1278paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1279~~~~
1280
1281</fiddle-embed></div>
1282
1283---
1284
Cary Clark493df1f2017-08-25 13:14:33 -04001285<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001286## setLCDRenderText
1287
Cary Clarka560c472017-11-27 10:44:06 -05001288<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001289void setLCDRenderText(bool lcdText)
1290</pre>
1291
Cary Clark2a8c48b2018-02-15 17:31:24 -05001292Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001293
Cary Clark8cc16c72017-08-25 11:51:49 -04001294Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1295Clears <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 -04001296
1297### Parameters
1298
Cary Clark8cc16c72017-08-25 11:51:49 -04001299<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1300setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001301 </tr>
1302</table>
1303
1304### Example
1305
1306<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1307
1308#### Example Output
1309
1310~~~~
1311paint1 == paint2
1312~~~~
1313
1314</fiddle-embed></div>
1315
1316---
1317
Cary Clark08895c42018-02-01 09:37:32 -05001318## <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
1319
Cary Clark2a8c48b2018-02-15 17:31:24 -05001320<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 -04001321<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 -05001322in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001323
Cary Clark7cfcbca2018-01-04 16:11:51 -05001324FreeType 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 -04001325the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001326Windows may select the bitmap glyph but is not required to do so.
1327<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001328
Cary Clark2a8c48b2018-02-15 17:31:24 -05001329<a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1330<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 -04001331<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001332
1333### Example
1334
Cary Clarka560c472017-11-27 10:44:06 -05001335<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001336<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001337 includes an embedded bitmap Glyph at odd font sizes. This example works
1338 on platforms that use FreeType as their Font_Engine.
1339 Windows may, but is not required to, return a bitmap glyph if
1340 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1341 bitmap.allocN32Pixels(30, 15);
1342 bitmap.eraseColor(0);
1343 SkCanvas offscreen(bitmap);
1344 SkPaint paint;
1345 paint.setAntiAlias(true);
1346 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001347 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001348 for (bool embedded : { false, true}) {
1349 paint.setEmbeddedBitmapText(embedded);
1350 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1351 }
1352 canvas->drawBitmap(bitmap, 0, 0);
1353 canvas->scale(10, 10);
1354 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001355
Cary Clarka560c472017-11-27 10:44:06 -05001356</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001357
Cary Clark493df1f2017-08-25 13:14:33 -04001358<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001359## isEmbeddedBitmapText
1360
Cary Clarka560c472017-11-27 10:44:06 -05001361<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001362bool isEmbeddedBitmapText() const
1363</pre>
1364
Cary Clark2a8c48b2018-02-15 17:31:24 -05001365If 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 -04001366
Cary Clark8cc16c72017-08-25 11:51:49 -04001367Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001368
1369### Return Value
1370
Cary Clark8cc16c72017-08-25 11:51:49 -04001371<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001372
1373### Example
1374
1375<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1376
1377#### Example Output
1378
1379~~~~
1380paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1381paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1382~~~~
1383
1384</fiddle-embed></div>
1385
1386---
1387
Cary Clark493df1f2017-08-25 13:14:33 -04001388<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001389## setEmbeddedBitmapText
1390
Cary Clarka560c472017-11-27 10:44:06 -05001391<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001392void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1393</pre>
1394
1395Requests, but does not require, to use bitmaps in fonts instead of outlines.
1396
Cary Clark8cc16c72017-08-25 11:51:49 -04001397Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1398Clears <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 -04001399
1400### Parameters
1401
Cary Clark8cc16c72017-08-25 11:51:49 -04001402<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1403setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001404 </tr>
1405</table>
1406
1407### Example
1408
1409<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1410
1411#### Example Output
1412
1413~~~~
1414paint1 == paint2
1415~~~~
1416
1417</fiddle-embed></div>
1418
1419---
1420
Cary Clark08895c42018-02-01 09:37:32 -05001421## <a name="Automatic_Hinting"></a> Automatic Hinting
1422
Cary Clark8cc16c72017-08-25 11:51:49 -04001423If <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 -05001424instructs 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 -04001425<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
1426<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001427
Cary Clark7cfcbca2018-01-04 16:11:51 -05001428<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 -04001429
Cary Clark493df1f2017-08-25 13:14:33 -04001430<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001431## isAutohinted
1432
Cary Clarka560c472017-11-27 10:44:06 -05001433<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001434bool isAutohinted() const
1435</pre>
1436
Cary Clark8cc16c72017-08-25 11:51:49 -04001437If 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 -05001438platform 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 -05001439<a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001440
Cary Clark8cc16c72017-08-25 11:51:49 -04001441Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001442
1443### Return Value
1444
Cary Clark8cc16c72017-08-25 11:51:49 -04001445<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001446
1447### Example
1448
1449<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1450
1451#### Example Output
1452
1453~~~~
1454paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1455paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1456~~~~
1457
1458</fiddle-embed></div>
1459
1460### See Also
1461
Cary Clark8cc16c72017-08-25 11:51:49 -04001462<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001463
1464---
1465
Cary Clark493df1f2017-08-25 13:14:33 -04001466<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001467## setAutohinted
1468
Cary Clarka560c472017-11-27 10:44:06 -05001469<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001470void setAutohinted(bool useAutohinter)
1471</pre>
1472
Cary Clark8cc16c72017-08-25 11:51:49 -04001473If <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 -05001474instruct 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 -04001475<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
1476<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001477
Cary Clark7cfcbca2018-01-04 16:11:51 -05001478Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001479
Cary Clark8cc16c72017-08-25 11:51:49 -04001480Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1481Clears <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 -04001482
1483### Parameters
1484
Cary Clark8cc16c72017-08-25 11:51:49 -04001485<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1486setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001487 </tr>
1488</table>
1489
1490### Example
1491
1492<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1493
1494### See Also
1495
Cary Clark8cc16c72017-08-25 11:51:49 -04001496<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001497
1498---
1499
Cary Clark08895c42018-02-01 09:37:32 -05001500## <a name="Vertical_Text"></a> Vertical Text
1501
Cary Clark4c06f5e2017-08-04 12:48:24 -04001502<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 -05001503using <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 -04001504is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
Cary Clark2a8c48b2018-02-15 17:31:24 -05001505<a href="undocumented#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001506
Cary Clark2a8c48b2018-02-15 17:31:24 -05001507Skia 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 -05001508font substitution,
1509textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1510a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001511into glyph series.
1512
Cary Clark8cc16c72017-08-25 11:51:49 -04001513<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 -04001514
Cary Clark8cc16c72017-08-25 11:51:49 -04001515<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1516<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 -04001517
Cary Clark8cc16c72017-08-25 11:51:49 -04001518<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1519<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1520<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001521
1522### Example
1523
1524<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1525
Cary Clark493df1f2017-08-25 13:14:33 -04001526<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001527## isVerticalText
1528
Cary Clarka560c472017-11-27 10:44:06 -05001529<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001530bool isVerticalText() const
1531</pre>
1532
Cary Clark2a8c48b2018-02-15 17:31:24 -05001533If true, <a href="undocumented#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001534
Cary Clark8cc16c72017-08-25 11:51:49 -04001535Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001536
1537### Return Value
1538
Cary Clark8cc16c72017-08-25 11:51:49 -04001539<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001540
1541### Example
1542
1543<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1544
1545#### Example Output
1546
1547~~~~
1548paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1549paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1550~~~~
1551
1552</fiddle-embed></div>
1553
1554---
1555
Cary Clark493df1f2017-08-25 13:14:33 -04001556<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001557## setVerticalText
1558
Cary Clarka560c472017-11-27 10:44:06 -05001559<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001560void setVerticalText(bool verticalText)
1561</pre>
1562
1563If true, text advance positions the next glyph below the previous glyph instead of to the
1564right of previous glyph.
1565
Cary Clark8cc16c72017-08-25 11:51:49 -04001566Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1567Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001568
1569### Parameters
1570
Cary Clark8cc16c72017-08-25 11:51:49 -04001571<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1572setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001573 </tr>
1574</table>
1575
1576### Example
1577
1578<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1579
1580#### Example Output
1581
1582~~~~
1583paint1 == paint2
1584~~~~
1585
1586</fiddle-embed></div>
1587
1588---
1589
Cary Clark08895c42018-02-01 09:37:32 -05001590## <a name="Fake_Bold"></a> Fake Bold
1591
Cary Clark8cc16c72017-08-25 11:51:49 -04001592<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 -05001593is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001594bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001595
Cary Clark7cfcbca2018-01-04 16:11:51 -05001596Use <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 -04001597is not available.
1598
Cary Clark7cfcbca2018-01-04 16:11:51 -05001599A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark2a8c48b2018-02-15 17:31:24 -05001600the 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 -05001601by 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 -04001602
Cary Clark8cc16c72017-08-25 11:51:49 -04001603<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001604
1605### Example
1606
1607<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1608
Cary Clark493df1f2017-08-25 13:14:33 -04001609<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001610## isFakeBoldText
1611
Cary Clarka560c472017-11-27 10:44:06 -05001612<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001613bool isFakeBoldText() const
1614</pre>
1615
1616If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1617from outlines.
1618
Cary Clark8cc16c72017-08-25 11:51:49 -04001619Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001620
1621### Return Value
1622
Cary Clark8cc16c72017-08-25 11:51:49 -04001623<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001624
1625### Example
1626
1627<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1628
1629#### Example Output
1630
1631~~~~
1632paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1633paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1634~~~~
1635
1636</fiddle-embed></div>
1637
1638---
1639
Cary Clark493df1f2017-08-25 13:14:33 -04001640<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001641## setFakeBoldText
1642
Cary Clarka560c472017-11-27 10:44:06 -05001643<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001644void setFakeBoldText(bool fakeBoldText)
1645</pre>
1646
Cary Clarkce101242017-09-01 15:51:02 -04001647Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001648
Cary Clark8cc16c72017-08-25 11:51:49 -04001649Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1650Clears <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 -04001651
1652### Parameters
1653
Cary Clark8cc16c72017-08-25 11:51:49 -04001654<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1655setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001656 </tr>
1657</table>
1658
1659### Example
1660
1661<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1662
1663#### Example Output
1664
1665~~~~
1666paint1 == paint2
1667~~~~
1668
1669</fiddle-embed></div>
1670
1671---
1672
Cary Clark08895c42018-02-01 09:37:32 -05001673## <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
1674
Cary Clark2a8c48b2018-02-15 17:31:24 -05001675if <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 -05001676spacing 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 -05001677<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
1678FreeType as their <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001679
Cary Clark2a8c48b2018-02-15 17:31:24 -05001680<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 -05001681a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001682
Cary Clark493df1f2017-08-25 13:14:33 -04001683<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001684## isDevKernText
1685
Cary Clarka560c472017-11-27 10:44:06 -05001686<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001687bool isDevKernText() const
1688</pre>
1689
Cary Clark12799e12017-07-28 15:18:29 -04001690---
1691
Cary Clark493df1f2017-08-25 13:14:33 -04001692<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001693## setDevKernText
1694
Cary Clarka560c472017-11-27 10:44:06 -05001695<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
skia-bookmaker525f9a92018-05-03 06:27:39 +00001696void setDevKernText(bool)
Cary Clark12799e12017-07-28 15:18:29 -04001697</pre>
1698
Cary Clark12799e12017-07-28 15:18:29 -04001699---
1700
Cary Clark08895c42018-02-01 09:37:32 -05001701## <a name="Filter_Quality_Methods"></a> Filter Quality Methods
1702
Cary Clark4c06f5e2017-08-04 12:48:24 -04001703<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1704A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1705A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001706If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1707in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001708
Cary Clark8cc16c72017-08-25 11:51:49 -04001709<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 -04001710
1711<table> <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001712 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1713 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1714 <td><a href="SkCanvas_Reference#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1715 <td><a href="SkCanvas_Reference#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001716</table>
1717
Cary Clarka560c472017-11-27 10:44:06 -05001718and 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 -04001719
Cary Clark2a8c48b2018-02-15 17:31:24 -05001720<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 -04001721
1722### Example
1723
skia-bookmaker525f9a92018-05-03 06:27:39 +00001724<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001725
Cary Clark493df1f2017-08-25 13:14:33 -04001726<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001727## getFilterQuality
1728
Cary Clarka560c472017-11-27 10:44:06 -05001729<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001730SkFilterQuality getFilterQuality() const
1731</pre>
1732
Cary Clark4c06f5e2017-08-04 12:48:24 -04001733Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001734draws faster; a higher setting looks better when the image is scaled.
1735
1736### Return Value
1737
Cary Clark2a8c48b2018-02-15 17:31:24 -05001738one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1739<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001740
1741### Example
1742
1743<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1744
1745#### Example Output
1746
1747~~~~
1748kNone_SkFilterQuality == paint.getFilterQuality()
1749~~~~
1750
1751</fiddle-embed></div>
1752
1753---
1754
Cary Clark493df1f2017-08-25 13:14:33 -04001755<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001756## setFilterQuality
1757
Cary Clarka560c472017-11-27 10:44:06 -05001758<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001759void setFilterQuality(SkFilterQuality quality)
1760</pre>
1761
Cary Clark4c06f5e2017-08-04 12:48:24 -04001762Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001763draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001764Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001765
1766### Parameters
1767
Cary Clark8cc16c72017-08-25 11:51:49 -04001768<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001769one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1770<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001771 </tr>
1772</table>
1773
1774### Example
1775
1776<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1777
1778#### Example Output
1779
1780~~~~
1781kHigh_SkFilterQuality == paint.getFilterQuality()
1782~~~~
1783
1784</fiddle-embed></div>
1785
1786### See Also
1787
Cary Clark4c06f5e2017-08-04 12:48:24 -04001788<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001789
1790---
1791
Cary Clark08895c42018-02-01 09:37:32 -05001792## <a name="Color_Methods"></a> Color Methods
Cary Clark12799e12017-07-28 15:18:29 -04001793
Cary Clarkab2621d2018-01-30 10:08:57 -05001794| name | description |
1795| --- | --- |
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001796| <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 |
1797| <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 -04001798
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001799<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 -05001800values used to draw a filled or stroked shape in a 32-bit value. Each component
1801occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1802All values in any combination are valid.
1803
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001804<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
1805<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 -05001806
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001807The 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 -05001808positions on the output device, which may have more or fewer bits, and may have
1809a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001810
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001811| 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 -04001812| --- | --- | --- | --- | --- |
1813| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1814
1815### Example
1816
1817<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1818
Cary Clark493df1f2017-08-25 13:14:33 -04001819<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001820## getColor
1821
Cary Clarka560c472017-11-27 10:44:06 -05001822<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001823SkColor getColor() const
1824</pre>
1825
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001826Retrieves <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.
1827Use 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 -04001828a color component.
1829
1830### Return Value
1831
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001832<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="SkColor_Reference#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001833
1834### Example
1835
1836<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1837
1838#### Example Output
1839
1840~~~~
1841Yellow is 100% red, 100% green, and 0% blue.
1842~~~~
1843
1844</fiddle-embed></div>
1845
1846### See Also
1847
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001848<a href="SkColor_Reference#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001849
1850---
1851
Cary Clark493df1f2017-08-25 13:14:33 -04001852<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001853## setColor
1854
Cary Clarka560c472017-11-27 10:44:06 -05001855<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001856void setColor(SkColor color)
1857</pre>
1858
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001859Sets <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,
1860<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 -04001861
1862### Parameters
1863
Cary Clark8cc16c72017-08-25 11:51:49 -04001864<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001865<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="SkColor_Reference#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001866 </tr>
1867</table>
1868
1869### Example
1870
1871<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1872
1873#### Example Output
1874
1875~~~~
1876green1 == green2
1877~~~~
1878
1879</fiddle-embed></div>
1880
1881### See Also
1882
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001883<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 -04001884
1885---
1886
1887## <a name="Alpha_Methods"></a> Alpha Methods
1888
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001889<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 -04001890
Cary Clark493df1f2017-08-25 13:14:33 -04001891<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001892## getAlpha
1893
Cary Clarka560c472017-11-27 10:44:06 -05001894<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001895uint8_t getAlpha() const
1896</pre>
1897
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001898Retrieves <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 -04001899
1900### Return Value
1901
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001902<a href="SkColor_Reference#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001903
1904### Example
1905
1906<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1907
1908#### Example Output
1909
1910~~~~
1911255 == paint.getAlpha()
1912~~~~
1913
1914</fiddle-embed></div>
1915
1916---
1917
Cary Clark493df1f2017-08-25 13:14:33 -04001918<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001919## setAlpha
1920
Cary Clarka560c472017-11-27 10:44:06 -05001921<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001922void setAlpha(U8CPU a)
1923</pre>
1924
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001925Replaces <a href="SkColor_Reference#Alpha">Alpha</a>, leaving <a href="SkColor_Reference#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001926unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001927build. <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 -04001928<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 -04001929fully opaque.
1930
1931### Parameters
1932
Cary Clark8cc16c72017-08-25 11:51:49 -04001933<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001934<a href="SkColor_Reference#Alpha">Alpha</a> component of <a href="SkColor_Reference#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001935 </tr>
1936</table>
1937
1938### Example
1939
1940<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1941
1942#### Example Output
1943
1944~~~~
19450x44112233 == paint.getColor()
1946~~~~
1947
1948</fiddle-embed></div>
1949
1950---
1951
Cary Clark493df1f2017-08-25 13:14:33 -04001952<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001953## setARGB
1954
Cary Clarka560c472017-11-27 10:44:06 -05001955<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001956void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
1957</pre>
1958
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001959Sets <a href="SkColor_Reference#Color">Color</a> used when drawing solid fills. The color components range from 0 to 255.
1960The 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 -04001961
1962### Parameters
1963
Cary Clark8cc16c72017-08-25 11:51:49 -04001964<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001965amount 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 -04001966 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001967amount 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 -04001968 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001969amount 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 -04001970 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001971amount 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 -04001972 </tr>
1973</table>
1974
1975### Example
1976
1977<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
1978
1979#### Example Output
1980
1981~~~~
1982transRed1 == transRed2
1983~~~~
1984
1985</fiddle-embed></div>
1986
1987### See Also
1988
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001989<a href="#SkPaint_setColor">setColor</a> <a href="SkColor_Reference#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001990
1991---
1992
Cary Clark08895c42018-02-01 09:37:32 -05001993## <a name="Style"></a> Style
1994
Cary Clark8cc16c72017-08-25 11:51:49 -04001995<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
1996Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001997
Cary Clark8cc16c72017-08-25 11:51:49 -04001998Set <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 -04001999The fill covers the area inside the geometry for most shapes.
2000
Cary Clark8cc16c72017-08-25 11:51:49 -04002001Set <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 -04002002
Cary Clark2a8c48b2018-02-15 17:31:24 -05002003## <a name="Style_Fill"></a> Style Fill
Cary Clark12799e12017-07-28 15:18:29 -04002004
2005### See Also
2006
Cary Clark2a8c48b2018-02-15 17:31:24 -05002007<a href="SkPath_Reference#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002008
Cary Clark2a8c48b2018-02-15 17:31:24 -05002009## <a name="Style_Stroke"></a> Style Stroke
Cary Clark12799e12017-07-28 15:18:29 -04002010
Cary Clarkbc5697d2017-10-04 14:31:33 -04002011The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002012<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>.
2013The 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 -04002014The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002015
Cary Clark8cc16c72017-08-25 11:51:49 -04002016As <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 -04002017may 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 -04002018
Cary Clark2a8c48b2018-02-15 17:31:24 -05002019## <a name="Style_Hairline"></a> Style Hairline
Cary Clark12799e12017-07-28 15:18:29 -04002020
Cary Clark2a8c48b2018-02-15 17:31:24 -05002021<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Style_Hairline">Hairline</a>.
2022<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 -05002023flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002024
Cary Clark2a8c48b2018-02-15 17:31:24 -05002025<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
2026two 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 -04002027pixel. 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 -05002028GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002029while stroking.
2030
Cary Clark8cc16c72017-08-25 11:51:49 -04002031## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002032
Cary Clarka560c472017-11-27 10:44:06 -05002033<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04002034 enum <a href="#SkPaint_Style">Style</a> {
2035 <a href="#SkPaint_kFill_Style">kFill Style</a>,
2036 <a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2037 <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
2038 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002039
2040 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 -05002041</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002042
Cary Clark8cc16c72017-08-25 11:51:49 -04002043Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002044The stroke and fill
2045share all paint attributes; for instance, they are drawn with the same color.
2046
Cary Clark8cc16c72017-08-25 11:51:49 -04002047Use <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 -04002048a fill draw.
2049
2050### Constants
2051
2052<table>
2053 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002054 <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 -05002055Applies 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>.
2056<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 -04002057<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 -05002058The <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 -04002059and to create an unfilled hole inside the shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05002060<a href="#SkPaint_Style">Style</a> is set to <a href="#SkPaint_kFill_Style">kFill Style</a> by default.
2061</td>
Cary Clark12799e12017-07-28 15:18:29 -04002062 </tr>
2063 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002064 <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 -05002065Applies 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>.
2066<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 -04002067and ignore the set <a href="#SkPaint_Style">Style</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05002068The stroke construction is unaffected by the <a href="SkPath_Reference#Fill_Type">Path Fill Type</a>.
2069</td>
Cary Clark12799e12017-07-28 15:18:29 -04002070 </tr>
2071 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002072 <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 -05002073Applies 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>.
2074<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 -05002075and the set <a href="SkPath_Reference#Fill_Type">Path Fill Type</a> is ignored.
2076</td>
Cary Clark12799e12017-07-28 15:18:29 -04002077 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04002078 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002079 <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 -05002080May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.
2081</td>
Cary Clark12799e12017-07-28 15:18:29 -04002082 </tr>
2083
Cary Clark06c20f32018-03-20 15:53:27 -04002084
Cary Clark12799e12017-07-28 15:18:29 -04002085
Cary Clark493df1f2017-08-25 13:14:33 -04002086<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002087## getStyle
2088
Cary Clarka560c472017-11-27 10:44:06 -05002089<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002090Style getStyle() const
2091</pre>
2092
2093Whether the geometry is filled, stroked, or filled and stroked.
2094
2095### Return Value
2096
Cary Clark8cc16c72017-08-25 11:51:49 -04002097one 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 -04002098
2099### Example
2100
2101<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2102
2103#### Example Output
2104
2105~~~~
2106SkPaint::kFill_Style == paint.getStyle()
2107~~~~
2108
2109</fiddle-embed></div>
2110
2111### See Also
2112
Cary Clark8cc16c72017-08-25 11:51:49 -04002113<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002114
2115---
2116
Cary Clark493df1f2017-08-25 13:14:33 -04002117<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002118## setStyle
2119
Cary Clarka560c472017-11-27 10:44:06 -05002120<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002121void setStyle(Style style)
2122</pre>
2123
2124Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002125Has 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 -04002126
2127### Parameters
2128
Cary Clark8cc16c72017-08-25 11:51:49 -04002129<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2130one 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 -04002131 </tr>
2132</table>
2133
2134### Example
2135
2136<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2137
2138### See Also
2139
Cary Clark8cc16c72017-08-25 11:51:49 -04002140<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002141
2142---
2143
2144### See Also
2145
Cary Clark2a8c48b2018-02-15 17:31:24 -05002146<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 -04002147
Cary Clark08895c42018-02-01 09:37:32 -05002148## <a name="Stroke_Width"></a> Stroke Width
2149
Cary Clark8cc16c72017-08-25 11:51:49 -04002150<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002151of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002152set 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 -04002153
2154When width is greater than zero, the stroke encompasses as many pixels partially
2155or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002156the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002157
Cary Clark2a8c48b2018-02-15 17:31:24 -05002158The stroke dimensions are scaled by the canvas matrix, but <a href="#Style_Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002159remains one pixel wide regardless of scaling.
2160
2161The default width for the paint is zero.
2162
2163### Example
2164
skia-bookmaker525f9a92018-05-03 06:27:39 +00002165<div><fiddle-embed name="5112c7209a19e035c61cef33a624a652" gpu="true"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clark1a8d7622018-03-05 13:26:16 -05002166line and the platform implementation.
2167</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002168
Cary Clark493df1f2017-08-25 13:14:33 -04002169<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002170## getStrokeWidth
2171
Cary Clarka560c472017-11-27 10:44:06 -05002172<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002173SkScalar getStrokeWidth() const
2174</pre>
2175
Cary Clark8cc16c72017-08-25 11:51:49 -04002176Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002177outline the shape.
2178
2179### Return Value
2180
Cary Clark2a8c48b2018-02-15 17:31:24 -05002181zero for <a href="#Style_Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002182
2183### Example
2184
2185<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2186
2187#### Example Output
2188
2189~~~~
21900 == paint.getStrokeWidth()
2191~~~~
2192
2193</fiddle-embed></div>
2194
2195---
2196
Cary Clark493df1f2017-08-25 13:14:33 -04002197<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002198## setStrokeWidth
2199
Cary Clarka560c472017-11-27 10:44:06 -05002200<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002201void setStrokeWidth(SkScalar width)
2202</pre>
2203
2204Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002205outline the shape.
2206Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002207
2208### Parameters
2209
Cary Clark8cc16c72017-08-25 11:51:49 -04002210<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002211zero thickness for <a href="#Style_Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002212 </tr>
2213</table>
2214
2215### Example
2216
2217<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2218
2219#### Example Output
2220
2221~~~~
22225 == paint.getStrokeWidth()
2223~~~~
2224
2225</fiddle-embed></div>
2226
2227---
2228
Cary Clark08895c42018-02-01 09:37:32 -05002229## <a name="Miter_Limit"></a> Miter Limit
2230
Cary Clark8cc16c72017-08-25 11:51:49 -04002231<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002232relative to the stroke width.
2233
Cary Clark8cc16c72017-08-25 11:51:49 -04002234<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2235is 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>
2236or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002237
Cary Clark8cc16c72017-08-25 11:51:49 -04002238If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2239is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002240
Cary Clark8cc16c72017-08-25 11:51:49 -04002241<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002242
Cary Clark8cc16c72017-08-25 11:51:49 -04002243miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002244The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002245in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002246
2247Here are some miter limits and the angles that triggers them.
2248
2249| miter limit | angle in degrees |
2250| --- | --- |
2251| 10 | 11.48 |
2252| 9 | 12.76 |
2253| 8 | 14.36 |
2254| 7 | 16.43 |
2255| 6 | 19.19 |
2256| 5 | 23.07 |
2257| 4 | 28.96 |
2258| 3 | 38.94 |
2259| 2 | 60 |
2260| 1 | 180 |
2261
2262### Example
2263
2264<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2265When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002266by a bevel join.
2267</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002268
Cary Clark493df1f2017-08-25 13:14:33 -04002269<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002270## getStrokeMiter
2271
Cary Clarka560c472017-11-27 10:44:06 -05002272<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002273SkScalar getStrokeMiter() const
2274</pre>
2275
2276The limit at which a sharp corner is drawn beveled.
2277
2278### Return Value
2279
Cary Clark8cc16c72017-08-25 11:51:49 -04002280zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002281
2282### Example
2283
2284<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2285
2286#### Example Output
2287
2288~~~~
2289default miter limit == 4
2290~~~~
2291
2292</fiddle-embed></div>
2293
2294### See Also
2295
Cary Clark8cc16c72017-08-25 11:51:49 -04002296<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 -04002297
2298---
2299
Cary Clark493df1f2017-08-25 13:14:33 -04002300<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002301## setStrokeMiter
2302
Cary Clarka560c472017-11-27 10:44:06 -05002303<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002304void setStrokeMiter(SkScalar miter)
2305</pre>
2306
2307The limit at which a sharp corner is drawn beveled.
2308Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002309Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002310
2311### Parameters
2312
Cary Clark8cc16c72017-08-25 11:51:49 -04002313<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2314zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002315 </tr>
2316</table>
2317
2318### Example
2319
2320<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2321
2322#### Example Output
2323
2324~~~~
2325default miter limit == 8
2326~~~~
2327
2328</fiddle-embed></div>
2329
2330### See Also
2331
Cary Clark8cc16c72017-08-25 11:51:49 -04002332<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 -04002333
2334---
2335
Cary Clark08895c42018-02-01 09:37:32 -05002336## <a name="Stroke_Cap"></a> Stroke Cap
Cary Clark12799e12017-07-28 15:18:29 -04002337
Cary Clark8cc16c72017-08-25 11:51:49 -04002338## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002339
Cary Clarka560c472017-11-27 10:44:06 -05002340<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04002341 enum <a href="#SkPaint_Cap">Cap</a> {
2342 <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2343 <a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2344 <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002345
Cary Clark186d08f2018-04-03 08:43:27 -04002346 <a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2347 <a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2348 };
Cary Clark6fc50412017-09-21 12:31:06 -04002349
Cary Clark186d08f2018-04-03 08:43:27 -04002350 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 -05002351</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002352
Cary Clark2a8c48b2018-02-15 17:31:24 -05002353<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 -04002354
2355### Constants
2356
2357<table>
2358 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002359 <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.
2360</td>
Cary Clark12799e12017-07-28 15:18:29 -04002361 </tr>
2362 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002363 <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 -05002364and end.
2365</td>
Cary Clark12799e12017-07-28 15:18:29 -04002366 </tr>
2367 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002368 <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 -04002369and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002370of the stroke.
2371</td>
Cary Clark12799e12017-07-28 15:18:29 -04002372 </tr>
2373 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002374 <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>.
2375</td>
Cary Clark12799e12017-07-28 15:18:29 -04002376 </tr>
2377 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002378 <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 -05002379<a href="#Stroke_Cap">Stroke Cap</a> is set to <a href="#SkPaint_kButt_Cap">kButt Cap</a> by default.
2380</td>
Cary Clark12799e12017-07-28 15:18:29 -04002381 </tr>
2382 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002383 <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 -05002384May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.
2385</td>
Cary Clark12799e12017-07-28 15:18:29 -04002386 </tr>
2387
Cary Clark7cfcbca2018-01-04 16:11:51 -05002388Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002389follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002390
Cary Clark2a8c48b2018-02-15 17:31:24 -05002391If 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 -04002392visible beginning and end.
2393
Cary Clark2a8c48b2018-02-15 17:31:24 -05002394<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 -04002395
Cary Clark2a8c48b2018-02-15 17:31:24 -05002396<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Contour_Zero_Length">Zero Length Contour</a> is not drawn.
2397<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 -04002398at the contour point.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002399<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 -04002400<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002401
Cary Clark8cc16c72017-08-25 11:51:49 -04002402<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 -04002403
Cary Clark12799e12017-07-28 15:18:29 -04002404### Example
2405
Cary Clark2ade9972017-11-02 17:49:34 -04002406<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002407
Cary Clark493df1f2017-08-25 13:14:33 -04002408<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002409## getStrokeCap
2410
Cary Clarka560c472017-11-27 10:44:06 -05002411<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002412Cap getStrokeCap() const
2413</pre>
2414
2415The geometry drawn at the beginning and end of strokes.
2416
2417### Return Value
2418
Cary Clark8cc16c72017-08-25 11:51:49 -04002419one 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 -04002420
2421### Example
2422
2423<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2424
2425#### Example Output
2426
2427~~~~
2428kButt_Cap == default stroke cap
2429~~~~
2430
2431</fiddle-embed></div>
2432
2433### See Also
2434
Cary Clark8cc16c72017-08-25 11:51:49 -04002435<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002436
2437---
2438
Cary Clark493df1f2017-08-25 13:14:33 -04002439<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002440## setStrokeCap
2441
Cary Clarka560c472017-11-27 10:44:06 -05002442<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002443void setStrokeCap(Cap cap)
2444</pre>
2445
2446The geometry drawn at the beginning and end of strokes.
2447
2448### Parameters
2449
Cary Clark8cc16c72017-08-25 11:51:49 -04002450<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2451one 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>;
2452has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002453 </tr>
2454</table>
2455
2456### Example
2457
2458<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2459
2460#### Example Output
2461
2462~~~~
2463kRound_Cap == paint.getStrokeCap()
2464~~~~
2465
2466</fiddle-embed></div>
2467
2468### See Also
2469
Cary Clark8cc16c72017-08-25 11:51:49 -04002470<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002471
2472---
2473
Cary Clark08895c42018-02-01 09:37:32 -05002474## <a name="Stroke_Join"></a> Stroke Join
2475
Cary Clark2a8c48b2018-02-15 17:31:24 -05002476<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 -04002477
Cary Clark7cfcbca2018-01-04 16:11:51 -05002478Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002479follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002480
2481If the contour direction changes abruptly, because the tangent direction leading
2482to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002483the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002484
2485### Example
2486
Cary Clark2ade9972017-11-02 17:49:34 -04002487<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002488
Cary Clark8cc16c72017-08-25 11:51:49 -04002489## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002490
Cary Clarka560c472017-11-27 10:44:06 -05002491<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04002492 enum <a href="#SkPaint_Join">Join</a> {
2493 <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2494 <a href="#SkPaint_kRound_Join">kRound Join</a>,
2495 <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002496
Cary Clark186d08f2018-04-03 08:43:27 -04002497 <a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2498 <a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2499 };
Cary Clark6fc50412017-09-21 12:31:06 -04002500
Cary Clark186d08f2018-04-03 08:43:27 -04002501 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 -05002502</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002503
Cary Clark8cc16c72017-08-25 11:51:49 -04002504<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 -04002505affects the four corners of a stroked rectangle, and the connected segments in a
2506stroked path.
2507
2508Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2509radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2510connect the thick strokes.
2511
Cary Clark7cfcbca2018-01-04 16:11:51 -05002512The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002513not contain the actual join. For instance, a fill path constructed with round joins does
2514not necessarily include circles at each connected segment.
2515
2516### Constants
2517
2518<table>
2519 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002520 <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 -05002521If the extension exceeds <a href="#Miter_Limit">Miter Limit</a>, <a href="#SkPaint_kBevel_Join">kBevel Join</a> is used instead.
2522</td>
Cary Clark12799e12017-07-28 15:18:29 -04002523 </tr>
2524 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002525 <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.
2526</td>
Cary Clark12799e12017-07-28 15:18:29 -04002527 </tr>
2528 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002529 <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.
2530</td>
Cary Clark12799e12017-07-28 15:18:29 -04002531 </tr>
2532 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002533 <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>.
2534</td>
Cary Clark12799e12017-07-28 15:18:29 -04002535 </tr>
2536 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002537 <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 -05002538<a href="#Stroke_Join">Stroke Join</a> is set to <a href="#SkPaint_kMiter_Join">kMiter Join</a> by default.
2539</td>
Cary Clark12799e12017-07-28 15:18:29 -04002540 </tr>
2541 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002542 <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 -05002543May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.
2544</td>
Cary Clark12799e12017-07-28 15:18:29 -04002545 </tr>
2546</table>
2547
2548### Example
2549
2550<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2551
2552### See Also
2553
Cary Clark8cc16c72017-08-25 11:51:49 -04002554<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 -04002555
2556
2557
Cary Clark493df1f2017-08-25 13:14:33 -04002558<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002559## getStrokeJoin
2560
Cary Clarka560c472017-11-27 10:44:06 -05002561<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002562Join getStrokeJoin() const
2563</pre>
2564
Cary Clark0c5f5462017-12-15 11:21:51 -05002565The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002566
2567### Return Value
2568
Cary Clark8cc16c72017-08-25 11:51:49 -04002569one 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 -04002570
2571### Example
2572
2573<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2574
2575#### Example Output
2576
2577~~~~
2578kMiter_Join == default stroke join
2579~~~~
2580
2581</fiddle-embed></div>
2582
2583### See Also
2584
Cary Clark8cc16c72017-08-25 11:51:49 -04002585<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002586
2587---
2588
Cary Clark493df1f2017-08-25 13:14:33 -04002589<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002590## setStrokeJoin
2591
Cary Clarka560c472017-11-27 10:44:06 -05002592<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002593void setStrokeJoin(Join join)
2594</pre>
2595
Cary Clark0c5f5462017-12-15 11:21:51 -05002596The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002597
2598### Parameters
2599
Cary Clark8cc16c72017-08-25 11:51:49 -04002600<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2601one 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 -04002602otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002603 </tr>
2604</table>
2605
2606### Example
2607
2608<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2609
2610#### Example Output
2611
2612~~~~
2613kMiter_Join == paint.getStrokeJoin()
2614~~~~
2615
2616</fiddle-embed></div>
2617
2618### See Also
2619
Cary Clark8cc16c72017-08-25 11:51:49 -04002620<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002621
2622---
2623
2624### See Also
2625
Cary Clark8cc16c72017-08-25 11:51:49 -04002626<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002627
Cary Clark08895c42018-02-01 09:37:32 -05002628## <a name="Fill_Path"></a> Fill Path
2629
Cary Clark8cc16c72017-08-25 11:51:49 -04002630<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 -04002631
Cary Clark8cc16c72017-08-25 11:51:49 -04002632If <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 -04002633replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2634destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002635
Cary Clark4c06f5e2017-08-04 12:48:24 -04002636Fill <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
2637the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002638
Cary Clark7cfcbca2018-01-04 16:11:51 -05002639If <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 -04002640and <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>,
2641and <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 -04002642
Cary Clark7cfcbca2018-01-04 16:11:51 -05002643Fill <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 -04002644
Cary Clark8cc16c72017-08-25 11:51:49 -04002645If 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 -05002646returns false since <a href="#Style_Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002647
Cary Clark493df1f2017-08-25 13:14:33 -04002648<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002649## getFillPath
2650
Cary Clarka560c472017-11-27 10:44:06 -05002651<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2652bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002653</pre>
2654
2655The filled equivalent of the stroked path.
2656
2657### Parameters
2658
Cary Clark8cc16c72017-08-25 11:51:49 -04002659<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002660<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002661 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2662resulting <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>
2663 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002664optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002665 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002666if > 1, increase precision, else if (0 < res < 1) reduce precision
2667to favor speed and size</td>
2668 </tr>
2669</table>
2670
2671### Return Value
2672
Cary Clark2a8c48b2018-02-15 17:31:24 -05002673true 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 -04002674
2675### Example
2676
Cary Clark2a8c48b2018-02-15 17:31:24 -05002677<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.
2678At the lowest precision, the <a href="SkPath_Reference#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002679At the highest precision, the filled path has high fidelity compared to the original stroke.
2680</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002681
2682---
2683
Cary Clark2dc84ad2018-01-26 12:56:22 -05002684<a name="SkPaint_getFillPath_2"></a>
2685
Cary Clarka560c472017-11-27 10:44:06 -05002686<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002687bool getFillPath(const SkPath& src, SkPath* dst) const
2688</pre>
2689
2690The filled equivalent of the stroked path.
2691
Cary Clark8cc16c72017-08-25 11:51:49 -04002692Replaces <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>.
2693<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 -04002694
2695### Parameters
2696
Cary Clark8cc16c72017-08-25 11:51:49 -04002697<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002698<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002699 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2700resulting <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 -04002701 </tr>
2702</table>
2703
2704### Return Value
2705
Cary Clark2a8c48b2018-02-15 17:31:24 -05002706true 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 -04002707
2708### Example
2709
2710<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2711
2712---
2713
2714### See Also
2715
Cary Clark8cc16c72017-08-25 11:51:49 -04002716<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 -04002717
Cary Clark08895c42018-02-01 09:37:32 -05002718## <a name="Shader_Methods"></a> Shader Methods
2719
Cary Clark4c06f5e2017-08-04 12:48:24 -04002720<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2721<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002722If <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 -04002723
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002724<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>.
2725If <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 -04002726the fill.
2727
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002728The 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 -04002729
2730### Example
2731
2732<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2733
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002734If <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 -04002735
2736### Example
2737
skia-bookmaker525f9a92018-05-03 06:27:39 +00002738<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002739
Cary Clark493df1f2017-08-25 13:14:33 -04002740<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002741## getShader
2742
Cary Clarka560c472017-11-27 10:44:06 -05002743<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002744SkShader* getShader() const
2745</pre>
2746
2747Optional colors used when filling a path, such as a gradient.
2748
Cary Clark4c06f5e2017-08-04 12:48:24 -04002749Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002750
2751### Return Value
2752
Cary Clark4c06f5e2017-08-04 12:48:24 -04002753<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002754
2755### Example
2756
2757<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2758
2759#### Example Output
2760
2761~~~~
2762nullptr == shader
2763nullptr != shader
2764~~~~
2765
2766</fiddle-embed></div>
2767
2768---
2769
Cary Clark493df1f2017-08-25 13:14:33 -04002770<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002771## refShader
2772
Cary Clarka560c472017-11-27 10:44:06 -05002773<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002774sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002775</pre>
2776
2777Optional colors used when filling a path, such as a gradient.
2778
Cary Clark4c06f5e2017-08-04 12:48:24 -04002779Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002780
2781### Return Value
2782
Cary Clark4c06f5e2017-08-04 12:48:24 -04002783<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002784
2785### Example
2786
2787<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2788
2789#### Example Output
2790
2791~~~~
2792shader unique: true
2793shader unique: false
2794~~~~
2795
2796</fiddle-embed></div>
2797
2798---
2799
Cary Clark493df1f2017-08-25 13:14:33 -04002800<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002801## setShader
2802
Cary Clarka560c472017-11-27 10:44:06 -05002803<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002804void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002805</pre>
2806
2807Optional colors used when filling a path, such as a gradient.
2808
Cary Clarkd0530ba2017-09-14 11:25:39 -04002809Sets <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 -04002810Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002811
2812### Parameters
2813
Cary Clark8cc16c72017-08-25 11:51:49 -04002814<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002815how 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 -04002816 </tr>
2817</table>
2818
2819### Example
2820
2821<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2822
2823---
2824
Cary Clark08895c42018-02-01 09:37:32 -05002825## <a name="Color_Filter_Methods"></a> Color Filter Methods
2826
Cary Clark4c06f5e2017-08-04 12:48:24 -04002827<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2828<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 -04002829If <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 -04002830
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002831The 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 -04002832
2833### Example
2834
2835<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2836
Cary Clark493df1f2017-08-25 13:14:33 -04002837<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002838## getColorFilter
2839
Cary Clarka560c472017-11-27 10:44:06 -05002840<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002841SkColorFilter* getColorFilter() const
2842</pre>
2843
Cary Clark4c06f5e2017-08-04 12:48:24 -04002844Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2845Does 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 -04002846
2847### Return Value
2848
Cary Clark4c06f5e2017-08-04 12:48:24 -04002849<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002850
2851### Example
2852
2853<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2854
2855#### Example Output
2856
2857~~~~
2858nullptr == color filter
2859nullptr != color filter
2860~~~~
2861
2862</fiddle-embed></div>
2863
2864---
2865
Cary Clark493df1f2017-08-25 13:14:33 -04002866<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002867## refColorFilter
2868
Cary Clarka560c472017-11-27 10:44:06 -05002869<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002870sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002871</pre>
2872
Cary Clark4c06f5e2017-08-04 12:48:24 -04002873Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2874Increases <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 -04002875
2876### Return Value
2877
Cary Clark4c06f5e2017-08-04 12:48:24 -04002878<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002879
2880### Example
2881
2882<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2883
2884#### Example Output
2885
2886~~~~
2887color filter unique: true
2888color filter unique: false
2889~~~~
2890
2891</fiddle-embed></div>
2892
2893---
2894
Cary Clark493df1f2017-08-25 13:14:33 -04002895<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002896## setColorFilter
2897
Cary Clarka560c472017-11-27 10:44:06 -05002898<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002899void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002900</pre>
2901
Cary Clark6fc50412017-09-21 12:31:06 -04002902Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2903<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2904
2905Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002906
2907### Parameters
2908
Cary Clark8cc16c72017-08-25 11:51:49 -04002909<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002910<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002911 </tr>
2912</table>
2913
2914### Example
2915
2916<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2917
2918---
2919
Cary Clark08895c42018-02-01 09:37:32 -05002920## <a name="Blend_Mode_Methods"></a> Blend Mode Methods
2921
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002922<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 -05002923The default setting, <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002924over the destination color.
2925
2926### Example
2927
2928<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2929
2930### See Also
2931
Cary Clark4c06f5e2017-08-04 12:48:24 -04002932<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002933
Cary Clark493df1f2017-08-25 13:14:33 -04002934<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002935## getBlendMode
2936
Cary Clarka560c472017-11-27 10:44:06 -05002937<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002938SkBlendMode getBlendMode() const
2939</pre>
2940
Cary Clark4c06f5e2017-08-04 12:48:24 -04002941Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002942By default, returns <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002943
2944### Return Value
2945
2946mode used to combine source color with destination color
2947
2948### Example
2949
skia-bookmaker525f9a92018-05-03 06:27:39 +00002950<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04002951
2952#### Example Output
2953
2954~~~~
2955kSrcOver == getBlendMode
2956kSrcOver != getBlendMode
2957~~~~
2958
2959</fiddle-embed></div>
2960
2961---
2962
Cary Clark493df1f2017-08-25 13:14:33 -04002963<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002964## isSrcOver
2965
Cary Clarka560c472017-11-27 10:44:06 -05002966<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002967bool isSrcOver() const
2968</pre>
2969
Cary Clark2a8c48b2018-02-15 17:31:24 -05002970Returns 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 -04002971
2972### Return Value
2973
Cary Clark2a8c48b2018-02-15 17:31:24 -05002974true 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 -04002975
2976### Example
2977
2978<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2979
2980#### Example Output
2981
2982~~~~
2983isSrcOver == true
2984isSrcOver != true
2985~~~~
2986
2987</fiddle-embed></div>
2988
2989---
2990
Cary Clark493df1f2017-08-25 13:14:33 -04002991<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002992## setBlendMode
2993
Cary Clarka560c472017-11-27 10:44:06 -05002994<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002995void setBlendMode(SkBlendMode mode)
2996</pre>
2997
Cary Clark7cfcbca2018-01-04 16:11:51 -05002998Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002999Does not check for valid input.
3000
3001### Parameters
3002
Cary Clark8cc16c72017-08-25 11:51:49 -04003003<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003004<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003005 </tr>
3006</table>
3007
3008### Example
3009
3010<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3011
3012#### Example Output
3013
3014~~~~
3015isSrcOver == true
3016isSrcOver != true
3017~~~~
3018
3019</fiddle-embed></div>
3020
3021---
3022
Cary Clark08895c42018-02-01 09:37:32 -05003023## <a name="Path_Effect_Methods"></a> Path Effect Methods
3024
Cary Clark4c06f5e2017-08-04 12:48:24 -04003025<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3026<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 -04003027If <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 -04003028
3029### Example
3030
3031<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3032
3033### See Also
3034
Cary Clark4c06f5e2017-08-04 12:48:24 -04003035<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003036
Cary Clark493df1f2017-08-25 13:14:33 -04003037<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003038## getPathEffect
3039
Cary Clarka560c472017-11-27 10:44:06 -05003040<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003041SkPathEffect* getPathEffect() const
3042</pre>
3043
Cary Clark4c06f5e2017-08-04 12:48:24 -04003044Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3045Does 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 -04003046
3047### Return Value
3048
Cary Clark4c06f5e2017-08-04 12:48:24 -04003049<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003050
3051### Example
3052
3053<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3054
3055#### Example Output
3056
3057~~~~
3058nullptr == path effect
3059nullptr != path effect
3060~~~~
3061
3062</fiddle-embed></div>
3063
3064---
3065
Cary Clark493df1f2017-08-25 13:14:33 -04003066<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003067## refPathEffect
3068
Cary Clarka560c472017-11-27 10:44:06 -05003069<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003070sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003071</pre>
3072
Cary Clark4c06f5e2017-08-04 12:48:24 -04003073Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3074Increases <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 -04003075
3076### Return Value
3077
Cary Clark4c06f5e2017-08-04 12:48:24 -04003078<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003079
3080### Example
3081
Cary Clarka560c472017-11-27 10:44:06 -05003082<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003083
3084#### Example Output
3085
3086~~~~
3087path effect unique: true
3088path effect unique: false
3089~~~~
3090
3091</fiddle-embed></div>
3092
3093---
3094
Cary Clark493df1f2017-08-25 13:14:33 -04003095<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003096## setPathEffect
3097
Cary Clarka560c472017-11-27 10:44:06 -05003098<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003099void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003100</pre>
3101
Cary Clark6fc50412017-09-21 12:31:06 -04003102Sets <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
3103<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3104
3105Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003106
3107### Parameters
3108
Cary Clark8cc16c72017-08-25 11:51:49 -04003109<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003110replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003111 </tr>
3112</table>
3113
3114### Example
3115
3116<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3117
3118---
3119
Cary Clark08895c42018-02-01 09:37:32 -05003120## <a name="Mask_Filter_Methods"></a> Mask Filter Methods
3121
Cary Clarkce101242017-09-01 15:51:02 -04003122<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 -05003123<a href="undocumented#Mask_Filter">Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003124
3125<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3126creating 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
3127modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003128
3129### Example
3130
Cary Clark681287e2018-03-16 11:34:15 -04003131<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003132
Cary Clark493df1f2017-08-25 13:14:33 -04003133<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003134## getMaskFilter
3135
Cary Clarka560c472017-11-27 10:44:06 -05003136<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003137SkMaskFilter* getMaskFilter() const
3138</pre>
3139
Cary Clark4c06f5e2017-08-04 12:48:24 -04003140Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3141Does 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 -04003142
3143### Return Value
3144
Cary Clark4c06f5e2017-08-04 12:48:24 -04003145<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003146
3147### Example
3148
Cary Clark681287e2018-03-16 11:34:15 -04003149<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003150
3151#### Example Output
3152
3153~~~~
3154nullptr == mask filter
3155nullptr != mask filter
3156~~~~
3157
3158</fiddle-embed></div>
3159
3160---
3161
Cary Clark493df1f2017-08-25 13:14:33 -04003162<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003163## refMaskFilter
3164
Cary Clarka560c472017-11-27 10:44:06 -05003165<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003166sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003167</pre>
3168
Cary Clark4c06f5e2017-08-04 12:48:24 -04003169Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003170
Cary Clark4c06f5e2017-08-04 12:48:24 -04003171Increases <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 -04003172
3173### Return Value
3174
Cary Clark4c06f5e2017-08-04 12:48:24 -04003175<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003176
3177### Example
3178
Cary Clark681287e2018-03-16 11:34:15 -04003179<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003180
3181#### Example Output
3182
3183~~~~
3184mask filter unique: true
3185mask filter unique: false
3186~~~~
3187
3188</fiddle-embed></div>
3189
3190---
3191
Cary Clark493df1f2017-08-25 13:14:33 -04003192<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003193## setMaskFilter
3194
Cary Clarka560c472017-11-27 10:44:06 -05003195<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003196void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003197</pre>
3198
Cary Clark6fc50412017-09-21 12:31:06 -04003199Sets <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
3200<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
3201<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3202
Cary Clark6fc50412017-09-21 12:31:06 -04003203Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003204
3205### Parameters
3206
Cary Clark8cc16c72017-08-25 11:51:49 -04003207<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003208modifies clipping mask generated from drawn geometry</td>
3209 </tr>
3210</table>
3211
3212### Example
3213
Cary Clark681287e2018-03-16 11:34:15 -04003214<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003215
3216---
3217
Cary Clark08895c42018-02-01 09:37:32 -05003218## <a name="Typeface_Methods"></a> Typeface Methods
3219
Cary Clark4c06f5e2017-08-04 12:48:24 -04003220<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3221<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3222The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003223implementation.
3224
3225### Example
3226
Ben Wagner700ff172017-11-08 15:37:22 -05003227<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003228
Cary Clark493df1f2017-08-25 13:14:33 -04003229<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003230## getTypeface
3231
Cary Clarka560c472017-11-27 10:44:06 -05003232<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003233SkTypeface* getTypeface() const
3234</pre>
3235
Cary Clark4c06f5e2017-08-04 12:48:24 -04003236Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003237Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003238
3239### Return Value
3240
Cary Clark4c06f5e2017-08-04 12:48:24 -04003241<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003242
3243### Example
3244
Cary Clark71961fb2018-01-05 14:21:59 -05003245<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003246
3247#### Example Output
3248
3249~~~~
3250nullptr == typeface
3251nullptr != typeface
3252~~~~
3253
3254</fiddle-embed></div>
3255
3256---
3257
Cary Clark493df1f2017-08-25 13:14:33 -04003258<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003259## refTypeface
3260
Cary Clarka560c472017-11-27 10:44:06 -05003261<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003262sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003263</pre>
3264
Cary Clark4c06f5e2017-08-04 12:48:24 -04003265Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003266
3267### Return Value
3268
Cary Clark4c06f5e2017-08-04 12:48:24 -04003269<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003270
3271### Example
3272
skia-bookmaker525f9a92018-05-03 06:27:39 +00003273<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003274
3275#### Example Output
3276
3277~~~~
3278typeface1 != typeface2
3279typeface1 == typeface2
3280~~~~
3281
3282</fiddle-embed></div>
3283
3284---
3285
Cary Clark493df1f2017-08-25 13:14:33 -04003286<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003287## setTypeface
3288
Cary Clarka560c472017-11-27 10:44:06 -05003289<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003290void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003291</pre>
3292
Cary Clark7cfcbca2018-01-04 16:11:51 -05003293Sets <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 -04003294Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3295<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003296
3297### Parameters
3298
Cary Clark8cc16c72017-08-25 11:51:49 -04003299<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003300font and style used to draw text</td>
3301 </tr>
3302</table>
3303
3304### Example
3305
Cary Clark71961fb2018-01-05 14:21:59 -05003306<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003307
3308---
3309
Cary Clark08895c42018-02-01 09:37:32 -05003310## <a name="Image_Filter_Methods"></a> Image Filter Methods
3311
Cary Clark8cc16c72017-08-25 11:51:49 -04003312<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 -05003313with <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 -04003314which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003315
Cary Clark4c06f5e2017-08-04 12:48:24 -04003316<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 -04003317can 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 -04003318<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 +00003319<a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003320
3321### Example
3322
Update Docs4410d7f2018-03-19 06:05:52 +00003323<div><fiddle-embed name="250e45c5935d54eac6aca775d1fe3475"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003324
Cary Clark493df1f2017-08-25 13:14:33 -04003325<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003326## getImageFilter
3327
Cary Clarka560c472017-11-27 10:44:06 -05003328<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003329SkImageFilter* getImageFilter() const
3330</pre>
3331
Cary Clark4c06f5e2017-08-04 12:48:24 -04003332Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3333Does 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 -04003334
3335### Return Value
3336
Cary Clark4c06f5e2017-08-04 12:48:24 -04003337<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003338
3339### Example
3340
Cary Clarka560c472017-11-27 10:44:06 -05003341<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003342
3343#### Example Output
3344
3345~~~~
3346nullptr == image filter
3347nullptr != image filter
3348~~~~
3349
3350</fiddle-embed></div>
3351
3352---
3353
Cary Clark493df1f2017-08-25 13:14:33 -04003354<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003355## refImageFilter
3356
Cary Clarka560c472017-11-27 10:44:06 -05003357<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003358sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003359</pre>
3360
Cary Clark4c06f5e2017-08-04 12:48:24 -04003361Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3362Increases <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 -04003363
3364### Return Value
3365
Cary Clark4c06f5e2017-08-04 12:48:24 -04003366<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003367
3368### Example
3369
3370<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3371
3372#### Example Output
3373
3374~~~~
3375image filter unique: true
3376image filter unique: false
3377~~~~
3378
3379</fiddle-embed></div>
3380
3381---
3382
Cary Clark493df1f2017-08-25 13:14:33 -04003383<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003384## setImageFilter
3385
Cary Clarka560c472017-11-27 10:44:06 -05003386<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003387void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003388</pre>
3389
Cary Clark6fc50412017-09-21 12:31:06 -04003390Sets <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
3391<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 -04003392on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003393
Cary Clark6fc50412017-09-21 12:31:06 -04003394Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003395
3396### Parameters
3397
Cary Clark8cc16c72017-08-25 11:51:49 -04003398<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003399how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003400 </tr>
3401</table>
3402
3403### Example
3404
3405<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3406
3407---
3408
Cary Clark08895c42018-02-01 09:37:32 -05003409## <a name="Draw_Looper_Methods"></a> Draw Looper Methods
3410
Cary Clark4c06f5e2017-08-04 12:48:24 -04003411<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 -04003412to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003413
Cary Clark4c06f5e2017-08-04 12:48:24 -04003414<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3415<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 -05003416Set <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 -04003417
3418### Example
3419
3420<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3421
Cary Clark493df1f2017-08-25 13:14:33 -04003422<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003423## getDrawLooper
3424
Cary Clarka560c472017-11-27 10:44:06 -05003425<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003426SkDrawLooper* getDrawLooper() const
3427</pre>
3428
Cary Clark4c06f5e2017-08-04 12:48:24 -04003429Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3430Does 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 -04003431
3432### Return Value
3433
Cary Clark4c06f5e2017-08-04 12:48:24 -04003434<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003435
3436### Example
3437
3438<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3439
3440#### Example Output
3441
3442~~~~
3443nullptr == draw looper
3444nullptr != draw looper
3445~~~~
3446
3447</fiddle-embed></div>
3448
3449---
3450
Cary Clark493df1f2017-08-25 13:14:33 -04003451<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003452## refDrawLooper
3453
Cary Clarka560c472017-11-27 10:44:06 -05003454<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003455sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003456</pre>
3457
Cary Clark4c06f5e2017-08-04 12:48:24 -04003458Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3459Increases <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 -04003460
3461### Return Value
3462
Cary Clark4c06f5e2017-08-04 12:48:24 -04003463<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003464
3465### Example
3466
3467<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3468
3469#### Example Output
3470
3471~~~~
3472draw looper unique: true
3473draw looper unique: false
3474~~~~
3475
3476</fiddle-embed></div>
3477
3478---
3479
Cary Clark493df1f2017-08-25 13:14:33 -04003480<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003481## getLooper
3482
Cary Clarka560c472017-11-27 10:44:06 -05003483<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003484SkDrawLooper* getLooper() const
3485</pre>
3486
Cary Clark12799e12017-07-28 15:18:29 -04003487---
3488
Cary Clark493df1f2017-08-25 13:14:33 -04003489<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003490## setDrawLooper
3491
Cary Clarka560c472017-11-27 10:44:06 -05003492<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003493void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003494</pre>
3495
Cary Clark6fc50412017-09-21 12:31:06 -04003496Sets <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
3497<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
3498drawing unaltered.
3499
3500Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003501
3502### Parameters
3503
Cary Clark8cc16c72017-08-25 11:51:49 -04003504<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003505iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003506 </tr>
3507</table>
3508
3509### Example
3510
3511<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3512
3513---
3514
Cary Clark493df1f2017-08-25 13:14:33 -04003515<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003516## setLooper
3517
Cary Clarka560c472017-11-27 10:44:06 -05003518<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003519void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003520</pre>
3521
Cary Clark12799e12017-07-28 15:18:29 -04003522---
3523
Cary Clark08895c42018-02-01 09:37:32 -05003524## <a name="Text_Align"></a> Text Align
Cary Clark12799e12017-07-28 15:18:29 -04003525
Cary Clark8cc16c72017-08-25 11:51:49 -04003526## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003527
Cary Clarka560c472017-11-27 10:44:06 -05003528<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003529 enum <a href="#SkPaint_Align">Align</a> {
3530 <a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3531 <a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3532 <a href="#SkPaint_kRight_Align">kRight Align</a>,
3533 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04003534
3535 static constexpr int <a href="#SkPaint_kAlignCount">kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05003536</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003537
Cary Clark8cc16c72017-08-25 11:51:49 -04003538<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clark2a8c48b2018-02-15 17:31:24 -05003539<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>,
3540<a href="SkCanvas_Reference#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="SkCanvas_Reference#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3541<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>,
3542and <a href="SkCanvas_Reference#SkCanvas_drawString">SkCanvas::drawString</a>;
3543as 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 -04003544
3545The text position is set by the font for both horizontal and vertical text.
3546Typically, for horizontal text, the position is to the left side of the glyph on the
3547base line; and for vertical text, the position is the horizontal center of the glyph
3548at the caps height.
3549
Cary Clark7cfcbca2018-01-04 16:11:51 -05003550<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 -04003551using the metrics returned by the font.
3552
Cary Clark8cc16c72017-08-25 11:51:49 -04003553<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003554
3555### Constants
3556
3557<table>
3558 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003559 <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.
3560</td>
Cary Clark12799e12017-07-28 15:18:29 -04003561 </tr>
3562 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003563 <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 -05003564half its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3565</td>
Cary Clark12799e12017-07-28 15:18:29 -04003566 </tr>
3567 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003568 <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 -05003569and by its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3570</td>
Cary Clark12799e12017-07-28 15:18:29 -04003571 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04003572 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003573 <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.
3574</td>
Cary Clark12799e12017-07-28 15:18:29 -04003575 </tr>
3576
Cary Clark06c20f32018-03-20 15:53:27 -04003577
Cary Clark12799e12017-07-28 15:18:29 -04003578
3579### Example
3580
Cary Clark1a8d7622018-03-05 13:26:16 -05003581<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
3582</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003583
3584### Example
3585
Cary Clark1a8d7622018-03-05 13:26:16 -05003586<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.
3587</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003588
Cary Clark493df1f2017-08-25 13:14:33 -04003589<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003590## getTextAlign
3591
Cary Clarka560c472017-11-27 10:44:06 -05003592<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003593Align getTextAlign() const
3594</pre>
3595
Cary Clark8cc16c72017-08-25 11:51:49 -04003596Returns <a href="#Text_Align">Text Align</a>.
3597Returns <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 -04003598
3599### Return Value
3600
3601text placement relative to position
3602
3603### Example
3604
3605<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3606
3607#### Example Output
3608
3609~~~~
3610kLeft_Align == default
3611~~~~
3612
3613</fiddle-embed></div>
3614
3615---
3616
Cary Clark493df1f2017-08-25 13:14:33 -04003617<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003618## setTextAlign
3619
Cary Clarka560c472017-11-27 10:44:06 -05003620<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003621void setTextAlign(Align align)
3622</pre>
3623
Cary Clark8cc16c72017-08-25 11:51:49 -04003624Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3625Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003626
3627### Parameters
3628
Cary Clark8cc16c72017-08-25 11:51:49 -04003629<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003630text placement relative to position</td>
3631 </tr>
3632</table>
3633
3634### Example
3635
Cary Clark4c06f5e2017-08-04 12:48:24 -04003636<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 -05003637alignment out of range has no effect.
3638</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003639
3640---
3641
Cary Clark08895c42018-02-01 09:37:32 -05003642## <a name="Text_Size"></a> Text Size
3643
Cary Clark8cc16c72017-08-25 11:51:49 -04003644<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3645<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3646<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003647Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003648
3649### Example
3650
3651<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3652
Cary Clark493df1f2017-08-25 13:14:33 -04003653<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003654## getTextSize
3655
Cary Clarka560c472017-11-27 10:44:06 -05003656<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003657SkScalar getTextSize() const
3658</pre>
3659
Cary Clark8cc16c72017-08-25 11:51:49 -04003660Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003661
3662### Return Value
3663
3664typographic height of text
3665
3666### Example
3667
3668<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3669
3670---
3671
Cary Clark493df1f2017-08-25 13:14:33 -04003672<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003673## setTextSize
3674
Cary Clarka560c472017-11-27 10:44:06 -05003675<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003676void setTextSize(SkScalar textSize)
3677</pre>
3678
Cary Clark8cc16c72017-08-25 11:51:49 -04003679Sets <a href="#Text_Size">Text Size</a> in points.
3680Has 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 -04003681
3682### Parameters
3683
Cary Clark8cc16c72017-08-25 11:51:49 -04003684<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003685typographic height of text</td>
3686 </tr>
3687</table>
3688
3689### Example
3690
3691<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3692
3693---
3694
Cary Clark08895c42018-02-01 09:37:32 -05003695## <a name="Text_Scale_X"></a> Text Scale X
3696
Cary Clark8cc16c72017-08-25 11:51:49 -04003697<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003698<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003699is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003700<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3701<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003702
3703### Example
3704
3705<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3706
Cary Clark493df1f2017-08-25 13:14:33 -04003707<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003708## getTextScaleX
3709
Cary Clarka560c472017-11-27 10:44:06 -05003710<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003711SkScalar getTextScaleX() const
3712</pre>
3713
Cary Clark8cc16c72017-08-25 11:51:49 -04003714Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003715Default value is 1.
3716
3717### Return Value
3718
3719text horizontal scale
3720
3721### Example
3722
3723<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3724
3725---
3726
Cary Clark493df1f2017-08-25 13:14:33 -04003727<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003728## setTextScaleX
3729
Cary Clarka560c472017-11-27 10:44:06 -05003730<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003731void setTextScaleX(SkScalar scaleX)
3732</pre>
3733
Cary Clark8cc16c72017-08-25 11:51:49 -04003734Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003735Default value is 1.
3736
3737### Parameters
3738
Cary Clark8cc16c72017-08-25 11:51:49 -04003739<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003740text horizontal scale</td>
3741 </tr>
3742</table>
3743
3744### Example
3745
3746<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3747
3748---
3749
Cary Clark08895c42018-02-01 09:37:32 -05003750## <a name="Text_Skew_X"></a> Text Skew X
3751
Cary Clark8cc16c72017-08-25 11:51:49 -04003752<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003753<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003754is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003755<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3756<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003757
3758### Example
3759
3760<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3761
Cary Clark493df1f2017-08-25 13:14:33 -04003762<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003763## getTextSkewX
3764
Cary Clarka560c472017-11-27 10:44:06 -05003765<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003766SkScalar getTextSkewX() const
3767</pre>
3768
Cary Clark8cc16c72017-08-25 11:51:49 -04003769Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003770Default value is zero.
3771
3772### Return Value
3773
3774additional shear in x-axis relative to y-axis
3775
3776### Example
3777
3778<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3779
3780---
3781
Cary Clark493df1f2017-08-25 13:14:33 -04003782<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003783## setTextSkewX
3784
Cary Clarka560c472017-11-27 10:44:06 -05003785<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003786void setTextSkewX(SkScalar skewX)
3787</pre>
3788
Cary Clark8cc16c72017-08-25 11:51:49 -04003789Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003790Default value is zero.
3791
3792### Parameters
3793
Cary Clark8cc16c72017-08-25 11:51:49 -04003794<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003795additional shear in x-axis relative to y-axis</td>
3796 </tr>
3797</table>
3798
3799### Example
3800
3801<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3802
3803---
3804
Cary Clark08895c42018-02-01 09:37:32 -05003805## <a name="Text_Encoding"></a> Text Encoding
Cary Clark12799e12017-07-28 15:18:29 -04003806
Cary Clark8cc16c72017-08-25 11:51:49 -04003807## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003808
Cary Clarka560c472017-11-27 10:44:06 -05003809<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003810 enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3811 <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3812 <a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3813 <a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3814 <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
3815 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003816</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003817
Cary Clark6fc50412017-09-21 12:31:06 -04003818<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003819size, 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 -04003820
Cary Clarka560c472017-11-27 10:44:06 -05003821Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003822All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003823in the total storage required.
3824
Cary Clark7cfcbca2018-01-04 16:11:51 -05003825<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 -04003826
Cary Clark7cfcbca2018-01-04 16:11:51 -05003827<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 -04003828
Cary Clark7cfcbca2018-01-04 16:11:51 -05003829<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 -04003830
Cary Clark7cfcbca2018-01-04 16:11:51 -05003831<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 -04003832A glyph index is a 16-bit word.
3833
Cary Clark8cc16c72017-08-25 11:51:49 -04003834<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 -04003835
3836### Constants
3837
3838<table>
3839 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003840 <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.
3841</td>
Cary Clark12799e12017-07-28 15:18:29 -04003842 </tr>
3843 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003844 <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.
3845</td>
Cary Clark12799e12017-07-28 15:18:29 -04003846 </tr>
3847 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003848 <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.
3849</td>
Cary Clark12799e12017-07-28 15:18:29 -04003850 </tr>
3851 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003852 <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.
3853</td>
Cary Clark12799e12017-07-28 15:18:29 -04003854 </tr>
3855
Cary Clark06c20f32018-03-20 15:53:27 -04003856
Cary Clark12799e12017-07-28 15:18:29 -04003857
3858### Example
3859
Cary Clarka560c472017-11-27 10:44:06 -05003860<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3861Second line is encoded in UTF-16.
3862Third line is encoded in UTF-32.
Cary Clark1a8d7622018-03-05 13:26:16 -05003863Fourth line has 16 bit glyph indices.
3864</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003865
Cary Clark493df1f2017-08-25 13:14:33 -04003866<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003867## getTextEncoding
3868
Cary Clarka560c472017-11-27 10:44:06 -05003869<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003870TextEncoding getTextEncoding() const
3871</pre>
3872
Cary Clark8cc16c72017-08-25 11:51:49 -04003873Returns <a href="#Text_Encoding">Text Encoding</a>.
3874<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 -04003875
3876### Return Value
3877
Cary Clark7cfcbca2018-01-04 16:11:51 -05003878one 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 -04003879<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003880
3881### Example
3882
skia-bookmaker525f9a92018-05-03 06:27:39 +00003883<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04003884
3885#### Example Output
3886
3887~~~~
3888kUTF8_TextEncoding == text encoding
3889kGlyphID_TextEncoding == text encoding
3890~~~~
3891
3892</fiddle-embed></div>
3893
3894---
3895
Cary Clark493df1f2017-08-25 13:14:33 -04003896<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003897## setTextEncoding
3898
Cary Clarka560c472017-11-27 10:44:06 -05003899<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003900void setTextEncoding(TextEncoding encoding)
3901</pre>
3902
Cary Clark7cfcbca2018-01-04 16:11:51 -05003903Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003904<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
3905Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003906
3907### Parameters
3908
Cary Clark8cc16c72017-08-25 11:51:49 -04003909<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003910one 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 -04003911<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003912 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04003913#
3914
Cary Clark12799e12017-07-28 15:18:29 -04003915</table>
3916
3917### Example
3918
3919<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
3920
3921#### Example Output
3922
3923~~~~
39244 != text encoding
3925~~~~
3926
3927</fiddle-embed></div>
3928
3929---
3930
Cary Clark08895c42018-02-01 09:37:32 -05003931## <a name="Font_Metrics"></a> Font Metrics
3932
Cary Clark2a8c48b2018-02-15 17:31:24 -05003933<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 -05003934The 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 -04003935<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04003936
Cary Clark4c06f5e2017-08-04 12:48:24 -04003937<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 -04003938X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
3939are positive.
3940Y-axis values above the baseline are negative, and below the baseline are positive.
3941
3942### Example
3943
Ben Wagnere5806492017-11-09 12:08:31 -05003944<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003945
Cary Clark8cc16c72017-08-25 11:51:49 -04003946# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04003947
Cary Clarka560c472017-11-27 10:44:06 -05003948<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003949 struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
3950 enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
3951 <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
3952 <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
3953 <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
3954 <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
3955 };
Cary Clark12799e12017-07-28 15:18:29 -04003956
Cary Clark186d08f2018-04-03 08:43:27 -04003957 uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
3958 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
3959 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
3960 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
3961 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
3962 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
3963 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
3964 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
3965 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
3966 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
3967 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
3968 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
3969 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
3970 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
3971 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
3972 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04003973
Cary Clark186d08f2018-04-03 08:43:27 -04003974 bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
3975 bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
3976 bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
3977 bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
3978 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003979</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003980
Cary Clark154beea2017-10-26 07:58:48 -04003981<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
3982computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
3983not available.
3984
Ben Wagnere5806492017-11-09 12:08:31 -05003985All vertical values relative to the baseline are given y-down. As such, zero is on the
3986baseline, negative values are above the baseline, and positive values are below the
3987baseline.
3988
Cary Clark154beea2017-10-26 07:58:48 -04003989<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
3990are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05003991
Cary Clark154beea2017-10-26 07:58:48 -04003992<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
3993are valid, since their value may be zero.
3994
Cary Clark8cc16c72017-08-25 11:51:49 -04003995## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04003996
Cary Clarka560c472017-11-27 10:44:06 -05003997<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003998 enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
3999 <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4000 <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4001 <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4002 <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
4003 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004004</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004005
Cary Clark154beea2017-10-26 07:58:48 -04004006<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4007the underline or strikeout metric may be valid and zero.
4008Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4009
Cary Clark12799e12017-07-28 15:18:29 -04004010### Constants
4011
4012<table>
4013 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004014 <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.
4015</td>
Cary Clark12799e12017-07-28 15:18:29 -04004016 </tr>
4017 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004018 <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.
4019</td>
Cary Clark12799e12017-07-28 15:18:29 -04004020 </tr>
4021 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004022 <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.
4023</td>
Cary Clark12799e12017-07-28 15:18:29 -04004024 </tr>
4025 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004026 <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.
4027</td>
Cary Clark12799e12017-07-28 15:18:29 -04004028 </tr>
4029
Cary Clark06c20f32018-03-20 15:53:27 -04004030
Cary Clark12799e12017-07-28 15:18:29 -04004031
Cary Clark8cc16c72017-08-25 11:51:49 -04004032<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004033
Cary Clark8cc16c72017-08-25 11:51:49 -04004034<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004035
Cary Clark8cc16c72017-08-25 11:51:49 -04004036<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004037
Ben Wagnere5806492017-11-09 12:08:31 -05004038Greatest extent above the baseline for any glyph.
4039Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004040
Cary Clark8cc16c72017-08-25 11:51:49 -04004041<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004042
4043Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004044Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004045
Cary Clark8cc16c72017-08-25 11:51:49 -04004046<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004047
4048Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004049Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004050
Cary Clark8cc16c72017-08-25 11:51:49 -04004051<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004052
Ben Wagnere5806492017-11-09 12:08:31 -05004053Greatest extent below the baseline for any glyph.
4054Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004055
Cary Clark8cc16c72017-08-25 11:51:49 -04004056<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004057
4058Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004059Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004060
Cary Clark8cc16c72017-08-25 11:51:49 -04004061<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004062
4063Average character width, if it is available.
4064Zero if no average width is stored in the font.
4065
Cary Clark8cc16c72017-08-25 11:51:49 -04004066<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004067
4068Maximum character width.
4069
Cary Clark8cc16c72017-08-25 11:51:49 -04004070<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004071
Cary Clark2a8c48b2018-02-15 17:31:24 -05004072Minimum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004073Typically less than zero.
4074
Cary Clark8cc16c72017-08-25 11:51:49 -04004075<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004076
Cary Clark2a8c48b2018-02-15 17:31:24 -05004077Maximum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004078Typically greater than zero.
4079
Cary Clark8cc16c72017-08-25 11:51:49 -04004080<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004081
4082Height of a lower-case 'x'.
4083May be zero if no lower-case height is stored in the font.
4084
Cary Clark8cc16c72017-08-25 11:51:49 -04004085<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004086
4087Height of an upper-case letter.
4088May be zero if no upper-case height is stored in the font.
4089
Cary Clark8cc16c72017-08-25 11:51:49 -04004090<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004091
Ben Wagnere5806492017-11-09 12:08:31 -05004092Underline thickness.
4093
4094If 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 -04004095If <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 -04004096
Cary Clark8cc16c72017-08-25 11:51:49 -04004097<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004098
Ben Wagnere5806492017-11-09 12:08:31 -05004099Position of the top of the underline stroke relative to the baseline.
4100Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004101
Cary Clark8cc16c72017-08-25 11:51:49 -04004102If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4103If <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 -04004104
Cary Clark8cc16c72017-08-25 11:51:49 -04004105<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004106
Ben Wagnere5806492017-11-09 12:08:31 -05004107Strikeout thickness.
4108
4109If 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 -04004110If <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 -04004111
Cary Clark8cc16c72017-08-25 11:51:49 -04004112<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004113
Ben Wagnere5806492017-11-09 12:08:31 -05004114Position of the bottom of the strikeout stroke relative to the baseline.
4115Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004116
Cary Clark8cc16c72017-08-25 11:51:49 -04004117If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4118If <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 -04004119
Cary Clark493df1f2017-08-25 13:14:33 -04004120<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004121## hasUnderlineThickness
4122
Cary Clarka560c472017-11-27 10:44:06 -05004123<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004124bool hasUnderlineThickness(SkScalar* thickness) const
4125</pre>
4126
Ben Wagnere5806492017-11-09 12:08:31 -05004127If <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 -04004128<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,
4129return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004130
4131### Parameters
4132
Cary Clark8cc16c72017-08-25 11:51:49 -04004133<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004134storage for underline width</td>
4135 </tr>
4136</table>
4137
4138### Return Value
4139
4140true if font specifies underline width
4141
4142---
4143
Cary Clark493df1f2017-08-25 13:14:33 -04004144<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004145## hasUnderlinePosition
4146
Cary Clarka560c472017-11-27 10:44:06 -05004147<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004148bool hasUnderlinePosition(SkScalar* position) const
4149</pre>
4150
Ben Wagnere5806492017-11-09 12:08:31 -05004151If <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 -04004152<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,
4153return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004154
4155### Parameters
4156
Cary Clark8cc16c72017-08-25 11:51:49 -04004157<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4158storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004159 </tr>
4160</table>
4161
4162### Return Value
4163
Cary Clark8cc16c72017-08-25 11:51:49 -04004164true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004165
4166---
4167
Cary Clark493df1f2017-08-25 13:14:33 -04004168<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004169## hasStrikeoutThickness
4170
Cary Clarka560c472017-11-27 10:44:06 -05004171<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004172bool hasStrikeoutThickness(SkScalar* thickness) const
4173</pre>
4174
Ben Wagnere5806492017-11-09 12:08:31 -05004175If <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 -04004176<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,
4177return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004178
4179### Parameters
4180
Cary Clark8cc16c72017-08-25 11:51:49 -04004181<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004182storage for strikeout width</td>
4183 </tr>
4184</table>
4185
4186### Return Value
4187
4188true if font specifies strikeout width
4189
4190---
4191
Cary Clark493df1f2017-08-25 13:14:33 -04004192<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004193## hasStrikeoutPosition
4194
Cary Clarka560c472017-11-27 10:44:06 -05004195<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004196bool hasStrikeoutPosition(SkScalar* position) const
4197</pre>
4198
Ben Wagnere5806492017-11-09 12:08:31 -05004199If <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 -04004200<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,
4201return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004202
4203### Parameters
4204
Cary Clark8cc16c72017-08-25 11:51:49 -04004205<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4206storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004207 </tr>
4208</table>
4209
4210### Return Value
4211
Cary Clark8cc16c72017-08-25 11:51:49 -04004212true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004213
4214---
4215
Cary Clark493df1f2017-08-25 13:14:33 -04004216<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004217## getFontMetrics
4218
Cary Clarka560c472017-11-27 10:44:06 -05004219<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004220SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4221</pre>
4222
Cary Clark8cc16c72017-08-25 11:51:49 -04004223Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4224The 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 -04004225descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004226If <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>.
4227Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4228dimensions 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>,
4229<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4230Results 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 -04004231is ignored.
4232
4233### Parameters
4234
Cary Clark8cc16c72017-08-25 11:51:49 -04004235<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4236storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4237 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004238additional multiplier for returned values</td>
4239 </tr>
4240</table>
4241
4242### Return Value
4243
4244recommended spacing between lines
4245
4246### Example
4247
4248<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4249
4250### See Also
4251
Cary Clark8cc16c72017-08-25 11:51:49 -04004252<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 -04004253
4254---
4255
Cary Clark493df1f2017-08-25 13:14:33 -04004256<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004257## getFontSpacing
4258
Cary Clarka560c472017-11-27 10:44:06 -05004259<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004260SkScalar getFontSpacing() const
4261</pre>
4262
4263Returns the recommended spacing between lines: the sum of metrics
4264descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004265Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004266dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004267Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004268
4269### Return Value
4270
4271recommended spacing between lines
4272
4273### Example
4274
4275<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4276
4277#### Example Output
4278
4279~~~~
4280textSize: 12 fontSpacing: 13.9688
4281textSize: 18 fontSpacing: 20.9531
4282textSize: 24 fontSpacing: 27.9375
4283textSize: 32 fontSpacing: 37.25
4284~~~~
4285
4286</fiddle-embed></div>
4287
4288---
4289
Cary Clark493df1f2017-08-25 13:14:33 -04004290<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004291## getFontBounds
4292
Cary Clarka560c472017-11-27 10:44:06 -05004293<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004294SkRect getFontBounds() const
4295</pre>
4296
Cary Clark2a8c48b2018-02-15 17:31:24 -05004297Returns the union of bounds of all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004298Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004299ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4300and <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 -04004301
Cary Clark8cc16c72017-08-25 11:51:49 -04004302If <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 -05004303returns 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 -04004304<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 -04004305
4306### Return Value
4307
Cary Clark2a8c48b2018-02-15 17:31:24 -05004308union of bounds of all <a href="undocumented#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004309
4310### Example
4311
4312<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4313
4314#### Example Output
4315
4316~~~~
4317metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4318font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4319~~~~
4320
4321</fiddle-embed></div>
4322
4323---
4324
Cary Clark493df1f2017-08-25 13:14:33 -04004325<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004326## textToGlyphs
4327
Cary Clarka560c472017-11-27 10:44:06 -05004328<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004329int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4330</pre>
4331
Cary Clark8cc16c72017-08-25 11:51:49 -04004332Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4333Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4334<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>.
4335<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004336
Cary Clarkbc5697d2017-10-04 14:31:33 -04004337Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004338
Cary Clark8cc16c72017-08-25 11:51:49 -04004339If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4340If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004341
Cary Clark8cc16c72017-08-25 11:51:49 -04004342If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004343<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004344
4345### Parameters
4346
Cary Clark8cc16c72017-08-25 11:51:49 -04004347<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004348character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004349 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004350length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004351 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004352storage for glyph indices; may be nullptr</td>
4353 </tr>
4354</table>
4355
4356### Return Value
4357
Cary Clark8cc16c72017-08-25 11:51:49 -04004358number 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 -04004359
4360### Example
4361
4362<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4363
4364---
4365
Cary Clark493df1f2017-08-25 13:14:33 -04004366<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004367## countText
4368
Cary Clarka560c472017-11-27 10:44:06 -05004369<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004370int countText(const void* text, size_t byteLength) const
4371</pre>
4372
Cary Clark2a8c48b2018-02-15 17:31:24 -05004373Returns the number of <a href="undocumented#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4374Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004375Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004376
4377### Parameters
4378
Cary Clark8cc16c72017-08-25 11:51:49 -04004379<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004380character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004381 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004382length of character storage in bytes</td>
4383 </tr>
4384</table>
4385
4386### Return Value
4387
Cary Clark2a8c48b2018-02-15 17:31:24 -05004388number 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 -04004389
4390### Example
4391
4392<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4393
4394#### Example Output
4395
4396~~~~
4397count = 5
4398~~~~
4399
4400</fiddle-embed></div>
4401
4402---
4403
Cary Clark493df1f2017-08-25 13:14:33 -04004404<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004405## containsText
4406
Cary Clarka560c472017-11-27 10:44:06 -05004407<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004408bool containsText(const void* text, size_t byteLength) const
4409</pre>
4410
Cary Clark7cfcbca2018-01-04 16:11:51 -05004411Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004412Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004413<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004414
Cary Clark8cc16c72017-08-25 11:51:49 -04004415If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4416returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4417does 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 -04004418
Cary Clarkce101242017-09-01 15:51:02 -04004419Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004420
4421### Parameters
4422
Cary Clark8cc16c72017-08-25 11:51:49 -04004423<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004424array of characters or <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004425 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4426number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004427 </tr>
4428</table>
4429
4430### Return Value
4431
Cary Clark8cc16c72017-08-25 11:51:49 -04004432true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004433
4434### Example
4435
skia-bookmaker525f9a92018-05-03 06:27:39 +00004436<div><fiddle-embed name="71b417d6651cbcecae1a05067c94ab3e"><div><a href="#SkPaint_containsText">containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05004437corresponding to the Unicode surrogate code point.
4438</div>
Cary Clark12799e12017-07-28 15:18:29 -04004439
4440#### Example Output
4441
4442~~~~
44430x00b0 == has char
44440xd800 != has char
4445~~~~
4446
4447</fiddle-embed></div>
4448
4449### Example
4450
skia-bookmaker525f9a92018-05-03 06:27:39 +00004451<div><fiddle-embed name="083557b6f653d6fc00a34e01f87b74ff"><div><a href="#SkPaint_containsText">containsText</a> returns true that glyph index is greater than zero, not
Cary Clark1a8d7622018-03-05 13:26:16 -05004452that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.
4453</div>
Cary Clark12799e12017-07-28 15:18:29 -04004454
4455#### Example Output
4456
4457~~~~
44580x01ff == has glyph
44590x0000 != has glyph
44600xffff == has glyph
4461~~~~
4462
4463</fiddle-embed></div>
4464
4465### See Also
4466
Cary Clark8cc16c72017-08-25 11:51:49 -04004467<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004468
4469---
4470
Cary Clark493df1f2017-08-25 13:14:33 -04004471<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004472## glyphsToUnichars
4473
Cary Clarka560c472017-11-27 10:44:06 -05004474<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004475void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4476</pre>
4477
Cary Clark7cfcbca2018-01-04 16:11:51 -05004478Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4479<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004480Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004481by <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 -04004482
Cary Clark2a8c48b2018-02-15 17:31:24 -05004483Only supported on platforms that use FreeType as the <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004484
4485### Parameters
4486
Cary Clark8cc16c72017-08-25 11:51:49 -04004487<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004488array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004489 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004490length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004491 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004492storage for character codes, one per glyph</td>
4493 </tr>
4494</table>
4495
4496### Example
4497
Cary Clark1a8d7622018-03-05 13:26:16 -05004498<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.
4499</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004500
4501---
4502
Cary Clark08895c42018-02-01 09:37:32 -05004503## <a name="Measure_Text"></a> Measure Text
Cary Clark12799e12017-07-28 15:18:29 -04004504
Cary Clark493df1f2017-08-25 13:14:33 -04004505<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004506## measureText
4507
Cary Clarka560c472017-11-27 10:44:06 -05004508<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004509SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4510</pre>
4511
Cary Clark8cc16c72017-08-25 11:51:49 -04004512Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4513and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4514The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4515Uses <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,
4516and <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
4517<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4518Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4519The 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 -04004520
4521### Parameters
4522
Cary Clark8cc16c72017-08-25 11:51:49 -04004523<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004524character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004525 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4526number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4527 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004528returns bounding box relative to (0, 0) if not nullptr</td>
4529 </tr>
4530</table>
4531
4532### Return Value
4533
4534advance width or height
4535
4536### Example
4537
4538<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4539
4540---
4541
Cary Clark2dc84ad2018-01-26 12:56:22 -05004542<a name="SkPaint_measureText_2"></a>
4543
Cary Clarka560c472017-11-27 10:44:06 -05004544<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004545SkScalar measureText(const void* text, size_t length) const
4546</pre>
4547
Cary Clark8cc16c72017-08-25 11:51:49 -04004548Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4549and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4550The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4551Uses <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,
4552and <a href="#Text_Size">Text Size</a> to scale the metrics.
4553Does 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 -04004554
4555### Parameters
4556
Cary Clark8cc16c72017-08-25 11:51:49 -04004557<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004558character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004559 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4560number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004561 </tr>
4562</table>
4563
4564### Return Value
4565
4566advance width or height
4567
4568### Example
4569
4570<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4571
4572#### Example Output
4573
4574~~~~
4575default width = 5
4576double width = 10
4577~~~~
4578
4579</fiddle-embed></div>
4580
4581---
4582
Cary Clark493df1f2017-08-25 13:14:33 -04004583<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004584## breakText
4585
Cary Clarka560c472017-11-27 10:44:06 -05004586<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004587size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004588 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004589</pre>
4590
Cary Clark8cc16c72017-08-25 11:51:49 -04004591Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4592If <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
4593equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4594If <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
4595equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4596Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4597Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4598Uses <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,
4599and <a href="#Text_Size">Text Size</a> to scale the metrics.
4600Does 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 -04004601
4602### Parameters
4603
Cary Clark8cc16c72017-08-25 11:51:49 -04004604<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004605character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004606 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4607number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4608 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4609advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4610 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4611returns 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 -04004612 </tr>
4613</table>
4614
4615### Return Value
4616
Cary Clark8cc16c72017-08-25 11:51:49 -04004617bytes 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 -04004618
4619### Example
4620
Cary Clark4c06f5e2017-08-04 12:48:24 -04004621<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 -05004622<a href="undocumented#Line">Line</a> under "" shows measured width after breaking <a href="#SkPaint_breakText_text">text</a>.
4623</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004624
4625---
4626
Cary Clark493df1f2017-08-25 13:14:33 -04004627<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004628## getTextWidths
4629
Cary Clarka560c472017-11-27 10:44:06 -05004630<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4631int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004632</pre>
4633
Cary Clark8cc16c72017-08-25 11:51:49 -04004634Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4635the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4636Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4637If <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 -05004638if <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 -04004639If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4640If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4641Uses <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,
4642and <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>.
4643Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4644Does 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 -04004645
4646### Parameters
4647
Cary Clark8cc16c72017-08-25 11:51:49 -04004648<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004649character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004650 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4651number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4652 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4653returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4654 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4655returns <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 -04004656 </tr>
4657</table>
4658
4659### Return Value
4660
Cary Clark8cc16c72017-08-25 11:51:49 -04004661glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004662
4663### Example
4664
Cary Clark2a8c48b2018-02-15 17:31:24 -05004665<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 -05004666The underlines show the <a href="#SkPaint_getTextWidths_text">text</a> advance, spaced to keep them distinct.
4667</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004668
4669---
4670
Cary Clark08895c42018-02-01 09:37:32 -05004671## <a name="Text_Path"></a> Text Path
4672
Cary Clark2a8c48b2018-02-15 17:31:24 -05004673<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 -04004674
Cary Clark493df1f2017-08-25 13:14:33 -04004675<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004676## getTextPath
4677
Cary Clarka560c472017-11-27 10:44:06 -05004678<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4679void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004680</pre>
4681
Cary Clark8cc16c72017-08-25 11:51:49 -04004682Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4683Uses <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,
4684and <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.
4685All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4686Uses <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 -04004687
4688### Parameters
4689
Cary Clark8cc16c72017-08-25 11:51:49 -04004690<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004691character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004692 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4693number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4694 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004695<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 -04004696 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004697<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 -04004698 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004699geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004700 </tr>
4701</table>
4702
4703### Example
4704
Cary Clark4c06f5e2017-08-04 12:48:24 -04004705<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 -05004706the offset location. The result is rendered with one draw call.
4707</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004708
4709---
4710
Cary Clark493df1f2017-08-25 13:14:33 -04004711<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004712## getPosTextPath
4713
Cary Clarka560c472017-11-27 10:44:06 -05004714<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4715void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004716</pre>
4717
Cary Clark8cc16c72017-08-25 11:51:49 -04004718Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4719Uses <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,
4720and <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.
4721All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4722Uses <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>.
4723<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
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_getPosTextPath_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_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4730number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4731 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004732positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004733 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004734geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004735 </tr>
4736</table>
4737
4738### Example
4739
Cary Clark1a8d7622018-03-05 13:26:16 -05004740<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three <a href="undocumented#Glyph">Glyphs</a> to eliminate overlaps, and strokes the result.
4741</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004742
4743---
4744
Cary Clark08895c42018-02-01 09:37:32 -05004745## <a name="Text_Intercepts"></a> Text Intercepts
4746
Cary Clark2a8c48b2018-02-15 17:31:24 -05004747<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 -04004748of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004749underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004750
Cary Clark493df1f2017-08-25 13:14:33 -04004751<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004752## getTextIntercepts
4753
Cary Clarka560c472017-11-27 10:44:06 -05004754<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004755int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4756 const SkScalar bounds[2], SkScalar* intervals) const
4757</pre>
4758
Cary Clark8cc16c72017-08-25 11:51:49 -04004759Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4760<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 -05004761The 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 -05004762the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004763Uses <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,
4764and <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.
4765Uses <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>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004766
Cary Clark8cc16c72017-08-25 11:51:49 -04004767Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004768
Cary Clark8cc16c72017-08-25 11:51:49 -04004769<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004770
4771### Parameters
4772
Cary Clark8cc16c72017-08-25 11:51:49 -04004773<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004774character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004775 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4776number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4777 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004778<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 -04004779 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004780<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 -04004781 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004782lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004783 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004784returned intersections; may be nullptr</td>
4785 </tr>
4786</table>
4787
4788### Return Value
4789
4790number of intersections; may be zero
4791
4792### Example
4793
Cary Clark1a8d7622018-03-05 13:26:16 -05004794<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
4795</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004796
4797---
4798
Cary Clark493df1f2017-08-25 13:14:33 -04004799<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004800## getPosTextIntercepts
4801
Cary Clarka560c472017-11-27 10:44:06 -05004802<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004803int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4804 const SkScalar bounds[2], SkScalar* intervals) const
4805</pre>
4806
Cary Clark8cc16c72017-08-25 11:51:49 -04004807Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4808<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 -05004809The 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 -05004810the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004811Uses <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,
4812and <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.
4813Uses <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>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004814
Cary Clark8cc16c72017-08-25 11:51:49 -04004815Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004816
Cary Clark8cc16c72017-08-25 11:51:49 -04004817<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004818
4819### Parameters
4820
Cary Clark8cc16c72017-08-25 11:51:49 -04004821<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004822character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004823 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4824number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4825 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004826positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004827 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004828lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004829 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004830returned intersections; may be nullptr</td>
4831 </tr>
4832</table>
4833
4834### Return Value
4835
Cary Clarka523d2d2017-08-30 08:58:10 -04004836number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004837
4838### Example
4839
Cary Clark1a8d7622018-03-05 13:26:16 -05004840<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.
4841</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004842
4843---
4844
Cary Clark493df1f2017-08-25 13:14:33 -04004845<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004846## getPosTextHIntercepts
4847
Cary Clarka560c472017-11-27 10:44:06 -05004848<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4849int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4850 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004851</pre>
4852
Cary Clark8cc16c72017-08-25 11:51:49 -04004853Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4854<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 -05004855The 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 -05004856the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004857Uses <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,
4858and <a href="#Text_Size">Text Size</a>, <a href="#Fake_Bold">Fake Bold</a>, and <a href="undocumented#Path_Effect">Path Effect</a> to scale and modify the glyph paths.
4859Uses <a href="#SkPaint_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>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004860
Cary Clark8cc16c72017-08-25 11:51:49 -04004861Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004862
Cary Clark8cc16c72017-08-25 11:51:49 -04004863<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004864
4865### Parameters
4866
Cary Clark8cc16c72017-08-25 11:51:49 -04004867<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004868character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004869 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4870number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4871 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004872positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004873 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004874position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004875 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004876lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004877 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004878returned intersections; may be nullptr</td>
4879 </tr>
4880</table>
4881
4882### Return Value
4883
4884number of intersections; may be zero
4885
4886### Example
4887
Cary Clark1a8d7622018-03-05 13:26:16 -05004888<div><fiddle-embed name="dc9851c43acc3716aca8c9a4d40d452d"><div><a href="undocumented#Text">Text</a> intercepts do not take stroke thickness into consideration.
4889</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004890
4891---
4892
Cary Clark493df1f2017-08-25 13:14:33 -04004893<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004894## getTextBlobIntercepts
4895
Cary Clarka560c472017-11-27 10:44:06 -05004896<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4897int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004898</pre>
4899
Cary Clark8cc16c72017-08-25 11:51:49 -04004900Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4901<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clark2a8c48b2018-02-15 17:31:24 -05004902The 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 -05004903the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004904Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04004905and <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 -04004906Uses run array and <a href="#Text_Align">Text Align</a> to position <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004907
Cary Clark3cd22cc2017-12-01 11:49:58 -05004908<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
4909
Cary Clark8cc16c72017-08-25 11:51:49 -04004910Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004911
Cary Clark8cc16c72017-08-25 11:51:49 -04004912<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004913
4914### Parameters
4915
Cary Clark8cc16c72017-08-25 11:51:49 -04004916<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004917<a href="undocumented#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004918 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004919lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004920 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004921returned intersections; may be nullptr</td>
4922 </tr>
4923</table>
4924
4925### Return Value
4926
4927number of intersections; may be zero
4928
4929### Example
4930
skia-bookmaker525f9a92018-05-03 06:27:39 +00004931<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004932
4933---
4934
Cary Clark493df1f2017-08-25 13:14:33 -04004935<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004936## nothingToDraw
4937
Cary Clarka560c472017-11-27 10:44:06 -05004938<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004939bool nothingToDraw() const
4940</pre>
4941
Cary Clark8cc16c72017-08-25 11:51:49 -04004942Returns true if <a href="#Paint">Paint</a> prevents all drawing;
4943otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004944
Cary Clark2d4bf5f2018-04-16 08:37:38 -04004945Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="SkColor_Reference#Alpha">Color Alpha</a> computes a
4946new <a href="SkColor_Reference#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004947
4948### Return Value
4949
Cary Clark8cc16c72017-08-25 11:51:49 -04004950true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004951
4952### Example
4953
skia-bookmaker525f9a92018-05-03 06:27:39 +00004954<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04004955
4956#### Example Output
4957
4958~~~~
4959initial nothing to draw: false
4960blend dst nothing to draw: true
4961blend src over nothing to draw: false
4962alpha 0 nothing to draw: true
4963~~~~
4964
4965</fiddle-embed></div>
4966
4967---
4968
Cary Clark08895c42018-02-01 09:37:32 -05004969## <a name="Fast_Bounds"></a> Fast Bounds
4970
Cary Clark8cc16c72017-08-25 11:51:49 -04004971<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
4972<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04004973
Cary Clark493df1f2017-08-25 13:14:33 -04004974<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004975## canComputeFastBounds
4976
Cary Clarka560c472017-11-27 10:44:06 -05004977<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004978bool canComputeFastBounds() const
4979</pre>
4980
Cary Clark8cc16c72017-08-25 11:51:49 -04004981Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
4982to 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 -04004983always returns false.
4984
4985### Return Value
4986
Cary Clark8cc16c72017-08-25 11:51:49 -04004987true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04004988
4989---
4990
Cary Clark493df1f2017-08-25 13:14:33 -04004991<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004992## computeFastBounds
4993
Cary Clarka560c472017-11-27 10:44:06 -05004994<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004995const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
4996</pre>
4997
Cary Clark8cc16c72017-08-25 11:51:49 -04004998Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04004999raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005000effects 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 -04005001parameter. It returns the adjusted bounds that can then be used
Cary Clark2a8c48b2018-02-15 17:31:24 -05005002for <a href="SkCanvas_Reference#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005003
Cary Clarkbc5697d2017-10-04 14:31:33 -04005004The 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 -04005005should 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 -04005006use 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 -04005007<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005008
5009### Parameters
5010
Cary Clark8cc16c72017-08-25 11:51:49 -04005011<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5012geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5013 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005014computed bounds of geometry; may not be nullptr</td>
5015 </tr>
5016</table>
5017
5018### Return Value
5019
5020fast computed bounds
5021
5022---
5023
Cary Clark493df1f2017-08-25 13:14:33 -04005024<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005025## computeFastStrokeBounds
5026
Cary Clarka560c472017-11-27 10:44:06 -05005027<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005028const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5029</pre>
5030
5031### Parameters
5032
Cary Clark8cc16c72017-08-25 11:51:49 -04005033<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5034geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5035 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005036computed bounds of geometry</td>
5037 </tr>
5038</table>
5039
5040### Return Value
5041
5042fast computed bounds
5043
5044---
5045
Cary Clark493df1f2017-08-25 13:14:33 -04005046<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005047## doComputeFastBounds
5048
Cary Clarka560c472017-11-27 10:44:06 -05005049<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5050const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005051</pre>
5052
Cary Clarkce101242017-09-01 15:51:02 -04005053Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5054account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5055altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005056
5057### Parameters
5058
Cary Clark8cc16c72017-08-25 11:51:49 -04005059<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5060geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5061 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005062computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005063 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5064overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005065 </tr>
5066</table>
5067
5068### Return Value
5069
5070fast computed bounds
5071
5072---
5073
Cary Clark78de7512018-02-07 07:27:09 -05005074## <a name="Utility"></a> Utility
5075
5076| name | description |
5077| --- | --- |
Cary Clark2a8c48b2018-02-15 17:31:24 -05005078| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="undocumented#Glyph">Glyphs</a> |
5079| <a href="#SkPaint_countText">countText</a> | returns number of <a href="undocumented#Glyph">Glyphs</a> in text |
5080| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="undocumented#Glyph">Glyphs</a> into text |
Cary Clark78de7512018-02-07 07:27:09 -05005081| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
5082| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
5083| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
5084
Cary Clark493df1f2017-08-25 13:14:33 -04005085<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005086## toString
5087
Cary Clarka560c472017-11-27 10:44:06 -05005088<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark2dc84ad2018-01-26 12:56:22 -05005089void toString(SkString* str) const
Cary Clark12799e12017-07-28 15:18:29 -04005090</pre>
5091
Cary Clarkce101242017-09-01 15:51:02 -04005092Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
Update Docs485dc862018-04-06 06:23:24 +00005093internal debugging tools.
Cary Clark12799e12017-07-28 15:18:29 -04005094
5095### Parameters
5096
Cary Clark8cc16c72017-08-25 11:51:49 -04005097<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005098storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005099 </tr>
5100</table>
5101
5102### Example
5103
5104<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5105
5106#### Example Output
5107
5108~~~~
5109text size = 12
5110~~~~
5111
5112</fiddle-embed></div>
5113
Cary Clark2ade9972017-11-02 17:49:34 -04005114### See Also
5115
Cary Clark2a8c48b2018-02-15 17:31:24 -05005116<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 -04005117
Cary Clark12799e12017-07-28 15:18:29 -04005118---
5119