blob: dddba108c88ff0b9240d50432e205190a9828cb5 [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,
Cary Clark186d08f2018-04-03 08:43:27 -0400754 <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
755 <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
756 <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
757 <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -0400758
Cary Clark186d08f2018-04-03 08:43:27 -0400759 <a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
760 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500761
Cary Clark12799e12017-07-28 15:18:29 -0400762</pre>
763
Cary Clark8cc16c72017-08-25 11:51:49 -0400764The bit values stored in <a href="#Flags">Flags</a>.
765The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400766with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400767All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400768multiple settings at once.
769
770### Constants
771
772<table>
773 <tr>
skia-bookmaker525f9a92018-05-03 06:27:39 +0000774 <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 -0400775 </tr>
776 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400777 <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 -0400778 </tr>
779 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400780 <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 -0400781 </tr>
782 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500783 <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 -0400784 </tr>
785 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500786 <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 -0400787 </tr>
788 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500789 <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 -0400790 </tr>
791 <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -0500792 <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 -0400793 </tr>
794 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400795 <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 -0400796 </tr>
797 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400798 <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 -0400799 </tr>
800 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400801 <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 -0400802 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400803<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400804
Cary Clark06c20f32018-03-20 15:53:27 -0400805
Cary Clark12799e12017-07-28 15:18:29 -0400806
Cary Clark8cc16c72017-08-25 11:51:49 -0400807## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400808
Cary Clark4855f782018-02-06 09:41:53 -0500809soonOnly valid for Android framework.
810
Cary Clarka560c472017-11-27 10:44:06 -0500811<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -0400812 enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
813 <a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
814 <a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
815 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500816</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400817
818### Constants
819
820<table>
821 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500822 <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 -0400823 </tr>
824 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500825 <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 -0400826 </tr>
Cary Clark4855f782018-02-06 09:41:53 -0500827
Cary Clark06c20f32018-03-20 15:53:27 -0400828
Cary Clark12799e12017-07-28 15:18:29 -0400829
Cary Clark493df1f2017-08-25 13:14:33 -0400830<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400831## getFlags
832
Cary Clarka560c472017-11-27 10:44:06 -0500833<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400834uint32_t getFlags() const
835</pre>
836
Cary Clark8cc16c72017-08-25 11:51:49 -0400837Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
838bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400839
840### Return Value
841
Cary Clark8cc16c72017-08-25 11:51:49 -0400842zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400843
844### Example
845
846<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
847
848#### Example Output
849
850~~~~
851(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
852~~~~
853
854</fiddle-embed></div>
855
856---
857
Cary Clark493df1f2017-08-25 13:14:33 -0400858<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400859## setFlags
860
Cary Clarka560c472017-11-27 10:44:06 -0500861<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400862void setFlags(uint32_t flags)
863</pre>
864
Cary Clark8cc16c72017-08-25 11:51:49 -0400865Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
866All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400867
868### Parameters
869
Cary Clark8cc16c72017-08-25 11:51:49 -0400870<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
871union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400872 </tr>
873</table>
874
875### Example
876
877<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
878
879#### Example Output
880
881~~~~
882paint.isAntiAlias()
883paint.isDither()
884~~~~
885
886</fiddle-embed></div>
887
888---
889
Cary Clark08895c42018-02-01 09:37:32 -0500890## <a name="Anti-alias"></a> Anti-alias
891
Cary Clarka560c472017-11-27 10:44:06 -0500892Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400893If <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 -0400894If <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 -0400895
Cary Clark2a8c48b2018-02-15 17:31:24 -0500896The rule for <a href="undocumented#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400897passing through the pixel center may, but is not required to, draw the pixel.
898
Cary Clark2a8c48b2018-02-15 17:31:24 -0500899<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 -0400900active <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 -0400901
Cary Clark7cfcbca2018-01-04 16:11:51 -0500902A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500903<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400904<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400905
Cary Clarka560c472017-11-27 10:44:06 -0500906The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400907
Cary Clarka560c472017-11-27 10:44:06 -0500908Anti-alias is disabled by default.
909Anti-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 -0400910at compile time.
911
912### Example
913
914<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
915A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400916The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clark1a8d7622018-03-05 13:26:16 -0500917<a href="undocumented#Alias">Aliasing</a> easier to see.
918</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400919
Cary Clark493df1f2017-08-25 13:14:33 -0400920<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400921## isAntiAlias
922
Cary Clarka560c472017-11-27 10:44:06 -0500923<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400924bool isAntiAlias() const
925</pre>
926
Cary Clark4c06f5e2017-08-04 12:48:24 -0400927If 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 -0400928
Cary Clark8cc16c72017-08-25 11:51:49 -0400929Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400930
931### Return Value
932
Cary Clark8cc16c72017-08-25 11:51:49 -0400933<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400934
935### Example
936
937<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
938
939#### Example Output
940
941~~~~
942paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
943paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
944~~~~
945
946</fiddle-embed></div>
947
948---
949
Cary Clark493df1f2017-08-25 13:14:33 -0400950<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400951## setAntiAlias
952
Cary Clarka560c472017-11-27 10:44:06 -0500953<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400954void setAntiAlias(bool aa)
955</pre>
956
Cary Clark4c06f5e2017-08-04 12:48:24 -0400957Requests, 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 -0400958partial transparency.
959
Cary Clark8cc16c72017-08-25 11:51:49 -0400960Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
961Clears <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 -0400962
963### Parameters
964
Cary Clark8cc16c72017-08-25 11:51:49 -0400965<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
966setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400967 </tr>
968</table>
969
970### Example
971
972<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
973
974#### Example Output
975
976~~~~
977paint1 == paint2
978~~~~
979
980</fiddle-embed></div>
981
982---
983
Cary Clark08895c42018-02-01 09:37:32 -0500984## <a name="Dither"></a> Dither
985
Cary Clark7cfcbca2018-01-04 16:11:51 -0500986<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -0400987This can help to smooth color transitions and reducing banding in gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -0500988Dithering lessens visible banding from <a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
989and <a href="SkImageInfo_Reference#kRGBA_8888_SkColorType">kRGBA_8888_SkColorType</a> gradients,
990and 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 -0400991
992Dithering is always enabled for linear gradients drawing into
Cary Clark2a8c48b2018-02-15 17:31:24 -0500993<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>.
994<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
995<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 -0400996
Cary Clark8cc16c72017-08-25 11:51:49 -0400997<a href="#Dither">Dither</a> is disabled by default.
998<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 -0400999at compile time.
1000
Cary Clark186d08f2018-04-03 08:43:27 -04001001Some 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 -04001002
1003### Example
1004
1005<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 -05001006alternating nearby colors from pixel to pixel.
1007</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001008
1009### Example
1010
1011<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001012Drawing the gradient repeatedly with <a href="undocumented#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001013dither, making it easier to see.
1014</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001015
Cary Clark493df1f2017-08-25 13:14:33 -04001016<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001017## isDither
1018
Cary Clarka560c472017-11-27 10:44:06 -05001019<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001020bool isDither() const
1021</pre>
1022
1023If true, color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001024
Cary Clark8cc16c72017-08-25 11:51:49 -04001025Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001026
1027### Return Value
1028
Cary Clark8cc16c72017-08-25 11:51:49 -04001029<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001030
1031### Example
1032
1033<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1034
1035#### Example Output
1036
1037~~~~
1038paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1039paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1040~~~~
1041
1042</fiddle-embed></div>
1043
1044---
1045
Cary Clark493df1f2017-08-25 13:14:33 -04001046<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001047## setDither
1048
Cary Clarka560c472017-11-27 10:44:06 -05001049<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001050void setDither(bool dither)
1051</pre>
1052
1053Requests, but does not require, to distribute color error.
1054
Cary Clark8cc16c72017-08-25 11:51:49 -04001055Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1056Clears <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 -04001057
1058### Parameters
1059
Cary Clark8cc16c72017-08-25 11:51:49 -04001060<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1061setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001062 </tr>
1063</table>
1064
1065### Example
1066
1067<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1068
1069#### Example Output
1070
1071~~~~
1072paint1 == paint2
1073~~~~
1074
1075</fiddle-embed></div>
1076
1077### See Also
1078
Cary Clark2a8c48b2018-02-15 17:31:24 -05001079<a href="SkImageInfo_Reference#kRGB_565_SkColorType">kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001080
1081---
1082
1083### See Also
1084
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001085Gradient <a href="SkColor_Reference#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001086
Cary Clark08895c42018-02-01 09:37:32 -05001087## <a name="Device_Text"></a> Device Text
1088
Cary Clark2a8c48b2018-02-15 17:31:24 -05001089<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 -04001090
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001091When 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 -04001092create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001093on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001094<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 -04001095the 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 -04001096
Cary Clark7cfcbca2018-01-04 16:11:51 -05001097<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 -04001098As the opaqueness
1099of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1100
1101Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001102<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 -05001103<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 -04001104<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 -04001105
1106### Example
1107
Cary Clark2a8c48b2018-02-15 17:31:24 -05001108<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>.
1109When <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 -05001110When <a href="#Subpixel_Text">Subpixel Text</a> is enabled, the comma <a href="undocumented#Glyph">Glyphs</a> are unique, but appear evenly spaced.
1111</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001112
1113## <a name="Linear_Text"></a> Linear Text
1114
Cary Clark2a8c48b2018-02-15 17:31:24 -05001115<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 -04001116If <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 -04001117If <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 -04001118
Cary Clark493df1f2017-08-25 13:14:33 -04001119<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001120## isLinearText
1121
Cary Clarka560c472017-11-27 10:44:06 -05001122<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001123bool isLinearText() const
1124</pre>
1125
Cary Clark4c06f5e2017-08-04 12:48:24 -04001126If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001127
Cary Clark8cc16c72017-08-25 11:51:49 -04001128Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001129
1130### Return Value
1131
Cary Clark8cc16c72017-08-25 11:51:49 -04001132<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001133
1134### Example
1135
1136<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1137
1138### See Also
1139
Cary Clark8cc16c72017-08-25 11:51:49 -04001140<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001141
1142---
1143
Cary Clark493df1f2017-08-25 13:14:33 -04001144<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001145## setLinearText
1146
Cary Clarka560c472017-11-27 10:44:06 -05001147<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001148void setLinearText(bool linearText)
1149</pre>
1150
Cary Clark4c06f5e2017-08-04 12:48:24 -04001151If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001152By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001153
Cary Clark8cc16c72017-08-25 11:51:49 -04001154Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1155Clears <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 -04001156
1157### Parameters
1158
Cary Clark8cc16c72017-08-25 11:51:49 -04001159<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1160setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001161 </tr>
1162</table>
1163
1164### Example
1165
1166<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1167
1168### See Also
1169
Cary Clark8cc16c72017-08-25 11:51:49 -04001170<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001171
1172---
1173
1174## <a name="Subpixel_Text"></a> Subpixel Text
1175
Cary Clark7cfcbca2018-01-04 16:11:51 -05001176<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 -04001177As the opaqueness
1178of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1179
Cary Clark493df1f2017-08-25 13:14:33 -04001180<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001181## isSubpixelText
1182
Cary Clarka560c472017-11-27 10:44:06 -05001183<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001184bool isSubpixelText() const
1185</pre>
1186
Cary Clark2a8c48b2018-02-15 17:31:24 -05001187If 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 -04001188
Cary Clark8cc16c72017-08-25 11:51:49 -04001189Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001190
1191### Return Value
1192
Cary Clark8cc16c72017-08-25 11:51:49 -04001193<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001194
1195### Example
1196
1197<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1198
1199#### Example Output
1200
1201~~~~
1202paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1203paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1204~~~~
1205
1206</fiddle-embed></div>
1207
1208---
1209
Cary Clark493df1f2017-08-25 13:14:33 -04001210<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001211## setSubpixelText
1212
Cary Clarka560c472017-11-27 10:44:06 -05001213<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001214void setSubpixelText(bool subpixelText)
1215</pre>
1216
Cary Clark2a8c48b2018-02-15 17:31:24 -05001217Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001218
Cary Clark8cc16c72017-08-25 11:51:49 -04001219Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1220Clears <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 -04001221
1222### Parameters
1223
Cary Clark8cc16c72017-08-25 11:51:49 -04001224<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1225setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001226 </tr>
1227</table>
1228
1229### Example
1230
1231<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1232
1233#### Example Output
1234
1235~~~~
1236paint1 == paint2
1237~~~~
1238
1239</fiddle-embed></div>
1240
1241---
1242
1243## <a name="LCD_Text"></a> LCD Text
1244
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001245When 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 -04001246create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001247on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark2a8c48b2018-02-15 17:31:24 -05001248<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 -04001249the 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 -04001250
Cary Clark493df1f2017-08-25 13:14:33 -04001251<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001252## isLCDRenderText
1253
Cary Clarka560c472017-11-27 10:44:06 -05001254<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001255bool isLCDRenderText() const
1256</pre>
1257
Cary Clark2a8c48b2018-02-15 17:31:24 -05001258If true, <a href="undocumented#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001259
Cary Clark8cc16c72017-08-25 11:51:49 -04001260Returns 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 -04001261
1262### Return Value
1263
Cary Clark8cc16c72017-08-25 11:51:49 -04001264<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001265
1266### Example
1267
1268<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1269
1270#### Example Output
1271
1272~~~~
1273paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1274paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1275~~~~
1276
1277</fiddle-embed></div>
1278
1279---
1280
Cary Clark493df1f2017-08-25 13:14:33 -04001281<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001282## setLCDRenderText
1283
Cary Clarka560c472017-11-27 10:44:06 -05001284<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001285void setLCDRenderText(bool lcdText)
1286</pre>
1287
Cary Clark2a8c48b2018-02-15 17:31:24 -05001288Requests, but does not require, that <a href="undocumented#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001289
Cary Clark8cc16c72017-08-25 11:51:49 -04001290Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1291Clears <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 -04001292
1293### Parameters
1294
Cary Clark8cc16c72017-08-25 11:51:49 -04001295<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1296setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001297 </tr>
1298</table>
1299
1300### Example
1301
1302<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1303
1304#### Example Output
1305
1306~~~~
1307paint1 == paint2
1308~~~~
1309
1310</fiddle-embed></div>
1311
1312---
1313
Cary Clark08895c42018-02-01 09:37:32 -05001314## <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
1315
Cary Clark2a8c48b2018-02-15 17:31:24 -05001316<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 -04001317<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 -05001318in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001319
Cary Clark7cfcbca2018-01-04 16:11:51 -05001320FreeType 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 -04001321the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001322Windows may select the bitmap glyph but is not required to do so.
1323<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001324
Cary Clark2a8c48b2018-02-15 17:31:24 -05001325<a href="#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1326<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 -04001327<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001328
1329### Example
1330
Cary Clarka560c472017-11-27 10:44:06 -05001331<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001332<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001333 includes an embedded bitmap Glyph at odd font sizes. This example works
1334 on platforms that use FreeType as their Font_Engine.
1335 Windows may, but is not required to, return a bitmap glyph if
1336 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1337 bitmap.allocN32Pixels(30, 15);
1338 bitmap.eraseColor(0);
1339 SkCanvas offscreen(bitmap);
1340 SkPaint paint;
1341 paint.setAntiAlias(true);
1342 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001343 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001344 for (bool embedded : { false, true}) {
1345 paint.setEmbeddedBitmapText(embedded);
1346 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1347 }
1348 canvas->drawBitmap(bitmap, 0, 0);
1349 canvas->scale(10, 10);
1350 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001351
Cary Clarka560c472017-11-27 10:44:06 -05001352</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001353
Cary Clark493df1f2017-08-25 13:14:33 -04001354<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001355## isEmbeddedBitmapText
1356
Cary Clarka560c472017-11-27 10:44:06 -05001357<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001358bool isEmbeddedBitmapText() const
1359</pre>
1360
Cary Clark2a8c48b2018-02-15 17:31:24 -05001361If 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 -04001362
Cary Clark8cc16c72017-08-25 11:51:49 -04001363Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001364
1365### Return Value
1366
Cary Clark8cc16c72017-08-25 11:51:49 -04001367<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001368
1369### Example
1370
1371<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1372
1373#### Example Output
1374
1375~~~~
1376paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1377paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1378~~~~
1379
1380</fiddle-embed></div>
1381
1382---
1383
Cary Clark493df1f2017-08-25 13:14:33 -04001384<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001385## setEmbeddedBitmapText
1386
Cary Clarka560c472017-11-27 10:44:06 -05001387<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001388void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1389</pre>
1390
1391Requests, but does not require, to use bitmaps in fonts instead of outlines.
1392
Cary Clark8cc16c72017-08-25 11:51:49 -04001393Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1394Clears <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 -04001395
1396### Parameters
1397
Cary Clark8cc16c72017-08-25 11:51:49 -04001398<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1399setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001400 </tr>
1401</table>
1402
1403### Example
1404
1405<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1406
1407#### Example Output
1408
1409~~~~
1410paint1 == paint2
1411~~~~
1412
1413</fiddle-embed></div>
1414
1415---
1416
Cary Clark08895c42018-02-01 09:37:32 -05001417## <a name="Automatic_Hinting"></a> Automatic Hinting
1418
Cary Clark8cc16c72017-08-25 11:51:49 -04001419If <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 -05001420instructs 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 -04001421<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
1422<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001423
Cary Clark7cfcbca2018-01-04 16:11:51 -05001424<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 -04001425
Cary Clark493df1f2017-08-25 13:14:33 -04001426<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001427## isAutohinted
1428
Cary Clarka560c472017-11-27 10:44:06 -05001429<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001430bool isAutohinted() const
1431</pre>
1432
Cary Clark8cc16c72017-08-25 11:51:49 -04001433If 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 -05001434platform 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 -05001435<a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001436
Cary Clark8cc16c72017-08-25 11:51:49 -04001437Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001438
1439### Return Value
1440
Cary Clark8cc16c72017-08-25 11:51:49 -04001441<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001442
1443### Example
1444
1445<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1446
1447#### Example Output
1448
1449~~~~
1450paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1451paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1452~~~~
1453
1454</fiddle-embed></div>
1455
1456### See Also
1457
Cary Clark8cc16c72017-08-25 11:51:49 -04001458<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001459
1460---
1461
Cary Clark493df1f2017-08-25 13:14:33 -04001462<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001463## setAutohinted
1464
Cary Clarka560c472017-11-27 10:44:06 -05001465<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001466void setAutohinted(bool useAutohinter)
1467</pre>
1468
Cary Clark8cc16c72017-08-25 11:51:49 -04001469If <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 -05001470instruct 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 -04001471<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
1472<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001473
Cary Clark7cfcbca2018-01-04 16:11:51 -05001474Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001475
Cary Clark8cc16c72017-08-25 11:51:49 -04001476Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1477Clears <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 -04001478
1479### Parameters
1480
Cary Clark8cc16c72017-08-25 11:51:49 -04001481<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1482setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001483 </tr>
1484</table>
1485
1486### Example
1487
1488<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1489
1490### See Also
1491
Cary Clark8cc16c72017-08-25 11:51:49 -04001492<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001493
1494---
1495
Cary Clark08895c42018-02-01 09:37:32 -05001496## <a name="Vertical_Text"></a> Vertical Text
1497
Cary Clark4c06f5e2017-08-04 12:48:24 -04001498<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 -05001499using <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 -04001500is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
Cary Clark2a8c48b2018-02-15 17:31:24 -05001501<a href="undocumented#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001502
Cary Clark2a8c48b2018-02-15 17:31:24 -05001503Skia 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 -05001504font substitution,
1505textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1506a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001507into glyph series.
1508
Cary Clark8cc16c72017-08-25 11:51:49 -04001509<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 -04001510
Cary Clark8cc16c72017-08-25 11:51:49 -04001511<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1512<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 -04001513
Cary Clark8cc16c72017-08-25 11:51:49 -04001514<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1515<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1516<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001517
1518### Example
1519
1520<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1521
Cary Clark493df1f2017-08-25 13:14:33 -04001522<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001523## isVerticalText
1524
Cary Clarka560c472017-11-27 10:44:06 -05001525<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001526bool isVerticalText() const
1527</pre>
1528
Cary Clark2a8c48b2018-02-15 17:31:24 -05001529If true, <a href="undocumented#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001530
Cary Clark8cc16c72017-08-25 11:51:49 -04001531Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001532
1533### Return Value
1534
Cary Clark8cc16c72017-08-25 11:51:49 -04001535<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001536
1537### Example
1538
1539<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1540
1541#### Example Output
1542
1543~~~~
1544paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1545paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1546~~~~
1547
1548</fiddle-embed></div>
1549
1550---
1551
Cary Clark493df1f2017-08-25 13:14:33 -04001552<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001553## setVerticalText
1554
Cary Clarka560c472017-11-27 10:44:06 -05001555<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001556void setVerticalText(bool verticalText)
1557</pre>
1558
1559If true, text advance positions the next glyph below the previous glyph instead of to the
1560right of previous glyph.
1561
Cary Clark8cc16c72017-08-25 11:51:49 -04001562Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1563Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001564
1565### Parameters
1566
Cary Clark8cc16c72017-08-25 11:51:49 -04001567<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1568setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001569 </tr>
1570</table>
1571
1572### Example
1573
1574<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1575
1576#### Example Output
1577
1578~~~~
1579paint1 == paint2
1580~~~~
1581
1582</fiddle-embed></div>
1583
1584---
1585
Cary Clark08895c42018-02-01 09:37:32 -05001586## <a name="Fake_Bold"></a> Fake Bold
1587
Cary Clark8cc16c72017-08-25 11:51:49 -04001588<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 -05001589is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001590bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001591
Cary Clark7cfcbca2018-01-04 16:11:51 -05001592Use <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 -04001593is not available.
1594
Cary Clark7cfcbca2018-01-04 16:11:51 -05001595A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark2a8c48b2018-02-15 17:31:24 -05001596the 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 -05001597by 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 -04001598
Cary Clark8cc16c72017-08-25 11:51:49 -04001599<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001600
1601### Example
1602
1603<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1604
Cary Clark493df1f2017-08-25 13:14:33 -04001605<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001606## isFakeBoldText
1607
Cary Clarka560c472017-11-27 10:44:06 -05001608<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001609bool isFakeBoldText() const
1610</pre>
1611
1612If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1613from outlines.
1614
Cary Clark8cc16c72017-08-25 11:51:49 -04001615Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001616
1617### Return Value
1618
Cary Clark8cc16c72017-08-25 11:51:49 -04001619<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001620
1621### Example
1622
1623<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1624
1625#### Example Output
1626
1627~~~~
1628paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1629paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1630~~~~
1631
1632</fiddle-embed></div>
1633
1634---
1635
Cary Clark493df1f2017-08-25 13:14:33 -04001636<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001637## setFakeBoldText
1638
Cary Clarka560c472017-11-27 10:44:06 -05001639<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001640void setFakeBoldText(bool fakeBoldText)
1641</pre>
1642
Cary Clarkce101242017-09-01 15:51:02 -04001643Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001644
Cary Clark8cc16c72017-08-25 11:51:49 -04001645Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1646Clears <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 -04001647
1648### Parameters
1649
Cary Clark8cc16c72017-08-25 11:51:49 -04001650<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1651setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001652 </tr>
1653</table>
1654
1655### Example
1656
1657<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1658
1659#### Example Output
1660
1661~~~~
1662paint1 == paint2
1663~~~~
1664
1665</fiddle-embed></div>
1666
1667---
1668
Cary Clark08895c42018-02-01 09:37:32 -05001669## <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
1670
Cary Clark2a8c48b2018-02-15 17:31:24 -05001671if <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 -05001672spacing 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 -05001673<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
1674FreeType as their <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001675
Cary Clark2a8c48b2018-02-15 17:31:24 -05001676<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 -05001677a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001678
Cary Clark493df1f2017-08-25 13:14:33 -04001679<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001680## isDevKernText
1681
Cary Clarka560c472017-11-27 10:44:06 -05001682<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001683bool isDevKernText() const
1684</pre>
1685
Cary Clark12799e12017-07-28 15:18:29 -04001686---
1687
Cary Clark493df1f2017-08-25 13:14:33 -04001688<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001689## setDevKernText
1690
Cary Clarka560c472017-11-27 10:44:06 -05001691<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
skia-bookmaker525f9a92018-05-03 06:27:39 +00001692void setDevKernText(bool)
Cary Clark12799e12017-07-28 15:18:29 -04001693</pre>
1694
Cary Clark12799e12017-07-28 15:18:29 -04001695---
1696
Cary Clark08895c42018-02-01 09:37:32 -05001697## <a name="Filter_Quality_Methods"></a> Filter Quality Methods
1698
Cary Clark4c06f5e2017-08-04 12:48:24 -04001699<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1700A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1701A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001702If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1703in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001704
Cary Clark8cc16c72017-08-25 11:51:49 -04001705<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 -04001706
1707<table> <tr>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001708 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1709 <td><a href="SkCanvas_Reference#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1710 <td><a href="SkCanvas_Reference#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1711 <td><a href="SkCanvas_Reference#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001712</table>
1713
Cary Clarka560c472017-11-27 10:44:06 -05001714and 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 -04001715
Cary Clark2a8c48b2018-02-15 17:31:24 -05001716<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 -04001717
1718### Example
1719
skia-bookmaker525f9a92018-05-03 06:27:39 +00001720<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001721
Cary Clark493df1f2017-08-25 13:14:33 -04001722<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001723## getFilterQuality
1724
Cary Clarka560c472017-11-27 10:44:06 -05001725<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001726SkFilterQuality getFilterQuality() const
1727</pre>
1728
Cary Clark4c06f5e2017-08-04 12:48:24 -04001729Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001730draws faster; a higher setting looks better when the image is scaled.
1731
1732### Return Value
1733
Cary Clark2a8c48b2018-02-15 17:31:24 -05001734one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1735<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001736
1737### Example
1738
1739<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1740
1741#### Example Output
1742
1743~~~~
1744kNone_SkFilterQuality == paint.getFilterQuality()
1745~~~~
1746
1747</fiddle-embed></div>
1748
1749---
1750
Cary Clark493df1f2017-08-25 13:14:33 -04001751<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001752## setFilterQuality
1753
Cary Clarka560c472017-11-27 10:44:06 -05001754<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001755void setFilterQuality(SkFilterQuality quality)
1756</pre>
1757
Cary Clark4c06f5e2017-08-04 12:48:24 -04001758Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001759draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001760Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001761
1762### Parameters
1763
Cary Clark8cc16c72017-08-25 11:51:49 -04001764<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05001765one of: <a href="undocumented#kNone_SkFilterQuality">kNone_SkFilterQuality</a>, <a href="undocumented#kLow_SkFilterQuality">kLow_SkFilterQuality</a>,
1766<a href="undocumented#kMedium_SkFilterQuality">kMedium_SkFilterQuality</a>, <a href="undocumented#kHigh_SkFilterQuality">kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001767 </tr>
1768</table>
1769
1770### Example
1771
1772<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1773
1774#### Example Output
1775
1776~~~~
1777kHigh_SkFilterQuality == paint.getFilterQuality()
1778~~~~
1779
1780</fiddle-embed></div>
1781
1782### See Also
1783
Cary Clark4c06f5e2017-08-04 12:48:24 -04001784<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001785
1786---
1787
Cary Clark08895c42018-02-01 09:37:32 -05001788## <a name="Color_Methods"></a> Color Methods
Cary Clark12799e12017-07-28 15:18:29 -04001789
Cary Clarkab2621d2018-01-30 10:08:57 -05001790| name | description |
1791| --- | --- |
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001792| <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 |
1793| <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 -04001794
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001795<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 -05001796values used to draw a filled or stroked shape in a 32-bit value. Each component
1797occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1798All values in any combination are valid.
1799
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001800<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
1801<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 -05001802
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001803The 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 -05001804positions on the output device, which may have more or fewer bits, and may have
1805a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001806
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001807| 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 -04001808| --- | --- | --- | --- | --- |
1809| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1810
1811### Example
1812
1813<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1814
Cary Clark493df1f2017-08-25 13:14:33 -04001815<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001816## getColor
1817
Cary Clarka560c472017-11-27 10:44:06 -05001818<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001819SkColor getColor() const
1820</pre>
1821
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001822Retrieves <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.
1823Use 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 -04001824a color component.
1825
1826### Return Value
1827
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001828<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="SkColor_Reference#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001829
1830### Example
1831
1832<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1833
1834#### Example Output
1835
1836~~~~
1837Yellow is 100% red, 100% green, and 0% blue.
1838~~~~
1839
1840</fiddle-embed></div>
1841
1842### See Also
1843
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001844<a href="SkColor_Reference#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001845
1846---
1847
Cary Clark493df1f2017-08-25 13:14:33 -04001848<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001849## setColor
1850
Cary Clarka560c472017-11-27 10:44:06 -05001851<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001852void setColor(SkColor color)
1853</pre>
1854
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001855Sets <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,
1856<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 -04001857
1858### Parameters
1859
Cary Clark8cc16c72017-08-25 11:51:49 -04001860<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001861<a href="undocumented#Unpremultiply">Unpremultiplied</a> <a href="SkColor_Reference#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001862 </tr>
1863</table>
1864
1865### Example
1866
1867<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1868
1869#### Example Output
1870
1871~~~~
1872green1 == green2
1873~~~~
1874
1875</fiddle-embed></div>
1876
1877### See Also
1878
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001879<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 -04001880
1881---
1882
1883## <a name="Alpha_Methods"></a> Alpha Methods
1884
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001885<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 -04001886
Cary Clark493df1f2017-08-25 13:14:33 -04001887<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001888## getAlpha
1889
Cary Clarka560c472017-11-27 10:44:06 -05001890<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001891uint8_t getAlpha() const
1892</pre>
1893
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001894Retrieves <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 -04001895
1896### Return Value
1897
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001898<a href="SkColor_Reference#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001899
1900### Example
1901
1902<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1903
1904#### Example Output
1905
1906~~~~
1907255 == paint.getAlpha()
1908~~~~
1909
1910</fiddle-embed></div>
1911
1912---
1913
Cary Clark493df1f2017-08-25 13:14:33 -04001914<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001915## setAlpha
1916
Cary Clarka560c472017-11-27 10:44:06 -05001917<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001918void setAlpha(U8CPU a)
1919</pre>
1920
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001921Replaces <a href="SkColor_Reference#Alpha">Alpha</a>, leaving <a href="SkColor_Reference#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001922unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001923build. <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 -04001924<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 -04001925fully opaque.
1926
1927### Parameters
1928
Cary Clark8cc16c72017-08-25 11:51:49 -04001929<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001930<a href="SkColor_Reference#Alpha">Alpha</a> component of <a href="SkColor_Reference#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001931 </tr>
1932</table>
1933
1934### Example
1935
1936<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1937
1938#### Example Output
1939
1940~~~~
19410x44112233 == paint.getColor()
1942~~~~
1943
1944</fiddle-embed></div>
1945
1946---
1947
Cary Clark493df1f2017-08-25 13:14:33 -04001948<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001949## setARGB
1950
Cary Clarka560c472017-11-27 10:44:06 -05001951<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001952void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
1953</pre>
1954
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001955Sets <a href="SkColor_Reference#Color">Color</a> used when drawing solid fills. The color components range from 0 to 255.
1956The 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 -04001957
1958### Parameters
1959
Cary Clark8cc16c72017-08-25 11:51:49 -04001960<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001961amount 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 -04001962 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001963amount 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 -04001964 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001965amount 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 -04001966 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001967amount 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 -04001968 </tr>
1969</table>
1970
1971### Example
1972
1973<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
1974
1975#### Example Output
1976
1977~~~~
1978transRed1 == transRed2
1979~~~~
1980
1981</fiddle-embed></div>
1982
1983### See Also
1984
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001985<a href="#SkPaint_setColor">setColor</a> <a href="SkColor_Reference#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001986
1987---
1988
Cary Clark08895c42018-02-01 09:37:32 -05001989## <a name="Style"></a> Style
1990
Cary Clark8cc16c72017-08-25 11:51:49 -04001991<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
1992Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001993
Cary Clark8cc16c72017-08-25 11:51:49 -04001994Set <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 -04001995The fill covers the area inside the geometry for most shapes.
1996
Cary Clark8cc16c72017-08-25 11:51:49 -04001997Set <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 -04001998
Cary Clark2a8c48b2018-02-15 17:31:24 -05001999## <a name="Style_Fill"></a> Style Fill
Cary Clark12799e12017-07-28 15:18:29 -04002000
2001### See Also
2002
Cary Clark2a8c48b2018-02-15 17:31:24 -05002003<a href="SkPath_Reference#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002004
Cary Clark2a8c48b2018-02-15 17:31:24 -05002005## <a name="Style_Stroke"></a> Style Stroke
Cary Clark12799e12017-07-28 15:18:29 -04002006
Cary Clarkbc5697d2017-10-04 14:31:33 -04002007The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002008<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>.
2009The 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 -04002010The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002011
Cary Clark8cc16c72017-08-25 11:51:49 -04002012As <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 -04002013may 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 -04002014
Cary Clark2a8c48b2018-02-15 17:31:24 -05002015## <a name="Style_Hairline"></a> Style Hairline
Cary Clark12799e12017-07-28 15:18:29 -04002016
Cary Clark2a8c48b2018-02-15 17:31:24 -05002017<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Style_Hairline">Hairline</a>.
2018<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 -05002019flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002020
Cary Clark2a8c48b2018-02-15 17:31:24 -05002021<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
2022two 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 -04002023pixel. 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 -05002024GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002025while stroking.
2026
Cary Clark8cc16c72017-08-25 11:51:49 -04002027## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002028
Cary Clarka560c472017-11-27 10:44:06 -05002029<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04002030 enum <a href="#SkPaint_Style">Style</a> {
2031 <a href="#SkPaint_kFill_Style">kFill Style</a>,
2032 <a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2033 <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
2034 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002035
2036 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 -05002037</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002038
Cary Clark8cc16c72017-08-25 11:51:49 -04002039Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002040The stroke and fill
2041share all paint attributes; for instance, they are drawn with the same color.
2042
Cary Clark8cc16c72017-08-25 11:51:49 -04002043Use <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 -04002044a fill draw.
2045
2046### Constants
2047
2048<table>
2049 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002050 <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 -05002051Applies 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>.
2052<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 -04002053<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 -05002054The <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 -04002055and to create an unfilled hole inside the shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05002056<a href="#SkPaint_Style">Style</a> is set to <a href="#SkPaint_kFill_Style">kFill Style</a> by default.
2057</td>
Cary Clark12799e12017-07-28 15:18:29 -04002058 </tr>
2059 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002060 <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 -05002061Applies 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>.
2062<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 -04002063and ignore the set <a href="#SkPaint_Style">Style</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05002064The stroke construction is unaffected by the <a href="SkPath_Reference#Fill_Type">Path Fill Type</a>.
2065</td>
Cary Clark12799e12017-07-28 15:18:29 -04002066 </tr>
2067 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002068 <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 -05002069Applies 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>.
2070<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 -05002071and the set <a href="SkPath_Reference#Fill_Type">Path Fill Type</a> is ignored.
2072</td>
Cary Clark12799e12017-07-28 15:18:29 -04002073 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04002074 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002075 <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 -05002076May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.
2077</td>
Cary Clark12799e12017-07-28 15:18:29 -04002078 </tr>
2079
Cary Clark06c20f32018-03-20 15:53:27 -04002080
Cary Clark12799e12017-07-28 15:18:29 -04002081
Cary Clark493df1f2017-08-25 13:14:33 -04002082<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002083## getStyle
2084
Cary Clarka560c472017-11-27 10:44:06 -05002085<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002086Style getStyle() const
2087</pre>
2088
2089Whether the geometry is filled, stroked, or filled and stroked.
2090
2091### Return Value
2092
Cary Clark8cc16c72017-08-25 11:51:49 -04002093one 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 -04002094
2095### Example
2096
2097<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2098
2099#### Example Output
2100
2101~~~~
2102SkPaint::kFill_Style == paint.getStyle()
2103~~~~
2104
2105</fiddle-embed></div>
2106
2107### See Also
2108
Cary Clark8cc16c72017-08-25 11:51:49 -04002109<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002110
2111---
2112
Cary Clark493df1f2017-08-25 13:14:33 -04002113<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002114## setStyle
2115
Cary Clarka560c472017-11-27 10:44:06 -05002116<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002117void setStyle(Style style)
2118</pre>
2119
2120Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002121Has 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 -04002122
2123### Parameters
2124
Cary Clark8cc16c72017-08-25 11:51:49 -04002125<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2126one 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 -04002127 </tr>
2128</table>
2129
2130### Example
2131
2132<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2133
2134### See Also
2135
Cary Clark8cc16c72017-08-25 11:51:49 -04002136<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002137
2138---
2139
2140### See Also
2141
Cary Clark2a8c48b2018-02-15 17:31:24 -05002142<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 -04002143
Cary Clark08895c42018-02-01 09:37:32 -05002144## <a name="Stroke_Width"></a> Stroke Width
2145
Cary Clark8cc16c72017-08-25 11:51:49 -04002146<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002147of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002148set 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 -04002149
2150When width is greater than zero, the stroke encompasses as many pixels partially
2151or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002152the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002153
Cary Clark2a8c48b2018-02-15 17:31:24 -05002154The stroke dimensions are scaled by the canvas matrix, but <a href="#Style_Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002155remains one pixel wide regardless of scaling.
2156
2157The default width for the paint is zero.
2158
2159### Example
2160
skia-bookmaker525f9a92018-05-03 06:27:39 +00002161<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 -05002162line and the platform implementation.
2163</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002164
Cary Clark493df1f2017-08-25 13:14:33 -04002165<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002166## getStrokeWidth
2167
Cary Clarka560c472017-11-27 10:44:06 -05002168<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002169SkScalar getStrokeWidth() const
2170</pre>
2171
Cary Clark8cc16c72017-08-25 11:51:49 -04002172Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002173outline the shape.
2174
2175### Return Value
2176
Cary Clark2a8c48b2018-02-15 17:31:24 -05002177zero for <a href="#Style_Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002178
2179### Example
2180
2181<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2182
2183#### Example Output
2184
2185~~~~
21860 == paint.getStrokeWidth()
2187~~~~
2188
2189</fiddle-embed></div>
2190
2191---
2192
Cary Clark493df1f2017-08-25 13:14:33 -04002193<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002194## setStrokeWidth
2195
Cary Clarka560c472017-11-27 10:44:06 -05002196<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002197void setStrokeWidth(SkScalar width)
2198</pre>
2199
2200Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002201outline the shape.
2202Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002203
2204### Parameters
2205
Cary Clark8cc16c72017-08-25 11:51:49 -04002206<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05002207zero thickness for <a href="#Style_Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002208 </tr>
2209</table>
2210
2211### Example
2212
2213<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2214
2215#### Example Output
2216
2217~~~~
22185 == paint.getStrokeWidth()
2219~~~~
2220
2221</fiddle-embed></div>
2222
2223---
2224
Cary Clark08895c42018-02-01 09:37:32 -05002225## <a name="Miter_Limit"></a> Miter Limit
2226
Cary Clark8cc16c72017-08-25 11:51:49 -04002227<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002228relative to the stroke width.
2229
Cary Clark8cc16c72017-08-25 11:51:49 -04002230<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2231is 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>
2232or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002233
Cary Clark8cc16c72017-08-25 11:51:49 -04002234If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2235is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002236
Cary Clark8cc16c72017-08-25 11:51:49 -04002237<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002238
Cary Clark8cc16c72017-08-25 11:51:49 -04002239miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002240The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002241in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002242
2243Here are some miter limits and the angles that triggers them.
2244
2245| miter limit | angle in degrees |
2246| --- | --- |
2247| 10 | 11.48 |
2248| 9 | 12.76 |
2249| 8 | 14.36 |
2250| 7 | 16.43 |
2251| 6 | 19.19 |
2252| 5 | 23.07 |
2253| 4 | 28.96 |
2254| 3 | 38.94 |
2255| 2 | 60 |
2256| 1 | 180 |
2257
2258### Example
2259
2260<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2261When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002262by a bevel join.
2263</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002264
Cary Clark493df1f2017-08-25 13:14:33 -04002265<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002266## getStrokeMiter
2267
Cary Clarka560c472017-11-27 10:44:06 -05002268<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002269SkScalar getStrokeMiter() const
2270</pre>
2271
2272The limit at which a sharp corner is drawn beveled.
2273
2274### Return Value
2275
Cary Clark8cc16c72017-08-25 11:51:49 -04002276zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002277
2278### Example
2279
2280<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2281
2282#### Example Output
2283
2284~~~~
2285default miter limit == 4
2286~~~~
2287
2288</fiddle-embed></div>
2289
2290### See Also
2291
Cary Clark8cc16c72017-08-25 11:51:49 -04002292<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 -04002293
2294---
2295
Cary Clark493df1f2017-08-25 13:14:33 -04002296<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002297## setStrokeMiter
2298
Cary Clarka560c472017-11-27 10:44:06 -05002299<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002300void setStrokeMiter(SkScalar miter)
2301</pre>
2302
2303The limit at which a sharp corner is drawn beveled.
2304Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002305Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002306
2307### Parameters
2308
Cary Clark8cc16c72017-08-25 11:51:49 -04002309<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2310zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002311 </tr>
2312</table>
2313
2314### Example
2315
2316<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2317
2318#### Example Output
2319
2320~~~~
2321default miter limit == 8
2322~~~~
2323
2324</fiddle-embed></div>
2325
2326### See Also
2327
Cary Clark8cc16c72017-08-25 11:51:49 -04002328<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 -04002329
2330---
2331
Cary Clark08895c42018-02-01 09:37:32 -05002332## <a name="Stroke_Cap"></a> Stroke Cap
Cary Clark12799e12017-07-28 15:18:29 -04002333
Cary Clark8cc16c72017-08-25 11:51:49 -04002334## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002335
Cary Clarka560c472017-11-27 10:44:06 -05002336<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04002337 enum <a href="#SkPaint_Cap">Cap</a> {
2338 <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2339 <a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2340 <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002341
Cary Clark186d08f2018-04-03 08:43:27 -04002342 <a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2343 <a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2344 };
Cary Clark6fc50412017-09-21 12:31:06 -04002345
Cary Clark186d08f2018-04-03 08:43:27 -04002346 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 -05002347</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002348
Cary Clark2a8c48b2018-02-15 17:31:24 -05002349<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 -04002350
2351### Constants
2352
2353<table>
2354 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002355 <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.
2356</td>
Cary Clark12799e12017-07-28 15:18:29 -04002357 </tr>
2358 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002359 <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 -05002360and end.
2361</td>
Cary Clark12799e12017-07-28 15:18:29 -04002362 </tr>
2363 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002364 <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 -04002365and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002366of the stroke.
2367</td>
Cary Clark12799e12017-07-28 15:18:29 -04002368 </tr>
2369 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002370 <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>.
2371</td>
Cary Clark12799e12017-07-28 15:18:29 -04002372 </tr>
2373 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002374 <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 -05002375<a href="#Stroke_Cap">Stroke Cap</a> is set to <a href="#SkPaint_kButt_Cap">kButt Cap</a> by default.
2376</td>
Cary Clark12799e12017-07-28 15:18:29 -04002377 </tr>
2378 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002379 <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 -05002380May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.
2381</td>
Cary Clark12799e12017-07-28 15:18:29 -04002382 </tr>
2383
Cary Clark7cfcbca2018-01-04 16:11:51 -05002384Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002385follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002386
Cary Clark2a8c48b2018-02-15 17:31:24 -05002387If 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 -04002388visible beginning and end.
2389
Cary Clark2a8c48b2018-02-15 17:31:24 -05002390<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 -04002391
Cary Clark2a8c48b2018-02-15 17:31:24 -05002392<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Contour_Zero_Length">Zero Length Contour</a> is not drawn.
2393<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 -04002394at the contour point.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002395<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 -04002396<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002397
Cary Clark8cc16c72017-08-25 11:51:49 -04002398<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 -04002399
Cary Clark12799e12017-07-28 15:18:29 -04002400### Example
2401
Cary Clark2ade9972017-11-02 17:49:34 -04002402<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002403
Cary Clark493df1f2017-08-25 13:14:33 -04002404<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002405## getStrokeCap
2406
Cary Clarka560c472017-11-27 10:44:06 -05002407<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002408Cap getStrokeCap() const
2409</pre>
2410
2411The geometry drawn at the beginning and end of strokes.
2412
2413### Return Value
2414
Cary Clark8cc16c72017-08-25 11:51:49 -04002415one 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 -04002416
2417### Example
2418
2419<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2420
2421#### Example Output
2422
2423~~~~
2424kButt_Cap == default stroke cap
2425~~~~
2426
2427</fiddle-embed></div>
2428
2429### See Also
2430
Cary Clark8cc16c72017-08-25 11:51:49 -04002431<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002432
2433---
2434
Cary Clark493df1f2017-08-25 13:14:33 -04002435<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002436## setStrokeCap
2437
Cary Clarka560c472017-11-27 10:44:06 -05002438<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002439void setStrokeCap(Cap cap)
2440</pre>
2441
2442The geometry drawn at the beginning and end of strokes.
2443
2444### Parameters
2445
Cary Clark8cc16c72017-08-25 11:51:49 -04002446<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2447one 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>;
2448has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002449 </tr>
2450</table>
2451
2452### Example
2453
2454<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2455
2456#### Example Output
2457
2458~~~~
2459kRound_Cap == paint.getStrokeCap()
2460~~~~
2461
2462</fiddle-embed></div>
2463
2464### See Also
2465
Cary Clark8cc16c72017-08-25 11:51:49 -04002466<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002467
2468---
2469
Cary Clark08895c42018-02-01 09:37:32 -05002470## <a name="Stroke_Join"></a> Stroke Join
2471
Cary Clark2a8c48b2018-02-15 17:31:24 -05002472<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 -04002473
Cary Clark7cfcbca2018-01-04 16:11:51 -05002474Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clark2a8c48b2018-02-15 17:31:24 -05002475follows the <a href="SkPath_Reference#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002476
2477If the contour direction changes abruptly, because the tangent direction leading
2478to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002479the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002480
2481### Example
2482
Cary Clark2ade9972017-11-02 17:49:34 -04002483<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002484
Cary Clark8cc16c72017-08-25 11:51:49 -04002485## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002486
Cary Clarka560c472017-11-27 10:44:06 -05002487<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04002488 enum <a href="#SkPaint_Join">Join</a> {
2489 <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2490 <a href="#SkPaint_kRound_Join">kRound Join</a>,
2491 <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002492
Cary Clark186d08f2018-04-03 08:43:27 -04002493 <a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2494 <a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2495 };
Cary Clark6fc50412017-09-21 12:31:06 -04002496
Cary Clark186d08f2018-04-03 08:43:27 -04002497 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 -05002498</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002499
Cary Clark8cc16c72017-08-25 11:51:49 -04002500<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 -04002501affects the four corners of a stroked rectangle, and the connected segments in a
2502stroked path.
2503
2504Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2505radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2506connect the thick strokes.
2507
Cary Clark7cfcbca2018-01-04 16:11:51 -05002508The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002509not contain the actual join. For instance, a fill path constructed with round joins does
2510not necessarily include circles at each connected segment.
2511
2512### Constants
2513
2514<table>
2515 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002516 <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 -05002517If the extension exceeds <a href="#Miter_Limit">Miter Limit</a>, <a href="#SkPaint_kBevel_Join">kBevel Join</a> is used instead.
2518</td>
Cary Clark12799e12017-07-28 15:18:29 -04002519 </tr>
2520 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05002521 <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.
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_kBevel_Join"> <code><strong>SkPaint::kBevel_Join </strong></code> </a></td><td>2</td><td>Connects the outside edges of 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_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>.
2530</td>
Cary Clark12799e12017-07-28 15:18:29 -04002531 </tr>
2532 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002533 <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 -05002534<a href="#Stroke_Join">Stroke Join</a> is set to <a href="#SkPaint_kMiter_Join">kMiter Join</a> by default.
2535</td>
Cary Clark12799e12017-07-28 15:18:29 -04002536 </tr>
2537 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002538 <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 -05002539May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.
2540</td>
Cary Clark12799e12017-07-28 15:18:29 -04002541 </tr>
2542</table>
2543
2544### Example
2545
2546<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2547
2548### See Also
2549
Cary Clark8cc16c72017-08-25 11:51:49 -04002550<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 -04002551
2552
2553
Cary Clark493df1f2017-08-25 13:14:33 -04002554<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002555## getStrokeJoin
2556
Cary Clarka560c472017-11-27 10:44:06 -05002557<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002558Join getStrokeJoin() const
2559</pre>
2560
Cary Clark0c5f5462017-12-15 11:21:51 -05002561The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002562
2563### Return Value
2564
Cary Clark8cc16c72017-08-25 11:51:49 -04002565one 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 -04002566
2567### Example
2568
2569<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2570
2571#### Example Output
2572
2573~~~~
2574kMiter_Join == default stroke join
2575~~~~
2576
2577</fiddle-embed></div>
2578
2579### See Also
2580
Cary Clark8cc16c72017-08-25 11:51:49 -04002581<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002582
2583---
2584
Cary Clark493df1f2017-08-25 13:14:33 -04002585<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002586## setStrokeJoin
2587
Cary Clarka560c472017-11-27 10:44:06 -05002588<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002589void setStrokeJoin(Join join)
2590</pre>
2591
Cary Clark0c5f5462017-12-15 11:21:51 -05002592The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002593
2594### Parameters
2595
Cary Clark8cc16c72017-08-25 11:51:49 -04002596<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2597one 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 -04002598otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002599 </tr>
2600</table>
2601
2602### Example
2603
2604<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2605
2606#### Example Output
2607
2608~~~~
2609kMiter_Join == paint.getStrokeJoin()
2610~~~~
2611
2612</fiddle-embed></div>
2613
2614### See Also
2615
Cary Clark8cc16c72017-08-25 11:51:49 -04002616<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002617
2618---
2619
2620### See Also
2621
Cary Clark8cc16c72017-08-25 11:51:49 -04002622<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002623
Cary Clark08895c42018-02-01 09:37:32 -05002624## <a name="Fill_Path"></a> Fill Path
2625
Cary Clark8cc16c72017-08-25 11:51:49 -04002626<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 -04002627
Cary Clark8cc16c72017-08-25 11:51:49 -04002628If <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 -04002629replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2630destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002631
Cary Clark4c06f5e2017-08-04 12:48:24 -04002632Fill <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
2633the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002634
Cary Clark7cfcbca2018-01-04 16:11:51 -05002635If <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 -04002636and <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>,
2637and <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 -04002638
Cary Clark7cfcbca2018-01-04 16:11:51 -05002639Fill <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 -04002640
Cary Clark8cc16c72017-08-25 11:51:49 -04002641If 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 -05002642returns false since <a href="#Style_Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002643
Cary Clark493df1f2017-08-25 13:14:33 -04002644<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002645## getFillPath
2646
Cary Clarka560c472017-11-27 10:44:06 -05002647<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2648bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002649</pre>
2650
2651The filled equivalent of the stroked path.
2652
2653### Parameters
2654
Cary Clark8cc16c72017-08-25 11:51:49 -04002655<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002656<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002657 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2658resulting <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>
2659 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002660optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002661 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002662if > 1, increase precision, else if (0 < res < 1) reduce precision
2663to favor speed and size</td>
2664 </tr>
2665</table>
2666
2667### Return Value
2668
Cary Clark2a8c48b2018-02-15 17:31:24 -05002669true 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 -04002670
2671### Example
2672
Cary Clark2a8c48b2018-02-15 17:31:24 -05002673<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.
2674At the lowest precision, the <a href="SkPath_Reference#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002675At the highest precision, the filled path has high fidelity compared to the original stroke.
2676</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002677
2678---
2679
Cary Clark2dc84ad2018-01-26 12:56:22 -05002680<a name="SkPaint_getFillPath_2"></a>
2681
Cary Clarka560c472017-11-27 10:44:06 -05002682<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002683bool getFillPath(const SkPath& src, SkPath* dst) const
2684</pre>
2685
2686The filled equivalent of the stroked path.
2687
Cary Clark8cc16c72017-08-25 11:51:49 -04002688Replaces <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>.
2689<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 -04002690
2691### Parameters
2692
Cary Clark8cc16c72017-08-25 11:51:49 -04002693<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002694<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002695 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2696resulting <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 -04002697 </tr>
2698</table>
2699
2700### Return Value
2701
Cary Clark2a8c48b2018-02-15 17:31:24 -05002702true 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 -04002703
2704### Example
2705
2706<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2707
2708---
2709
2710### See Also
2711
Cary Clark8cc16c72017-08-25 11:51:49 -04002712<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 -04002713
Cary Clark08895c42018-02-01 09:37:32 -05002714## <a name="Shader_Methods"></a> Shader Methods
2715
Cary Clark4c06f5e2017-08-04 12:48:24 -04002716<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2717<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002718If <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 -04002719
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002720<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>.
2721If <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 -04002722the fill.
2723
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002724The 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 -04002725
2726### Example
2727
2728<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2729
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002730If <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 -04002731
2732### Example
2733
skia-bookmaker525f9a92018-05-03 06:27:39 +00002734<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002735
Cary Clark493df1f2017-08-25 13:14:33 -04002736<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002737## getShader
2738
Cary Clarka560c472017-11-27 10:44:06 -05002739<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002740SkShader* getShader() const
2741</pre>
2742
2743Optional colors used when filling a path, such as a gradient.
2744
Cary Clark4c06f5e2017-08-04 12:48:24 -04002745Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002746
2747### Return Value
2748
Cary Clark4c06f5e2017-08-04 12:48:24 -04002749<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002750
2751### Example
2752
2753<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2754
2755#### Example Output
2756
2757~~~~
2758nullptr == shader
2759nullptr != shader
2760~~~~
2761
2762</fiddle-embed></div>
2763
2764---
2765
Cary Clark493df1f2017-08-25 13:14:33 -04002766<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002767## refShader
2768
Cary Clarka560c472017-11-27 10:44:06 -05002769<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002770sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002771</pre>
2772
2773Optional colors used when filling a path, such as a gradient.
2774
Cary Clark4c06f5e2017-08-04 12:48:24 -04002775Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002776
2777### Return Value
2778
Cary Clark4c06f5e2017-08-04 12:48:24 -04002779<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002780
2781### Example
2782
2783<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2784
2785#### Example Output
2786
2787~~~~
2788shader unique: true
2789shader unique: false
2790~~~~
2791
2792</fiddle-embed></div>
2793
2794---
2795
Cary Clark493df1f2017-08-25 13:14:33 -04002796<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002797## setShader
2798
Cary Clarka560c472017-11-27 10:44:06 -05002799<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002800void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002801</pre>
2802
2803Optional colors used when filling a path, such as a gradient.
2804
Cary Clarkd0530ba2017-09-14 11:25:39 -04002805Sets <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 -04002806Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002807
2808### Parameters
2809
Cary Clark8cc16c72017-08-25 11:51:49 -04002810<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002811how 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 -04002812 </tr>
2813</table>
2814
2815### Example
2816
2817<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2818
2819---
2820
Cary Clark08895c42018-02-01 09:37:32 -05002821## <a name="Color_Filter_Methods"></a> Color Filter Methods
2822
Cary Clark4c06f5e2017-08-04 12:48:24 -04002823<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2824<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 -04002825If <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 -04002826
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002827The 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 -04002828
2829### Example
2830
2831<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2832
Cary Clark493df1f2017-08-25 13:14:33 -04002833<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002834## getColorFilter
2835
Cary Clarka560c472017-11-27 10:44:06 -05002836<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002837SkColorFilter* getColorFilter() const
2838</pre>
2839
Cary Clark4c06f5e2017-08-04 12:48:24 -04002840Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2841Does 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 -04002842
2843### Return Value
2844
Cary Clark4c06f5e2017-08-04 12:48:24 -04002845<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002846
2847### Example
2848
2849<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2850
2851#### Example Output
2852
2853~~~~
2854nullptr == color filter
2855nullptr != color filter
2856~~~~
2857
2858</fiddle-embed></div>
2859
2860---
2861
Cary Clark493df1f2017-08-25 13:14:33 -04002862<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002863## refColorFilter
2864
Cary Clarka560c472017-11-27 10:44:06 -05002865<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002866sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002867</pre>
2868
Cary Clark4c06f5e2017-08-04 12:48:24 -04002869Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2870Increases <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 -04002871
2872### Return Value
2873
Cary Clark4c06f5e2017-08-04 12:48:24 -04002874<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002875
2876### Example
2877
2878<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2879
2880#### Example Output
2881
2882~~~~
2883color filter unique: true
2884color filter unique: false
2885~~~~
2886
2887</fiddle-embed></div>
2888
2889---
2890
Cary Clark493df1f2017-08-25 13:14:33 -04002891<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002892## setColorFilter
2893
Cary Clarka560c472017-11-27 10:44:06 -05002894<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002895void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002896</pre>
2897
Cary Clark6fc50412017-09-21 12:31:06 -04002898Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2899<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2900
2901Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002902
2903### Parameters
2904
Cary Clark8cc16c72017-08-25 11:51:49 -04002905<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002906<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002907 </tr>
2908</table>
2909
2910### Example
2911
2912<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2913
2914---
2915
Cary Clark08895c42018-02-01 09:37:32 -05002916## <a name="Blend_Mode_Methods"></a> Blend Mode Methods
2917
Cary Clark2d4bf5f2018-04-16 08:37:38 -04002918<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 -05002919The default setting, <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002920over the destination color.
2921
2922### Example
2923
2924<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2925
2926### See Also
2927
Cary Clark4c06f5e2017-08-04 12:48:24 -04002928<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002929
Cary Clark493df1f2017-08-25 13:14:33 -04002930<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002931## getBlendMode
2932
Cary Clarka560c472017-11-27 10:44:06 -05002933<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002934SkBlendMode getBlendMode() const
2935</pre>
2936
Cary Clark4c06f5e2017-08-04 12:48:24 -04002937Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark2a8c48b2018-02-15 17:31:24 -05002938By default, returns <a href="undocumented#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002939
2940### Return Value
2941
2942mode used to combine source color with destination color
2943
2944### Example
2945
skia-bookmaker525f9a92018-05-03 06:27:39 +00002946<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04002947
2948#### Example Output
2949
2950~~~~
2951kSrcOver == getBlendMode
2952kSrcOver != getBlendMode
2953~~~~
2954
2955</fiddle-embed></div>
2956
2957---
2958
Cary Clark493df1f2017-08-25 13:14:33 -04002959<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002960## isSrcOver
2961
Cary Clarka560c472017-11-27 10:44:06 -05002962<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002963bool isSrcOver() const
2964</pre>
2965
Cary Clark2a8c48b2018-02-15 17:31:24 -05002966Returns 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 -04002967
2968### Return Value
2969
Cary Clark2a8c48b2018-02-15 17:31:24 -05002970true 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 -04002971
2972### Example
2973
2974<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2975
2976#### Example Output
2977
2978~~~~
2979isSrcOver == true
2980isSrcOver != true
2981~~~~
2982
2983</fiddle-embed></div>
2984
2985---
2986
Cary Clark493df1f2017-08-25 13:14:33 -04002987<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002988## setBlendMode
2989
Cary Clarka560c472017-11-27 10:44:06 -05002990<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002991void setBlendMode(SkBlendMode mode)
2992</pre>
2993
Cary Clark7cfcbca2018-01-04 16:11:51 -05002994Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002995Does not check for valid input.
2996
2997### Parameters
2998
Cary Clark8cc16c72017-08-25 11:51:49 -04002999<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003000<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003001 </tr>
3002</table>
3003
3004### Example
3005
3006<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3007
3008#### Example Output
3009
3010~~~~
3011isSrcOver == true
3012isSrcOver != true
3013~~~~
3014
3015</fiddle-embed></div>
3016
3017---
3018
Cary Clark08895c42018-02-01 09:37:32 -05003019## <a name="Path_Effect_Methods"></a> Path Effect Methods
3020
Cary Clark4c06f5e2017-08-04 12:48:24 -04003021<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3022<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 -04003023If <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 -04003024
3025### Example
3026
3027<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3028
3029### See Also
3030
Cary Clark4c06f5e2017-08-04 12:48:24 -04003031<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003032
Cary Clark493df1f2017-08-25 13:14:33 -04003033<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003034## getPathEffect
3035
Cary Clarka560c472017-11-27 10:44:06 -05003036<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003037SkPathEffect* getPathEffect() const
3038</pre>
3039
Cary Clark4c06f5e2017-08-04 12:48:24 -04003040Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3041Does 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 -04003042
3043### Return Value
3044
Cary Clark4c06f5e2017-08-04 12:48:24 -04003045<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003046
3047### Example
3048
3049<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3050
3051#### Example Output
3052
3053~~~~
3054nullptr == path effect
3055nullptr != path effect
3056~~~~
3057
3058</fiddle-embed></div>
3059
3060---
3061
Cary Clark493df1f2017-08-25 13:14:33 -04003062<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003063## refPathEffect
3064
Cary Clarka560c472017-11-27 10:44:06 -05003065<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003066sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003067</pre>
3068
Cary Clark4c06f5e2017-08-04 12:48:24 -04003069Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3070Increases <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 -04003071
3072### Return Value
3073
Cary Clark4c06f5e2017-08-04 12:48:24 -04003074<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003075
3076### Example
3077
Cary Clarka560c472017-11-27 10:44:06 -05003078<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003079
3080#### Example Output
3081
3082~~~~
3083path effect unique: true
3084path effect unique: false
3085~~~~
3086
3087</fiddle-embed></div>
3088
3089---
3090
Cary Clark493df1f2017-08-25 13:14:33 -04003091<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003092## setPathEffect
3093
Cary Clarka560c472017-11-27 10:44:06 -05003094<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003095void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003096</pre>
3097
Cary Clark6fc50412017-09-21 12:31:06 -04003098Sets <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
3099<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3100
3101Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003102
3103### Parameters
3104
Cary Clark8cc16c72017-08-25 11:51:49 -04003105<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003106replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003107 </tr>
3108</table>
3109
3110### Example
3111
3112<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3113
3114---
3115
Cary Clark08895c42018-02-01 09:37:32 -05003116## <a name="Mask_Filter_Methods"></a> Mask Filter Methods
3117
Cary Clarkce101242017-09-01 15:51:02 -04003118<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 -05003119<a href="undocumented#Mask_Filter">Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003120
3121<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3122creating 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
3123modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003124
3125### Example
3126
Cary Clark681287e2018-03-16 11:34:15 -04003127<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003128
Cary Clark493df1f2017-08-25 13:14:33 -04003129<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003130## getMaskFilter
3131
Cary Clarka560c472017-11-27 10:44:06 -05003132<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003133SkMaskFilter* getMaskFilter() const
3134</pre>
3135
Cary Clark4c06f5e2017-08-04 12:48:24 -04003136Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3137Does 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 -04003138
3139### Return Value
3140
Cary Clark4c06f5e2017-08-04 12:48:24 -04003141<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003142
3143### Example
3144
Cary Clark681287e2018-03-16 11:34:15 -04003145<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003146
3147#### Example Output
3148
3149~~~~
3150nullptr == mask filter
3151nullptr != mask filter
3152~~~~
3153
3154</fiddle-embed></div>
3155
3156---
3157
Cary Clark493df1f2017-08-25 13:14:33 -04003158<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003159## refMaskFilter
3160
Cary Clarka560c472017-11-27 10:44:06 -05003161<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003162sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003163</pre>
3164
Cary Clark4c06f5e2017-08-04 12:48:24 -04003165Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003166
Cary Clark4c06f5e2017-08-04 12:48:24 -04003167Increases <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 -04003168
3169### Return Value
3170
Cary Clark4c06f5e2017-08-04 12:48:24 -04003171<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003172
3173### Example
3174
Cary Clark681287e2018-03-16 11:34:15 -04003175<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003176
3177#### Example Output
3178
3179~~~~
3180mask filter unique: true
3181mask filter unique: false
3182~~~~
3183
3184</fiddle-embed></div>
3185
3186---
3187
Cary Clark493df1f2017-08-25 13:14:33 -04003188<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003189## setMaskFilter
3190
Cary Clarka560c472017-11-27 10:44:06 -05003191<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003192void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003193</pre>
3194
Cary Clark6fc50412017-09-21 12:31:06 -04003195Sets <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
3196<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
3197<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3198
Cary Clark6fc50412017-09-21 12:31:06 -04003199Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003200
3201### Parameters
3202
Cary Clark8cc16c72017-08-25 11:51:49 -04003203<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003204modifies clipping mask generated from drawn geometry</td>
3205 </tr>
3206</table>
3207
3208### Example
3209
Cary Clark681287e2018-03-16 11:34:15 -04003210<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003211
3212---
3213
Cary Clark08895c42018-02-01 09:37:32 -05003214## <a name="Typeface_Methods"></a> Typeface Methods
3215
Cary Clark4c06f5e2017-08-04 12:48:24 -04003216<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3217<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3218The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003219implementation.
3220
3221### Example
3222
Ben Wagner700ff172017-11-08 15:37:22 -05003223<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003224
Cary Clark493df1f2017-08-25 13:14:33 -04003225<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003226## getTypeface
3227
Cary Clarka560c472017-11-27 10:44:06 -05003228<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003229SkTypeface* getTypeface() const
3230</pre>
3231
Cary Clark4c06f5e2017-08-04 12:48:24 -04003232Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003233Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003234
3235### Return Value
3236
Cary Clark4c06f5e2017-08-04 12:48:24 -04003237<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003238
3239### Example
3240
Cary Clark71961fb2018-01-05 14:21:59 -05003241<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003242
3243#### Example Output
3244
3245~~~~
3246nullptr == typeface
3247nullptr != typeface
3248~~~~
3249
3250</fiddle-embed></div>
3251
3252---
3253
Cary Clark493df1f2017-08-25 13:14:33 -04003254<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003255## refTypeface
3256
Cary Clarka560c472017-11-27 10:44:06 -05003257<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003258sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003259</pre>
3260
Cary Clark4c06f5e2017-08-04 12:48:24 -04003261Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003262
3263### Return Value
3264
Cary Clark4c06f5e2017-08-04 12:48:24 -04003265<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003266
3267### Example
3268
skia-bookmaker525f9a92018-05-03 06:27:39 +00003269<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003270
3271#### Example Output
3272
3273~~~~
3274typeface1 != typeface2
3275typeface1 == typeface2
3276~~~~
3277
3278</fiddle-embed></div>
3279
3280---
3281
Cary Clark493df1f2017-08-25 13:14:33 -04003282<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003283## setTypeface
3284
Cary Clarka560c472017-11-27 10:44:06 -05003285<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003286void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003287</pre>
3288
Cary Clark7cfcbca2018-01-04 16:11:51 -05003289Sets <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 -04003290Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3291<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003292
3293### Parameters
3294
Cary Clark8cc16c72017-08-25 11:51:49 -04003295<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003296font and style used to draw text</td>
3297 </tr>
3298</table>
3299
3300### Example
3301
Cary Clark71961fb2018-01-05 14:21:59 -05003302<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003303
3304---
3305
Cary Clark08895c42018-02-01 09:37:32 -05003306## <a name="Image_Filter_Methods"></a> Image Filter Methods
3307
Cary Clark8cc16c72017-08-25 11:51:49 -04003308<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 -05003309with <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 -04003310which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003311
Cary Clark4c06f5e2017-08-04 12:48:24 -04003312<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 -04003313can 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 -04003314<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 +00003315<a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003316
3317### Example
3318
Update Docs4410d7f2018-03-19 06:05:52 +00003319<div><fiddle-embed name="250e45c5935d54eac6aca775d1fe3475"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003320
Cary Clark493df1f2017-08-25 13:14:33 -04003321<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003322## getImageFilter
3323
Cary Clarka560c472017-11-27 10:44:06 -05003324<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003325SkImageFilter* getImageFilter() const
3326</pre>
3327
Cary Clark4c06f5e2017-08-04 12:48:24 -04003328Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3329Does 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 -04003330
3331### Return Value
3332
Cary Clark4c06f5e2017-08-04 12:48:24 -04003333<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003334
3335### Example
3336
Cary Clarka560c472017-11-27 10:44:06 -05003337<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003338
3339#### Example Output
3340
3341~~~~
3342nullptr == image filter
3343nullptr != image filter
3344~~~~
3345
3346</fiddle-embed></div>
3347
3348---
3349
Cary Clark493df1f2017-08-25 13:14:33 -04003350<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003351## refImageFilter
3352
Cary Clarka560c472017-11-27 10:44:06 -05003353<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003354sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003355</pre>
3356
Cary Clark4c06f5e2017-08-04 12:48:24 -04003357Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3358Increases <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 -04003359
3360### Return Value
3361
Cary Clark4c06f5e2017-08-04 12:48:24 -04003362<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003363
3364### Example
3365
3366<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3367
3368#### Example Output
3369
3370~~~~
3371image filter unique: true
3372image filter unique: false
3373~~~~
3374
3375</fiddle-embed></div>
3376
3377---
3378
Cary Clark493df1f2017-08-25 13:14:33 -04003379<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003380## setImageFilter
3381
Cary Clarka560c472017-11-27 10:44:06 -05003382<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003383void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003384</pre>
3385
Cary Clark6fc50412017-09-21 12:31:06 -04003386Sets <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
3387<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 -04003388on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003389
Cary Clark6fc50412017-09-21 12:31:06 -04003390Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003391
3392### Parameters
3393
Cary Clark8cc16c72017-08-25 11:51:49 -04003394<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003395how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003396 </tr>
3397</table>
3398
3399### Example
3400
3401<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3402
3403---
3404
Cary Clark08895c42018-02-01 09:37:32 -05003405## <a name="Draw_Looper_Methods"></a> Draw Looper Methods
3406
Cary Clark4c06f5e2017-08-04 12:48:24 -04003407<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 -04003408to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003409
Cary Clark4c06f5e2017-08-04 12:48:24 -04003410<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3411<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 -05003412Set <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 -04003413
3414### Example
3415
3416<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3417
Cary Clark493df1f2017-08-25 13:14:33 -04003418<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003419## getDrawLooper
3420
Cary Clarka560c472017-11-27 10:44:06 -05003421<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003422SkDrawLooper* getDrawLooper() const
3423</pre>
3424
Cary Clark4c06f5e2017-08-04 12:48:24 -04003425Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3426Does 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 -04003427
3428### Return Value
3429
Cary Clark4c06f5e2017-08-04 12:48:24 -04003430<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003431
3432### Example
3433
3434<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3435
3436#### Example Output
3437
3438~~~~
3439nullptr == draw looper
3440nullptr != draw looper
3441~~~~
3442
3443</fiddle-embed></div>
3444
3445---
3446
Cary Clark493df1f2017-08-25 13:14:33 -04003447<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003448## refDrawLooper
3449
Cary Clarka560c472017-11-27 10:44:06 -05003450<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003451sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003452</pre>
3453
Cary Clark4c06f5e2017-08-04 12:48:24 -04003454Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3455Increases <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 -04003456
3457### Return Value
3458
Cary Clark4c06f5e2017-08-04 12:48:24 -04003459<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003460
3461### Example
3462
3463<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3464
3465#### Example Output
3466
3467~~~~
3468draw looper unique: true
3469draw looper unique: false
3470~~~~
3471
3472</fiddle-embed></div>
3473
3474---
3475
Cary Clark493df1f2017-08-25 13:14:33 -04003476<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003477## getLooper
3478
Cary Clarka560c472017-11-27 10:44:06 -05003479<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003480SkDrawLooper* getLooper() const
3481</pre>
3482
Cary Clark12799e12017-07-28 15:18:29 -04003483---
3484
Cary Clark493df1f2017-08-25 13:14:33 -04003485<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003486## setDrawLooper
3487
Cary Clarka560c472017-11-27 10:44:06 -05003488<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003489void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003490</pre>
3491
Cary Clark6fc50412017-09-21 12:31:06 -04003492Sets <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
3493<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
3494drawing unaltered.
3495
3496Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003497
3498### Parameters
3499
Cary Clark8cc16c72017-08-25 11:51:49 -04003500<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003501iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003502 </tr>
3503</table>
3504
3505### Example
3506
3507<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3508
3509---
3510
Cary Clark493df1f2017-08-25 13:14:33 -04003511<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003512## setLooper
3513
Cary Clarka560c472017-11-27 10:44:06 -05003514<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003515void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003516</pre>
3517
Cary Clark12799e12017-07-28 15:18:29 -04003518---
3519
Cary Clark08895c42018-02-01 09:37:32 -05003520## <a name="Text_Align"></a> Text Align
Cary Clark12799e12017-07-28 15:18:29 -04003521
Cary Clark8cc16c72017-08-25 11:51:49 -04003522## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003523
Cary Clarka560c472017-11-27 10:44:06 -05003524<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003525 enum <a href="#SkPaint_Align">Align</a> {
3526 <a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3527 <a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3528 <a href="#SkPaint_kRight_Align">kRight Align</a>,
3529 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04003530
3531 static constexpr int <a href="#SkPaint_kAlignCount">kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05003532</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003533
Cary Clark8cc16c72017-08-25 11:51:49 -04003534<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clark2a8c48b2018-02-15 17:31:24 -05003535<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>,
3536<a href="SkCanvas_Reference#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="SkCanvas_Reference#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3537<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>,
3538and <a href="SkCanvas_Reference#SkCanvas_drawString">SkCanvas::drawString</a>;
3539as 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 -04003540
3541The text position is set by the font for both horizontal and vertical text.
3542Typically, for horizontal text, the position is to the left side of the glyph on the
3543base line; and for vertical text, the position is the horizontal center of the glyph
3544at the caps height.
3545
Cary Clark7cfcbca2018-01-04 16:11:51 -05003546<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 -04003547using the metrics returned by the font.
3548
Cary Clark8cc16c72017-08-25 11:51:49 -04003549<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003550
3551### Constants
3552
3553<table>
3554 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003555 <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.
3556</td>
Cary Clark12799e12017-07-28 15:18:29 -04003557 </tr>
3558 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003559 <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 -05003560half its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3561</td>
Cary Clark12799e12017-07-28 15:18:29 -04003562 </tr>
3563 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003564 <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 -05003565and by its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.
3566</td>
Cary Clark12799e12017-07-28 15:18:29 -04003567 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04003568 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003569 <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.
3570</td>
Cary Clark12799e12017-07-28 15:18:29 -04003571 </tr>
3572
Cary Clark06c20f32018-03-20 15:53:27 -04003573
Cary Clark12799e12017-07-28 15:18:29 -04003574
3575### Example
3576
Cary Clark1a8d7622018-03-05 13:26:16 -05003577<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
3578</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003579
3580### Example
3581
Cary Clark1a8d7622018-03-05 13:26:16 -05003582<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.
3583</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003584
Cary Clark493df1f2017-08-25 13:14:33 -04003585<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003586## getTextAlign
3587
Cary Clarka560c472017-11-27 10:44:06 -05003588<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003589Align getTextAlign() const
3590</pre>
3591
Cary Clark8cc16c72017-08-25 11:51:49 -04003592Returns <a href="#Text_Align">Text Align</a>.
3593Returns <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 -04003594
3595### Return Value
3596
3597text placement relative to position
3598
3599### Example
3600
3601<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3602
3603#### Example Output
3604
3605~~~~
3606kLeft_Align == default
3607~~~~
3608
3609</fiddle-embed></div>
3610
3611---
3612
Cary Clark493df1f2017-08-25 13:14:33 -04003613<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003614## setTextAlign
3615
Cary Clarka560c472017-11-27 10:44:06 -05003616<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003617void setTextAlign(Align align)
3618</pre>
3619
Cary Clark8cc16c72017-08-25 11:51:49 -04003620Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3621Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003622
3623### Parameters
3624
Cary Clark8cc16c72017-08-25 11:51:49 -04003625<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003626text placement relative to position</td>
3627 </tr>
3628</table>
3629
3630### Example
3631
Cary Clark4c06f5e2017-08-04 12:48:24 -04003632<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 -05003633alignment out of range has no effect.
3634</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003635
3636---
3637
Cary Clark08895c42018-02-01 09:37:32 -05003638## <a name="Text_Size"></a> Text Size
3639
Cary Clark8cc16c72017-08-25 11:51:49 -04003640<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3641<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3642<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003643Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003644
3645### Example
3646
3647<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3648
Cary Clark493df1f2017-08-25 13:14:33 -04003649<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003650## getTextSize
3651
Cary Clarka560c472017-11-27 10:44:06 -05003652<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003653SkScalar getTextSize() const
3654</pre>
3655
Cary Clark8cc16c72017-08-25 11:51:49 -04003656Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003657
3658### Return Value
3659
3660typographic height of text
3661
3662### Example
3663
3664<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3665
3666---
3667
Cary Clark493df1f2017-08-25 13:14:33 -04003668<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003669## setTextSize
3670
Cary Clarka560c472017-11-27 10:44:06 -05003671<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003672void setTextSize(SkScalar textSize)
3673</pre>
3674
Cary Clark8cc16c72017-08-25 11:51:49 -04003675Sets <a href="#Text_Size">Text Size</a> in points.
3676Has 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 -04003677
3678### Parameters
3679
Cary Clark8cc16c72017-08-25 11:51:49 -04003680<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003681typographic height of text</td>
3682 </tr>
3683</table>
3684
3685### Example
3686
3687<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3688
3689---
3690
Cary Clark08895c42018-02-01 09:37:32 -05003691## <a name="Text_Scale_X"></a> Text Scale X
3692
Cary Clark8cc16c72017-08-25 11:51:49 -04003693<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003694<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003695is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003696<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3697<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003698
3699### Example
3700
3701<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3702
Cary Clark493df1f2017-08-25 13:14:33 -04003703<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003704## getTextScaleX
3705
Cary Clarka560c472017-11-27 10:44:06 -05003706<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003707SkScalar getTextScaleX() const
3708</pre>
3709
Cary Clark8cc16c72017-08-25 11:51:49 -04003710Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003711Default value is 1.
3712
3713### Return Value
3714
3715text horizontal scale
3716
3717### Example
3718
3719<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3720
3721---
3722
Cary Clark493df1f2017-08-25 13:14:33 -04003723<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003724## setTextScaleX
3725
Cary Clarka560c472017-11-27 10:44:06 -05003726<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003727void setTextScaleX(SkScalar scaleX)
3728</pre>
3729
Cary Clark8cc16c72017-08-25 11:51:49 -04003730Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003731Default value is 1.
3732
3733### Parameters
3734
Cary Clark8cc16c72017-08-25 11:51:49 -04003735<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003736text horizontal scale</td>
3737 </tr>
3738</table>
3739
3740### Example
3741
3742<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3743
3744---
3745
Cary Clark08895c42018-02-01 09:37:32 -05003746## <a name="Text_Skew_X"></a> Text Skew X
3747
Cary Clark8cc16c72017-08-25 11:51:49 -04003748<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003749<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003750is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003751<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3752<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003753
3754### Example
3755
3756<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3757
Cary Clark493df1f2017-08-25 13:14:33 -04003758<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003759## getTextSkewX
3760
Cary Clarka560c472017-11-27 10:44:06 -05003761<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003762SkScalar getTextSkewX() const
3763</pre>
3764
Cary Clark8cc16c72017-08-25 11:51:49 -04003765Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003766Default value is zero.
3767
3768### Return Value
3769
3770additional shear in x-axis relative to y-axis
3771
3772### Example
3773
3774<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3775
3776---
3777
Cary Clark493df1f2017-08-25 13:14:33 -04003778<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003779## setTextSkewX
3780
Cary Clarka560c472017-11-27 10:44:06 -05003781<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003782void setTextSkewX(SkScalar skewX)
3783</pre>
3784
Cary Clark8cc16c72017-08-25 11:51:49 -04003785Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003786Default value is zero.
3787
3788### Parameters
3789
Cary Clark8cc16c72017-08-25 11:51:49 -04003790<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003791additional shear in x-axis relative to y-axis</td>
3792 </tr>
3793</table>
3794
3795### Example
3796
3797<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3798
3799---
3800
Cary Clark08895c42018-02-01 09:37:32 -05003801## <a name="Text_Encoding"></a> Text Encoding
Cary Clark12799e12017-07-28 15:18:29 -04003802
Cary Clark8cc16c72017-08-25 11:51:49 -04003803## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003804
Cary Clarka560c472017-11-27 10:44:06 -05003805<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003806 enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3807 <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3808 <a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3809 <a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3810 <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
3811 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003812</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003813
Cary Clark6fc50412017-09-21 12:31:06 -04003814<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003815size, 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 -04003816
Cary Clarka560c472017-11-27 10:44:06 -05003817Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003818All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003819in the total storage required.
3820
Cary Clark7cfcbca2018-01-04 16:11:51 -05003821<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 -04003822
Cary Clark7cfcbca2018-01-04 16:11:51 -05003823<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 -04003824
Cary Clark7cfcbca2018-01-04 16:11:51 -05003825<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 -04003826
Cary Clark7cfcbca2018-01-04 16:11:51 -05003827<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 -04003828A glyph index is a 16-bit word.
3829
Cary Clark8cc16c72017-08-25 11:51:49 -04003830<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 -04003831
3832### Constants
3833
3834<table>
3835 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003836 <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.
3837</td>
Cary Clark12799e12017-07-28 15:18:29 -04003838 </tr>
3839 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05003840 <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.
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_kUTF32_TextEncoding"> <code><strong>SkPaint::kUTF32_TextEncoding </strong></code> </a></td><td>2</td><td>Uses four byte words to represent all 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_kGlyphID_TextEncoding"> <code><strong>SkPaint::kGlyphID_TextEncoding </strong></code> </a></td><td>3</td><td>Uses two byte words to represent glyph indices.
3849</td>
Cary Clark12799e12017-07-28 15:18:29 -04003850 </tr>
3851
Cary Clark06c20f32018-03-20 15:53:27 -04003852
Cary Clark12799e12017-07-28 15:18:29 -04003853
3854### Example
3855
Cary Clarka560c472017-11-27 10:44:06 -05003856<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3857Second line is encoded in UTF-16.
3858Third line is encoded in UTF-32.
Cary Clark1a8d7622018-03-05 13:26:16 -05003859Fourth line has 16 bit glyph indices.
3860</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003861
Cary Clark493df1f2017-08-25 13:14:33 -04003862<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003863## getTextEncoding
3864
Cary Clarka560c472017-11-27 10:44:06 -05003865<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003866TextEncoding getTextEncoding() const
3867</pre>
3868
Cary Clark8cc16c72017-08-25 11:51:49 -04003869Returns <a href="#Text_Encoding">Text Encoding</a>.
3870<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 -04003871
3872### Return Value
3873
Cary Clark7cfcbca2018-01-04 16:11:51 -05003874one 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 -04003875<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003876
3877### Example
3878
skia-bookmaker525f9a92018-05-03 06:27:39 +00003879<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04003880
3881#### Example Output
3882
3883~~~~
3884kUTF8_TextEncoding == text encoding
3885kGlyphID_TextEncoding == text encoding
3886~~~~
3887
3888</fiddle-embed></div>
3889
3890---
3891
Cary Clark493df1f2017-08-25 13:14:33 -04003892<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003893## setTextEncoding
3894
Cary Clarka560c472017-11-27 10:44:06 -05003895<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003896void setTextEncoding(TextEncoding encoding)
3897</pre>
3898
Cary Clark7cfcbca2018-01-04 16:11:51 -05003899Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003900<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
3901Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003902
3903### Parameters
3904
Cary Clark8cc16c72017-08-25 11:51:49 -04003905<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003906one 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 -04003907<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003908 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04003909#
3910
Cary Clark12799e12017-07-28 15:18:29 -04003911</table>
3912
3913### Example
3914
3915<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
3916
3917#### Example Output
3918
3919~~~~
39204 != text encoding
3921~~~~
3922
3923</fiddle-embed></div>
3924
3925---
3926
Cary Clark08895c42018-02-01 09:37:32 -05003927## <a name="Font_Metrics"></a> Font Metrics
3928
Cary Clark2a8c48b2018-02-15 17:31:24 -05003929<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 -05003930The 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 -04003931<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04003932
Cary Clark4c06f5e2017-08-04 12:48:24 -04003933<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 -04003934X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
3935are positive.
3936Y-axis values above the baseline are negative, and below the baseline are positive.
3937
3938### Example
3939
Ben Wagnere5806492017-11-09 12:08:31 -05003940<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003941
Cary Clark8cc16c72017-08-25 11:51:49 -04003942# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04003943
Cary Clarka560c472017-11-27 10:44:06 -05003944<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003945 struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
3946 enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
3947 <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
3948 <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
3949 <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
3950 <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
3951 };
Cary Clark12799e12017-07-28 15:18:29 -04003952
Cary Clark186d08f2018-04-03 08:43:27 -04003953 uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
3954 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
3955 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
3956 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
3957 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
3958 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
3959 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
3960 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
3961 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
3962 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
3963 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
3964 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
3965 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
3966 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
3967 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
3968 <a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04003969
Cary Clark186d08f2018-04-03 08:43:27 -04003970 bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
3971 bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
3972 bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
3973 bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
3974 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003975</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003976
Cary Clark154beea2017-10-26 07:58:48 -04003977<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
3978computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
3979not available.
3980
Ben Wagnere5806492017-11-09 12:08:31 -05003981All vertical values relative to the baseline are given y-down. As such, zero is on the
3982baseline, negative values are above the baseline, and positive values are below the
3983baseline.
3984
Cary Clark154beea2017-10-26 07:58:48 -04003985<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
3986are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05003987
Cary Clark154beea2017-10-26 07:58:48 -04003988<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
3989are valid, since their value may be zero.
3990
Cary Clark8cc16c72017-08-25 11:51:49 -04003991## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04003992
Cary Clarka560c472017-11-27 10:44:06 -05003993<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark186d08f2018-04-03 08:43:27 -04003994 enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
3995 <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
3996 <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
3997 <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
3998 <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
3999 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004000</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004001
Cary Clark154beea2017-10-26 07:58:48 -04004002<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4003the underline or strikeout metric may be valid and zero.
4004Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4005
Cary Clark12799e12017-07-28 15:18:29 -04004006### Constants
4007
4008<table>
4009 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004010 <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.
4011</td>
Cary Clark12799e12017-07-28 15:18:29 -04004012 </tr>
4013 <tr>
Cary Clark1a8d7622018-03-05 13:26:16 -05004014 <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.
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_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.
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_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.
4023</td>
Cary Clark12799e12017-07-28 15:18:29 -04004024 </tr>
4025
Cary Clark06c20f32018-03-20 15:53:27 -04004026
Cary Clark12799e12017-07-28 15:18:29 -04004027
Cary Clark8cc16c72017-08-25 11:51:49 -04004028<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004029
Cary Clark8cc16c72017-08-25 11:51:49 -04004030<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004031
Cary Clark8cc16c72017-08-25 11:51:49 -04004032<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004033
Ben Wagnere5806492017-11-09 12:08:31 -05004034Greatest extent above the baseline for any glyph.
4035Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004036
Cary Clark8cc16c72017-08-25 11:51:49 -04004037<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004038
4039Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004040Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004041
Cary Clark8cc16c72017-08-25 11:51:49 -04004042<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004043
4044Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004045Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004046
Cary Clark8cc16c72017-08-25 11:51:49 -04004047<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004048
Ben Wagnere5806492017-11-09 12:08:31 -05004049Greatest extent below the baseline for any glyph.
4050Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004051
Cary Clark8cc16c72017-08-25 11:51:49 -04004052<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004053
4054Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004055Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004056
Cary Clark8cc16c72017-08-25 11:51:49 -04004057<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004058
4059Average character width, if it is available.
4060Zero if no average width is stored in the font.
4061
Cary Clark8cc16c72017-08-25 11:51:49 -04004062<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004063
4064Maximum character width.
4065
Cary Clark8cc16c72017-08-25 11:51:49 -04004066<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004067
Cary Clark2a8c48b2018-02-15 17:31:24 -05004068Minimum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004069Typically less than zero.
4070
Cary Clark8cc16c72017-08-25 11:51:49 -04004071<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004072
Cary Clark2a8c48b2018-02-15 17:31:24 -05004073Maximum bounding box x value for all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004074Typically greater than zero.
4075
Cary Clark8cc16c72017-08-25 11:51:49 -04004076<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004077
4078Height of a lower-case 'x'.
4079May be zero if no lower-case height is stored in the font.
4080
Cary Clark8cc16c72017-08-25 11:51:49 -04004081<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004082
4083Height of an upper-case letter.
4084May be zero if no upper-case height is stored in the font.
4085
Cary Clark8cc16c72017-08-25 11:51:49 -04004086<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004087
Ben Wagnere5806492017-11-09 12:08:31 -05004088Underline thickness.
4089
4090If 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 -04004091If <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 -04004092
Cary Clark8cc16c72017-08-25 11:51:49 -04004093<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004094
Ben Wagnere5806492017-11-09 12:08:31 -05004095Position of the top of the underline stroke relative to the baseline.
4096Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004097
Cary Clark8cc16c72017-08-25 11:51:49 -04004098If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4099If <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 -04004100
Cary Clark8cc16c72017-08-25 11:51:49 -04004101<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004102
Ben Wagnere5806492017-11-09 12:08:31 -05004103Strikeout thickness.
4104
4105If 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 -04004106If <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 -04004107
Cary Clark8cc16c72017-08-25 11:51:49 -04004108<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004109
Ben Wagnere5806492017-11-09 12:08:31 -05004110Position of the bottom of the strikeout stroke relative to the baseline.
4111Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004112
Cary Clark8cc16c72017-08-25 11:51:49 -04004113If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4114If <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 -04004115
Cary Clark493df1f2017-08-25 13:14:33 -04004116<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004117## hasUnderlineThickness
4118
Cary Clarka560c472017-11-27 10:44:06 -05004119<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004120bool hasUnderlineThickness(SkScalar* thickness) const
4121</pre>
4122
Ben Wagnere5806492017-11-09 12:08:31 -05004123If <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 -04004124<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,
4125return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004126
4127### Parameters
4128
Cary Clark8cc16c72017-08-25 11:51:49 -04004129<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004130storage for underline width</td>
4131 </tr>
4132</table>
4133
4134### Return Value
4135
4136true if font specifies underline width
4137
4138---
4139
Cary Clark493df1f2017-08-25 13:14:33 -04004140<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004141## hasUnderlinePosition
4142
Cary Clarka560c472017-11-27 10:44:06 -05004143<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004144bool hasUnderlinePosition(SkScalar* position) const
4145</pre>
4146
Ben Wagnere5806492017-11-09 12:08:31 -05004147If <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 -04004148<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,
4149return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004150
4151### Parameters
4152
Cary Clark8cc16c72017-08-25 11:51:49 -04004153<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4154storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004155 </tr>
4156</table>
4157
4158### Return Value
4159
Cary Clark8cc16c72017-08-25 11:51:49 -04004160true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004161
4162---
4163
Cary Clark493df1f2017-08-25 13:14:33 -04004164<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004165## hasStrikeoutThickness
4166
Cary Clarka560c472017-11-27 10:44:06 -05004167<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004168bool hasStrikeoutThickness(SkScalar* thickness) const
4169</pre>
4170
Ben Wagnere5806492017-11-09 12:08:31 -05004171If <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 -04004172<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,
4173return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004174
4175### Parameters
4176
Cary Clark8cc16c72017-08-25 11:51:49 -04004177<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004178storage for strikeout width</td>
4179 </tr>
4180</table>
4181
4182### Return Value
4183
4184true if font specifies strikeout width
4185
4186---
4187
Cary Clark493df1f2017-08-25 13:14:33 -04004188<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004189## hasStrikeoutPosition
4190
Cary Clarka560c472017-11-27 10:44:06 -05004191<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004192bool hasStrikeoutPosition(SkScalar* position) const
4193</pre>
4194
Ben Wagnere5806492017-11-09 12:08:31 -05004195If <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 -04004196<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,
4197return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004198
4199### Parameters
4200
Cary Clark8cc16c72017-08-25 11:51:49 -04004201<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4202storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004203 </tr>
4204</table>
4205
4206### Return Value
4207
Cary Clark8cc16c72017-08-25 11:51:49 -04004208true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004209
4210---
4211
Cary Clark493df1f2017-08-25 13:14:33 -04004212<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004213## getFontMetrics
4214
Cary Clarka560c472017-11-27 10:44:06 -05004215<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004216SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4217</pre>
4218
Cary Clark8cc16c72017-08-25 11:51:49 -04004219Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4220The 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 -04004221descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004222If <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>.
4223Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4224dimensions 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>,
4225<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4226Results 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 -04004227is ignored.
4228
4229### Parameters
4230
Cary Clark8cc16c72017-08-25 11:51:49 -04004231<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4232storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4233 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004234additional multiplier for returned values</td>
4235 </tr>
4236</table>
4237
4238### Return Value
4239
4240recommended spacing between lines
4241
4242### Example
4243
4244<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4245
4246### See Also
4247
Cary Clark8cc16c72017-08-25 11:51:49 -04004248<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 -04004249
4250---
4251
Cary Clark493df1f2017-08-25 13:14:33 -04004252<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004253## getFontSpacing
4254
Cary Clarka560c472017-11-27 10:44:06 -05004255<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004256SkScalar getFontSpacing() const
4257</pre>
4258
4259Returns the recommended spacing between lines: the sum of metrics
4260descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004261Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004262dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004263Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004264
4265### Return Value
4266
4267recommended spacing between lines
4268
4269### Example
4270
4271<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4272
4273#### Example Output
4274
4275~~~~
4276textSize: 12 fontSpacing: 13.9688
4277textSize: 18 fontSpacing: 20.9531
4278textSize: 24 fontSpacing: 27.9375
4279textSize: 32 fontSpacing: 37.25
4280~~~~
4281
4282</fiddle-embed></div>
4283
4284---
4285
Cary Clark493df1f2017-08-25 13:14:33 -04004286<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004287## getFontBounds
4288
Cary Clarka560c472017-11-27 10:44:06 -05004289<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004290SkRect getFontBounds() const
4291</pre>
4292
Cary Clark2a8c48b2018-02-15 17:31:24 -05004293Returns the union of bounds of all <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004294Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004295ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4296and <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 -04004297
Cary Clark8cc16c72017-08-25 11:51:49 -04004298If <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 -05004299returns 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 -04004300<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 -04004301
4302### Return Value
4303
Cary Clark2a8c48b2018-02-15 17:31:24 -05004304union of bounds of all <a href="undocumented#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004305
4306### Example
4307
4308<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4309
4310#### Example Output
4311
4312~~~~
4313metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4314font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4315~~~~
4316
4317</fiddle-embed></div>
4318
4319---
4320
Cary Clark493df1f2017-08-25 13:14:33 -04004321<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004322## textToGlyphs
4323
Cary Clarka560c472017-11-27 10:44:06 -05004324<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004325int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4326</pre>
4327
Cary Clark8cc16c72017-08-25 11:51:49 -04004328Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4329Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4330<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>.
4331<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004332
Cary Clarkbc5697d2017-10-04 14:31:33 -04004333Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004334
Cary Clark8cc16c72017-08-25 11:51:49 -04004335If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4336If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004337
Cary Clark8cc16c72017-08-25 11:51:49 -04004338If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004339<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004340
4341### Parameters
4342
Cary Clark8cc16c72017-08-25 11:51:49 -04004343<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004344character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004345 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004346length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004347 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004348storage for glyph indices; may be nullptr</td>
4349 </tr>
4350</table>
4351
4352### Return Value
4353
Cary Clark8cc16c72017-08-25 11:51:49 -04004354number 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 -04004355
4356### Example
4357
4358<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4359
4360---
4361
Cary Clark493df1f2017-08-25 13:14:33 -04004362<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004363## countText
4364
Cary Clarka560c472017-11-27 10:44:06 -05004365<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004366int countText(const void* text, size_t byteLength) const
4367</pre>
4368
Cary Clark2a8c48b2018-02-15 17:31:24 -05004369Returns the number of <a href="undocumented#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4370Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="undocumented#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004371Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004372
4373### Parameters
4374
Cary Clark8cc16c72017-08-25 11:51:49 -04004375<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004376character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004377 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004378length of character storage in bytes</td>
4379 </tr>
4380</table>
4381
4382### Return Value
4383
Cary Clark2a8c48b2018-02-15 17:31:24 -05004384number 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 -04004385
4386### Example
4387
4388<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4389
4390#### Example Output
4391
4392~~~~
4393count = 5
4394~~~~
4395
4396</fiddle-embed></div>
4397
4398---
4399
Cary Clark493df1f2017-08-25 13:14:33 -04004400<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004401## containsText
4402
Cary Clarka560c472017-11-27 10:44:06 -05004403<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004404bool containsText(const void* text, size_t byteLength) const
4405</pre>
4406
Cary Clark7cfcbca2018-01-04 16:11:51 -05004407Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004408Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004409<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004410
Cary Clark8cc16c72017-08-25 11:51:49 -04004411If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4412returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4413does 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 -04004414
Cary Clarkce101242017-09-01 15:51:02 -04004415Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004416
4417### Parameters
4418
Cary Clark8cc16c72017-08-25 11:51:49 -04004419<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004420array of characters or <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004421 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4422number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004423 </tr>
4424</table>
4425
4426### Return Value
4427
Cary Clark8cc16c72017-08-25 11:51:49 -04004428true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004429
4430### Example
4431
skia-bookmaker525f9a92018-05-03 06:27:39 +00004432<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 -05004433corresponding to the Unicode surrogate code point.
4434</div>
Cary Clark12799e12017-07-28 15:18:29 -04004435
4436#### Example Output
4437
4438~~~~
44390x00b0 == has char
44400xd800 != has char
4441~~~~
4442
4443</fiddle-embed></div>
4444
4445### Example
4446
skia-bookmaker525f9a92018-05-03 06:27:39 +00004447<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 -05004448that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.
4449</div>
Cary Clark12799e12017-07-28 15:18:29 -04004450
4451#### Example Output
4452
4453~~~~
44540x01ff == has glyph
44550x0000 != has glyph
44560xffff == has glyph
4457~~~~
4458
4459</fiddle-embed></div>
4460
4461### See Also
4462
Cary Clark8cc16c72017-08-25 11:51:49 -04004463<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004464
4465---
4466
Cary Clark493df1f2017-08-25 13:14:33 -04004467<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004468## glyphsToUnichars
4469
Cary Clarka560c472017-11-27 10:44:06 -05004470<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004471void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4472</pre>
4473
Cary Clark7cfcbca2018-01-04 16:11:51 -05004474Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4475<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004476Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004477by <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 -04004478
Cary Clark2a8c48b2018-02-15 17:31:24 -05004479Only supported on platforms that use FreeType as the <a href="undocumented#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004480
4481### Parameters
4482
Cary Clark8cc16c72017-08-25 11:51:49 -04004483<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004484array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004485 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004486length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004487 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004488storage for character codes, one per glyph</td>
4489 </tr>
4490</table>
4491
4492### Example
4493
Cary Clark1a8d7622018-03-05 13:26:16 -05004494<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.
4495</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004496
4497---
4498
Cary Clark08895c42018-02-01 09:37:32 -05004499## <a name="Measure_Text"></a> Measure Text
Cary Clark12799e12017-07-28 15:18:29 -04004500
Cary Clark493df1f2017-08-25 13:14:33 -04004501<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004502## measureText
4503
Cary Clarka560c472017-11-27 10:44:06 -05004504<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004505SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4506</pre>
4507
Cary Clark8cc16c72017-08-25 11:51:49 -04004508Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4509and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4510The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4511Uses <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,
4512and <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
4513<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4514Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4515The 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 -04004516
4517### Parameters
4518
Cary Clark8cc16c72017-08-25 11:51:49 -04004519<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004520character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004521 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4522number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4523 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004524returns bounding box relative to (0, 0) if not nullptr</td>
4525 </tr>
4526</table>
4527
4528### Return Value
4529
4530advance width or height
4531
4532### Example
4533
4534<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4535
4536---
4537
Cary Clark2dc84ad2018-01-26 12:56:22 -05004538<a name="SkPaint_measureText_2"></a>
4539
Cary Clarka560c472017-11-27 10:44:06 -05004540<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004541SkScalar measureText(const void* text, size_t length) const
4542</pre>
4543
Cary Clark8cc16c72017-08-25 11:51:49 -04004544Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4545and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4546The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4547Uses <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,
4548and <a href="#Text_Size">Text Size</a> to scale the metrics.
4549Does 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 -04004550
4551### Parameters
4552
Cary Clark8cc16c72017-08-25 11:51:49 -04004553<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004554character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004555 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4556number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004557 </tr>
4558</table>
4559
4560### Return Value
4561
4562advance width or height
4563
4564### Example
4565
4566<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4567
4568#### Example Output
4569
4570~~~~
4571default width = 5
4572double width = 10
4573~~~~
4574
4575</fiddle-embed></div>
4576
4577---
4578
Cary Clark493df1f2017-08-25 13:14:33 -04004579<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004580## breakText
4581
Cary Clarka560c472017-11-27 10:44:06 -05004582<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004583size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004584 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004585</pre>
4586
Cary Clark8cc16c72017-08-25 11:51:49 -04004587Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4588If <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
4589equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4590If <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
4591equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4592Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4593Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4594Uses <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,
4595and <a href="#Text_Size">Text Size</a> to scale the metrics.
4596Does 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 -04004597
4598### Parameters
4599
Cary Clark8cc16c72017-08-25 11:51:49 -04004600<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004601character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004602 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4603number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4604 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4605advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4606 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4607returns 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 -04004608 </tr>
4609</table>
4610
4611### Return Value
4612
Cary Clark8cc16c72017-08-25 11:51:49 -04004613bytes 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 -04004614
4615### Example
4616
Cary Clark4c06f5e2017-08-04 12:48:24 -04004617<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 -05004618<a href="undocumented#Line">Line</a> under "" shows measured width after breaking <a href="#SkPaint_breakText_text">text</a>.
4619</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004620
4621---
4622
Cary Clark493df1f2017-08-25 13:14:33 -04004623<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004624## getTextWidths
4625
Cary Clarka560c472017-11-27 10:44:06 -05004626<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4627int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004628</pre>
4629
Cary Clark8cc16c72017-08-25 11:51:49 -04004630Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4631the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4632Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4633If <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 -05004634if <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 -04004635If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4636If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4637Uses <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,
4638and <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>.
4639Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4640Does 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 -04004641
4642### Parameters
4643
Cary Clark8cc16c72017-08-25 11:51:49 -04004644<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004645character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004646 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4647number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4648 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4649returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4650 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4651returns <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 -04004652 </tr>
4653</table>
4654
4655### Return Value
4656
Cary Clark8cc16c72017-08-25 11:51:49 -04004657glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004658
4659### Example
4660
Cary Clark2a8c48b2018-02-15 17:31:24 -05004661<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 -05004662The underlines show the <a href="#SkPaint_getTextWidths_text">text</a> advance, spaced to keep them distinct.
4663</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004664
4665---
4666
Cary Clark08895c42018-02-01 09:37:32 -05004667## <a name="Text_Path"></a> Text Path
4668
Cary Clark2a8c48b2018-02-15 17:31:24 -05004669<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 -04004670
Cary Clark493df1f2017-08-25 13:14:33 -04004671<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004672## getTextPath
4673
Cary Clarka560c472017-11-27 10:44:06 -05004674<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4675void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004676</pre>
4677
Cary Clark8cc16c72017-08-25 11:51:49 -04004678Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4679Uses <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,
4680and <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.
4681All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4682Uses <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 -04004683
4684### Parameters
4685
Cary Clark8cc16c72017-08-25 11:51:49 -04004686<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004687character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004688 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4689number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4690 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004691<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 -04004692 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004693<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 -04004694 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004695geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004696 </tr>
4697</table>
4698
4699### Example
4700
Cary Clark4c06f5e2017-08-04 12:48:24 -04004701<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 -05004702the offset location. The result is rendered with one draw call.
4703</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004704
4705---
4706
Cary Clark493df1f2017-08-25 13:14:33 -04004707<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004708## getPosTextPath
4709
Cary Clarka560c472017-11-27 10:44:06 -05004710<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4711void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004712</pre>
4713
Cary Clark8cc16c72017-08-25 11:51:49 -04004714Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4715Uses <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,
4716and <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.
4717All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4718Uses <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>.
4719<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004720
4721### Parameters
4722
Cary Clark8cc16c72017-08-25 11:51:49 -04004723<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004724character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004725 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4726number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4727 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004728positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004729 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004730geometry of the <a href="undocumented#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004731 </tr>
4732</table>
4733
4734### Example
4735
Cary Clark1a8d7622018-03-05 13:26:16 -05004736<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three <a href="undocumented#Glyph">Glyphs</a> to eliminate overlaps, and strokes the result.
4737</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004738
4739---
4740
Cary Clark08895c42018-02-01 09:37:32 -05004741## <a name="Text_Intercepts"></a> Text Intercepts
4742
Cary Clark2a8c48b2018-02-15 17:31:24 -05004743<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 -04004744of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004745underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004746
Cary Clark493df1f2017-08-25 13:14:33 -04004747<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004748## getTextIntercepts
4749
Cary Clarka560c472017-11-27 10:44:06 -05004750<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004751int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4752 const SkScalar bounds[2], SkScalar* intervals) const
4753</pre>
4754
Cary Clark8cc16c72017-08-25 11:51:49 -04004755Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4756<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 -05004757The 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 -05004758the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004759Uses <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,
4760and <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.
4761Uses <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 +00004762
Cary Clark8cc16c72017-08-25 11:51:49 -04004763Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004764
Cary Clark8cc16c72017-08-25 11:51:49 -04004765<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004766
4767### Parameters
4768
Cary Clark8cc16c72017-08-25 11:51:49 -04004769<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004770character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004771 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4772number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4773 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004774<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 -04004775 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004776<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 -04004777 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004778lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004779 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004780returned intersections; may be nullptr</td>
4781 </tr>
4782</table>
4783
4784### Return Value
4785
4786number of intersections; may be zero
4787
4788### Example
4789
Cary Clark1a8d7622018-03-05 13:26:16 -05004790<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
4791</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004792
4793---
4794
Cary Clark493df1f2017-08-25 13:14:33 -04004795<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004796## getPosTextIntercepts
4797
Cary Clarka560c472017-11-27 10:44:06 -05004798<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004799int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4800 const SkScalar bounds[2], SkScalar* intervals) const
4801</pre>
4802
Cary Clark8cc16c72017-08-25 11:51:49 -04004803Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4804<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 -05004805The 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 -05004806the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004807Uses <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,
4808and <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.
4809Uses <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 +00004810
Cary Clark8cc16c72017-08-25 11:51:49 -04004811Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004812
Cary Clark8cc16c72017-08-25 11:51:49 -04004813<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004814
4815### Parameters
4816
Cary Clark8cc16c72017-08-25 11:51:49 -04004817<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004818character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004819 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4820number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4821 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004822positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004823 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004824lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004825 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004826returned intersections; may be nullptr</td>
4827 </tr>
4828</table>
4829
4830### Return Value
4831
Cary Clarka523d2d2017-08-30 08:58:10 -04004832number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004833
4834### Example
4835
Cary Clark1a8d7622018-03-05 13:26:16 -05004836<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.
4837</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004838
4839---
4840
Cary Clark493df1f2017-08-25 13:14:33 -04004841<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004842## getPosTextHIntercepts
4843
Cary Clarka560c472017-11-27 10:44:06 -05004844<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4845int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4846 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004847</pre>
4848
Cary Clark8cc16c72017-08-25 11:51:49 -04004849Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4850<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 -05004851The 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 -05004852the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004853Uses <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,
4854and <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.
4855Uses <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 +00004856
Cary Clark8cc16c72017-08-25 11:51:49 -04004857Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004858
Cary Clark8cc16c72017-08-25 11:51:49 -04004859<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004860
4861### Parameters
4862
Cary Clark8cc16c72017-08-25 11:51:49 -04004863<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004864character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004865 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4866number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4867 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004868positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004869 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004870position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004871 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004872lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004873 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004874returned intersections; may be nullptr</td>
4875 </tr>
4876</table>
4877
4878### Return Value
4879
4880number of intersections; may be zero
4881
4882### Example
4883
Cary Clark1a8d7622018-03-05 13:26:16 -05004884<div><fiddle-embed name="dc9851c43acc3716aca8c9a4d40d452d"><div><a href="undocumented#Text">Text</a> intercepts do not take stroke thickness into consideration.
4885</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004886
4887---
4888
Cary Clark493df1f2017-08-25 13:14:33 -04004889<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004890## getTextBlobIntercepts
4891
Cary Clarka560c472017-11-27 10:44:06 -05004892<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4893int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004894</pre>
4895
Cary Clark8cc16c72017-08-25 11:51:49 -04004896Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4897<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clark2a8c48b2018-02-15 17:31:24 -05004898The 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 -05004899the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004900Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04004901and <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 -04004902Uses 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 +00004903
Cary Clark3cd22cc2017-12-01 11:49:58 -05004904<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
4905
Cary Clark8cc16c72017-08-25 11:51:49 -04004906Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004907
Cary Clark8cc16c72017-08-25 11:51:49 -04004908<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004909
4910### Parameters
4911
Cary Clark8cc16c72017-08-25 11:51:49 -04004912<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clark2a8c48b2018-02-15 17:31:24 -05004913<a href="undocumented#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004914 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004915lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004916 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004917returned intersections; may be nullptr</td>
4918 </tr>
4919</table>
4920
4921### Return Value
4922
4923number of intersections; may be zero
4924
4925### Example
4926
skia-bookmaker525f9a92018-05-03 06:27:39 +00004927<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004928
4929---
4930
Cary Clark493df1f2017-08-25 13:14:33 -04004931<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004932## nothingToDraw
4933
Cary Clarka560c472017-11-27 10:44:06 -05004934<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004935bool nothingToDraw() const
4936</pre>
4937
Cary Clark8cc16c72017-08-25 11:51:49 -04004938Returns true if <a href="#Paint">Paint</a> prevents all drawing;
4939otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004940
Cary Clark2d4bf5f2018-04-16 08:37:38 -04004941Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="SkColor_Reference#Alpha">Color Alpha</a> computes a
4942new <a href="SkColor_Reference#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004943
4944### Return Value
4945
Cary Clark8cc16c72017-08-25 11:51:49 -04004946true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004947
4948### Example
4949
skia-bookmaker525f9a92018-05-03 06:27:39 +00004950<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04004951
4952#### Example Output
4953
4954~~~~
4955initial nothing to draw: false
4956blend dst nothing to draw: true
4957blend src over nothing to draw: false
4958alpha 0 nothing to draw: true
4959~~~~
4960
4961</fiddle-embed></div>
4962
4963---
4964
Cary Clark08895c42018-02-01 09:37:32 -05004965## <a name="Fast_Bounds"></a> Fast Bounds
4966
Cary Clark8cc16c72017-08-25 11:51:49 -04004967<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
4968<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04004969
Cary Clark493df1f2017-08-25 13:14:33 -04004970<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004971## canComputeFastBounds
4972
Cary Clarka560c472017-11-27 10:44:06 -05004973<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004974bool canComputeFastBounds() const
4975</pre>
4976
Cary Clark8cc16c72017-08-25 11:51:49 -04004977Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
4978to 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 -04004979always returns false.
4980
4981### Return Value
4982
Cary Clark8cc16c72017-08-25 11:51:49 -04004983true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04004984
4985---
4986
Cary Clark493df1f2017-08-25 13:14:33 -04004987<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004988## computeFastBounds
4989
Cary Clarka560c472017-11-27 10:44:06 -05004990<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004991const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
4992</pre>
4993
Cary Clark8cc16c72017-08-25 11:51:49 -04004994Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04004995raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04004996effects 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 -04004997parameter. It returns the adjusted bounds that can then be used
Cary Clark2a8c48b2018-02-15 17:31:24 -05004998for <a href="SkCanvas_Reference#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04004999
Cary Clarkbc5697d2017-10-04 14:31:33 -04005000The 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 -04005001should 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 -04005002use 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 -04005003<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005004
5005### Parameters
5006
Cary Clark8cc16c72017-08-25 11:51:49 -04005007<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5008geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5009 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005010computed bounds of geometry; may not be nullptr</td>
5011 </tr>
5012</table>
5013
5014### Return Value
5015
5016fast computed bounds
5017
5018---
5019
Cary Clark493df1f2017-08-25 13:14:33 -04005020<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005021## computeFastStrokeBounds
5022
Cary Clarka560c472017-11-27 10:44:06 -05005023<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005024const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5025</pre>
5026
5027### Parameters
5028
Cary Clark8cc16c72017-08-25 11:51:49 -04005029<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5030geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5031 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005032computed bounds of geometry</td>
5033 </tr>
5034</table>
5035
5036### Return Value
5037
5038fast computed bounds
5039
5040---
5041
Cary Clark493df1f2017-08-25 13:14:33 -04005042<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005043## doComputeFastBounds
5044
Cary Clarka560c472017-11-27 10:44:06 -05005045<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5046const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005047</pre>
5048
Cary Clarkce101242017-09-01 15:51:02 -04005049Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5050account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5051altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005052
5053### Parameters
5054
Cary Clark8cc16c72017-08-25 11:51:49 -04005055<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5056geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5057 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005058computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005059 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5060overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005061 </tr>
5062</table>
5063
5064### Return Value
5065
5066fast computed bounds
5067
5068---
5069
Cary Clark78de7512018-02-07 07:27:09 -05005070## <a name="Utility"></a> Utility
5071
5072| name | description |
5073| --- | --- |
Cary Clark2a8c48b2018-02-15 17:31:24 -05005074| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="undocumented#Glyph">Glyphs</a> |
5075| <a href="#SkPaint_countText">countText</a> | returns number of <a href="undocumented#Glyph">Glyphs</a> in text |
5076| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="undocumented#Glyph">Glyphs</a> into text |
Cary Clark78de7512018-02-07 07:27:09 -05005077| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
5078| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
5079| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
5080
Cary Clark493df1f2017-08-25 13:14:33 -04005081<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005082## toString
5083
Cary Clarka560c472017-11-27 10:44:06 -05005084<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark2dc84ad2018-01-26 12:56:22 -05005085void toString(SkString* str) const
Cary Clark12799e12017-07-28 15:18:29 -04005086</pre>
5087
Cary Clarkce101242017-09-01 15:51:02 -04005088Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
Update Docs485dc862018-04-06 06:23:24 +00005089internal debugging tools.
Cary Clark12799e12017-07-28 15:18:29 -04005090
5091### Parameters
5092
Cary Clark8cc16c72017-08-25 11:51:49 -04005093<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005094storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005095 </tr>
5096</table>
5097
5098### Example
5099
5100<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5101
5102#### Example Output
5103
5104~~~~
5105text size = 12
5106~~~~
5107
5108</fiddle-embed></div>
5109
Cary Clark2ade9972017-11-02 17:49:34 -04005110### See Also
5111
Cary Clark2a8c48b2018-02-15 17:31:24 -05005112<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 -04005113
Cary Clark12799e12017-07-28 15:18:29 -04005114---
5115