blob: b9df684befa40ff1610efe1ce3f9f5cb0c6b8302 [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 Clark4855f782018-02-06 09:41:53 -05008## <a name="Subtopic"></a> 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 |
14| <a href="#Constructor">Constructor</a> | functions that construct <a href="SkPaint_Reference#SkPaint">SkPaint</a> |
15| <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
21options outside of the <a href="#Clip">Canvas Clip</a> and <a href="#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| --- | --- |
50| <a href="#Alpha_Methods">Alpha Methods</a> | get and set <a href="#Alpha">Alpha</a> |
Cary Clark5081eed2018-01-22 07:55:48 -050051| Anti-alias | approximating coverage with transparency |
52| <a href="#Automatic_Hinting">Automatic Hinting</a> | always adjust glyph paths |
53| <a href="#Blend_Mode_Methods">Blend Mode Methods</a> | get and set <a href="undocumented#Blend_Mode">Blend Mode</a> |
54| <a href="#Color_Filter_Methods">Color Filter Methods</a> | get and set <a href="undocumented#Color_Filter">Color Filter</a> |
55| <a href="#Color_Methods">Color Methods</a> | get and set <a href="undocumented#Color">Color</a> |
Cary Clark5081eed2018-01-22 07:55:48 -050056| <a href="#Device_Text">Device Text</a> | increase precision of glyph position |
57| <a href="#Dither">Dither</a> | distributing color error |
58| <a href="#Draw_Looper_Methods">Draw Looper Methods</a> | get and set <a href="undocumented#Draw_Looper">Draw Looper</a> |
59| <a href="#Fake_Bold">Fake Bold</a> | approximate font styles |
60| <a href="#Fast_Bounds">Fast Bounds</a> | approximate area required by <a href="#Paint">Paint</a> |
Cary Clark08895c42018-02-01 09:37:32 -050061| Fill | fill and stroke |
Cary Clark5081eed2018-01-22 07:55:48 -050062| <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 |
63| <a href="#Filter_Quality_Methods">Filter Quality Methods</a> | get and set <a href="undocumented#Filter_Quality">Filter Quality</a> |
64| <a href="#SkPaint_Flags">Flags</a> | attributes represented by single bits |
65| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | custom sized bitmap <a href="#Glyph">Glyphs</a> |
66| <a href="#Font_Metrics">Font Metrics</a> | common glyph dimensions |
67| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | glyph spacing affected by hinting |
Cary Clark08895c42018-02-01 09:37:32 -050068| <a href="#Hairline">Hairline</a> | lines and curves with minimal width |
Cary Clark5081eed2018-01-22 07:55:48 -050069| <a href="#SkPaint_Hinting">Hinting</a> | glyph outline adjustment |
70| <a href="#Image_Filter_Methods">Image Filter Methods</a> | get and set <a href="undocumented#Image_Filter">Image Filter</a> |
71| <a href="#Initializers">Initializers</a> | constructors and initialization |
Cary Clark08895c42018-02-01 09:37:32 -050072| <a href="SkPaint_Reference#LCD_Text">LCD Text</a> | text relying on the order of <a href="#RGB">Color RGB</a> stripes |
73| <a href="SkPaint_Reference#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 -050074| <a href="#Management">Management</a> | paint copying, moving, comparing |
75| <a href="#Mask_Filter_Methods">Mask Filter Methods</a> | get and set <a href="undocumented#Mask_Filter">Mask Filter</a> |
76| <a href="#Measure_Text">Measure Text</a> | width, height, bounds of text |
77| <a href="#Miter_Limit">Miter Limit</a> | maximum length of stroked corners |
78| <a href="#Path_Effect_Methods">Path Effect Methods</a> | get and set <a href="undocumented#Path_Effect">Path Effect</a> |
79| <a href="#Shader_Methods">Shader Methods</a> | get and set <a href="undocumented#Shader">Shader</a> |
Cary Clark08895c42018-02-01 09:37:32 -050080| Stroke | lines and curves with width |
Cary Clark5081eed2018-01-22 07:55:48 -050081| <a href="#Stroke_Cap">Stroke Cap</a> | decorations at ends of open strokes |
82| <a href="#Stroke_Join">Stroke Join</a> | decoration at corners of strokes |
83| <a href="#Stroke_Width">Stroke Width</a> | thickness perpendicular to geometry |
84| <a href="#SkPaint_Style">Style</a> | geometry filling, stroking |
Cary Clark08895c42018-02-01 09:37:32 -050085| <a href="SkPaint_Reference#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 |
87| <a href="#Text_Encoding">Text Encoding</a> | text encoded as characters or <a href="#Glyph">Glyphs</a> |
88| <a href="#Text_Intercepts">Text Intercepts</a> | advanced underline, strike through |
89| <a href="#Text_Path">Text Path</a> | geometry of <a href="#Glyph">Glyphs</a> |
90| <a href="#Text_Scale_X">Text Scale X</a> | text horizontal scale |
91| <a href="#Text_Size">Text Size</a> | overall height in points |
92| <a href="#Text_Skew_X">Text Skew X</a> | text horizontal slant |
93| <a href="#Typeface_Methods">Typeface Methods</a> | get and set <a href="undocumented#Typeface">Typeface</a> |
Cary Clark78de7512018-02-07 07:27:09 -050094| <a href="#Utility">Utility</a> | rarely called management functions |
Cary Clark5081eed2018-01-22 07:55:48 -050095| <a href="#Vertical_Text">Vertical Text</a> | orient text from top to bottom |
Cary Clark12799e12017-07-28 15:18:29 -040096
Cary Clark4855f782018-02-06 09:41:53 -050097## <a name="Constant"></a> Constant
Cary Clark12799e12017-07-28 15:18:29 -040098
Cary Clark5081eed2018-01-22 07:55:48 -050099| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500100| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500101| <a href="#SkPaint_Align">Align</a> | glyph locations relative to text position |
102| <a href="#SkPaint_Cap">Cap</a> | start and end geometry on stroked shapes |
103| <a href="#SkPaint_Flags">Flags</a> | values described by bits and masks |
Cary Clark5081eed2018-01-22 07:55:48 -0500104| <a href="#SkPaint_Hinting">Hinting</a> | level of glyph outline adjustment |
105| <a href="#SkPaint_Join">Join</a> | corner geometry on stroked shapes |
106| <a href="#SkPaint_Style">Style</a> | stroke, fill, or both |
107| <a href="#SkPaint_TextEncoding">TextEncoding</a> | character or glyph encoded size |
Cary Clark08895c42018-02-01 09:37:32 -0500108| _anonymous | number of <a href="#SkPaint_Style">Style</a> defines |
109| _anonymous_2 | number of <a href="#Text_Align">Text Align</a> values |
Cary Clark12799e12017-07-28 15:18:29 -0400110
Cary Clark4855f782018-02-06 09:41:53 -0500111## <a name="Class_or_Struct"></a> Class or Struct
Cary Clark12799e12017-07-28 15:18:29 -0400112
Cary Clark5081eed2018-01-22 07:55:48 -0500113| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500114| --- | --- |
115| <a href="#SkPaint_FontMetrics">FontMetrics</a> | values computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a> |
Cary Clark12799e12017-07-28 15:18:29 -0400116
Cary Clark4855f782018-02-06 09:41:53 -0500117## <a name="Constructor"></a> Constructor
Cary Clark12799e12017-07-28 15:18:29 -0400118
Cary Clark5081eed2018-01-22 07:55:48 -0500119| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500120| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500121| <a href="#SkPaint_empty_constructor">SkPaint()</a> | constructs with default values |
122| <a href="#SkPaint_move_SkPaint">SkPaint(SkPaint&& paint)</a> | moves paint without copying it |
123| <a href="#SkPaint_copy_const_SkPaint">SkPaint(const SkPaint& paint)</a> | makes a shallow copy |
Cary Clark08895c42018-02-01 09:37:32 -0500124| <a href="#SkPaint_destructor">~SkPaint()</a> | decreases <a href="undocumented#Reference_Count">Reference Count</a> of owned objects |
Cary Clark12799e12017-07-28 15:18:29 -0400125
Cary Clark4855f782018-02-06 09:41:53 -0500126## <a name="Operator"></a> Operator
Cary Clark12799e12017-07-28 15:18:29 -0400127
Cary Clark5081eed2018-01-22 07:55:48 -0500128| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500129| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500130| <a href="#SkPaint_notequal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | compares paints for inequality |
131| <a href="#SkPaint_move_operator">operator=(SkPaint&& paint)</a> | moves paint without copying it |
132| <a href="#SkPaint_copy_operator">operator=(const SkPaint& paint)</a> | makes a shallow copy |
133| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | compares paints for equality |
Cary Clark12799e12017-07-28 15:18:29 -0400134
Cary Clark4855f782018-02-06 09:41:53 -0500135## <a name="Member_Function"></a> Member Function
Cary Clark12799e12017-07-28 15:18:29 -0400136
Cary Clark5081eed2018-01-22 07:55:48 -0500137| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500138| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500139| <a href="#SkPaint_breakText">breakText</a> | returns text that fits in a width |
140| <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> | returns true if settings allow for fast bounds computation |
141| <a href="#SkPaint_computeFastBounds">computeFastBounds</a> | returns fill bounds for quick reject tests |
142| <a href="#SkPaint_computeFastStrokeBounds">computeFastStrokeBounds</a> | returns stroke bounds for quick reject tests |
143| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="#Glyph">Glyphs</a> |
144| <a href="#SkPaint_countText">countText</a> | returns number of <a href="#Glyph">Glyphs</a> in text |
145| <a href="#SkPaint_doComputeFastBounds">doComputeFastBounds</a> | returns bounds for quick reject tests |
146| <a href="#SkPaint_flatten">flatten</a> | serializes into a buffer |
147| <a href="#SkPaint_getAlpha">getAlpha</a> | returns <a href="#Alpha">Color Alpha</a>, color opacity |
148| <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> |
149| <a href="#SkPaint_getColor">getColor</a> | returns <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color |
150| <a href="#SkPaint_getColorFilter">getColorFilter</a> | returns <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered |
151| <a href="#SkPaint_getDrawLooper">getDrawLooper</a> | returns <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
152| <a href="#SkPaint_getFillPath">getFillPath</a> | returns fill path equivalent to stroke |
153| <a href="#SkPaint_getFilterQuality">getFilterQuality</a> | returns <a href="undocumented#Filter_Quality">Filter Quality</a>, image filtering level |
154| <a href="#SkPaint_getFlags">getFlags</a> | returns <a href="#SkPaint_Flags">Flags</a> stored in a bit field |
155| <a href="#SkPaint_getFontBounds">getFontBounds</a> | returns union all glyph bounds |
156| <a href="#SkPaint_getFontMetrics">getFontMetrics</a> | returns <a href="undocumented#Typeface">Typeface</a> metrics scaled by text size |
157| <a href="#SkPaint_getFontSpacing">getFontSpacing</a> | returns recommended spacing between lines |
158| <a href="#SkPaint_getHash">getHash</a> | returns a shallow hash for equality checks |
159| <a href="#SkPaint_getHinting">getHinting</a> | returns <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level |
160| <a href="#SkPaint_getImageFilter">getImageFilter</a> | returns <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur |
161| <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> |
162| <a href="#SkPaint_getPathEffect">getPathEffect</a> | returns <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
163| <a href="#SkPaint_getPosTextHIntercepts">getPosTextHIntercepts</a> | returns where lines intersect horizontally positioned text; underlines |
164| <a href="#SkPaint_getPosTextIntercepts">getPosTextIntercepts</a> | returns where lines intersect positioned text; underlines |
165| <a href="#SkPaint_getPosTextPath">getPosTextPath</a> | returns <a href="SkPath_Reference#Path">Path</a> equivalent to positioned text |
166| <a href="#SkPaint_getShader">getShader</a> | returns <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
167| <a href="#SkPaint_getStrokeCap">getStrokeCap</a> | returns <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends |
168| <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a> | returns <a href="#SkPaint_Join">Join</a>, geometry on path corners |
169| <a href="#SkPaint_getStrokeMiter">getStrokeMiter</a> | returns <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners |
170| <a href="#SkPaint_getStrokeWidth">getStrokeWidth</a> | returns thickness of the stroke |
171| <a href="#SkPaint_getStyle">getStyle</a> | returns <a href="#SkPaint_Style">Style</a>: stroke, fill, or both |
172| <a href="#SkPaint_getTextAlign">getTextAlign</a> | returns <a href="#SkPaint_Align">Align</a>: left, center, or right |
173| <a href="#SkPaint_getTextBlobIntercepts">getTextBlobIntercepts</a> | returns where lines intersect <a href="undocumented#Text_Blob">Text Blob</a>; underlines |
174| <a href="#SkPaint_getTextEncoding">getTextEncoding</a> | returns character or glyph encoded size |
175| <a href="#SkPaint_getTextIntercepts">getTextIntercepts</a> | returns where lines intersect text; underlines |
176| <a href="#SkPaint_getTextPath">getTextPath</a> | returns <a href="SkPath_Reference#Path">Path</a> equivalent to text |
177| <a href="#SkPaint_getTextScaleX">getTextScaleX</a> | returns the text horizontal scale; condensed text |
178| <a href="#SkPaint_getTextSize">getTextSize</a> | returns text size in points |
179| <a href="#SkPaint_getTextSkewX">getTextSkewX</a> | returns the text horizontal skew; oblique text |
180| <a href="#SkPaint_getTextWidths">getTextWidths</a> | returns advance and bounds for each glyph in text |
181| <a href="#SkPaint_getTypeface">getTypeface</a> | returns <a href="undocumented#Typeface">Typeface</a>, font description |
182| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="#Glyph">Glyphs</a> into text |
183| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | returns true if Anti-alias is set |
184| <a href="#SkPaint_isAutohinted">isAutohinted</a> | returns true if <a href="#Glyph">Glyphs</a> are always hinted |
185| <a href="#SkPaint_isDevKernText">isDevKernText</a> | returns true if <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is set |
186| <a href="#SkPaint_isDither">isDither</a> | returns true if <a href="#Dither">Dither</a> is set |
187| <a href="#SkPaint_isEmbeddedBitmapText">isEmbeddedBitmapText</a> | returns true if <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is set |
188| <a href="#SkPaint_isFakeBoldText">isFakeBoldText</a> | returns true if <a href="#Fake_Bold">Fake Bold</a> is set |
189| <a href="#SkPaint_isLCDRenderText">isLCDRenderText</a> | returns true if <a href="SkPaint_Reference#LCD_Text">LCD Text</a> is set |
Cary Clark08895c42018-02-01 09:37:32 -0500190| <a href="#SkPaint_isLinearText">isLinearText</a> | returns true if text is converted to <a href="SkPath_Reference#Path">Path</a> |
Cary Clark5081eed2018-01-22 07:55:48 -0500191| <a href="#SkPaint_isSrcOver">isSrcOver</a> | returns true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
192| <a href="#SkPaint_isSubpixelText">isSubpixelText</a> | returns true if <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is set |
193| <a href="#SkPaint_isVerticalText">isVerticalText</a> | returns true if <a href="#Vertical_Text">Vertical Text</a> is set |
194| <a href="#SkPaint_measureText">measureText</a> | returns advance width and bounds of text |
195| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
196| <a href="#SkPaint_refColorFilter">refColorFilter</a> | references <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered |
197| <a href="#SkPaint_refDrawLooper">refDrawLooper</a> | references <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
198| <a href="#SkPaint_refImageFilter">refImageFilter</a> | references <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur |
199| <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> |
200| <a href="#SkPaint_refPathEffect">refPathEffect</a> | references <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
201| <a href="#SkPaint_refShader">refShader</a> | references <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
202| <a href="#SkPaint_refTypeface">refTypeface</a> | references <a href="undocumented#Typeface">Typeface</a>, font description |
203| <a href="#SkPaint_reset">reset</a> | sets to default values |
204| <a href="#SkPaint_setARGB">setARGB</a> | sets color by component |
205| <a href="#SkPaint_setAlpha">setAlpha</a> | sets <a href="#Alpha">Color Alpha</a>, color opacity |
206| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | sets or clears Anti-alias |
207| <a href="#SkPaint_setAutohinted">setAutohinted</a> | sets <a href="#Glyph">Glyphs</a> to always be hinted |
208| <a href="#SkPaint_setBlendMode">setBlendMode</a> | sets <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with destination |
209| <a href="#SkPaint_setColor">setColor</a> | sets <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color |
210| <a href="#SkPaint_setColorFilter">setColorFilter</a> | sets <a href="undocumented#Color_Filter">Color Filter</a>, alters color |
211| <a href="#SkPaint_setDevKernText">setDevKernText</a> | sets or clears <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> |
212| <a href="#SkPaint_setDither">setDither</a> | sets or clears <a href="#Dither">Dither</a> |
213| <a href="#SkPaint_setDrawLooper">setDrawLooper</a> | sets <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
214| <a href="#SkPaint_setEmbeddedBitmapText">setEmbeddedBitmapText</a> | sets or clears <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> |
215| <a href="#SkPaint_setFakeBoldText">setFakeBoldText</a> | sets or clears <a href="#Fake_Bold">Fake Bold</a> |
216| <a href="#SkPaint_setFilterQuality">setFilterQuality</a> | sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level |
217| <a href="#SkPaint_setFlags">setFlags</a> | sets multiple <a href="#SkPaint_Flags">Flags</a> in a bit field |
218| <a href="#SkPaint_setHinting">setHinting</a> | sets <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level |
219| <a href="#SkPaint_setImageFilter">setImageFilter</a> | sets <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur |
220| <a href="#SkPaint_setLCDRenderText">setLCDRenderText</a> | sets or clears <a href="SkPaint_Reference#LCD_Text">LCD Text</a> |
Cary Clark08895c42018-02-01 09:37:32 -0500221| <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 -0500222| <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> |
223| <a href="#SkPaint_setPathEffect">setPathEffect</a> | sets <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
224| <a href="#SkPaint_setShader">setShader</a> | sets <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
225| <a href="#SkPaint_setStrokeCap">setStrokeCap</a> | sets <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends |
226| <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a> | sets <a href="#SkPaint_Join">Join</a>, geometry on path corners |
227| <a href="#SkPaint_setStrokeMiter">setStrokeMiter</a> | sets <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners |
228| <a href="#SkPaint_setStrokeWidth">setStrokeWidth</a> | sets thickness of the stroke |
229| <a href="#SkPaint_setStyle">setStyle</a> | sets <a href="#SkPaint_Style">Style</a>: stroke, fill, or both |
230| <a href="#SkPaint_setSubpixelText">setSubpixelText</a> | sets or clears <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> |
231| <a href="#SkPaint_setTextAlign">setTextAlign</a> | sets <a href="#SkPaint_Align">Align</a>: left, center, or right |
232| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | sets character or glyph encoded size |
233| <a href="#SkPaint_setTextScaleX">setTextScaleX</a> | sets the text horizontal scale; condensed text |
234| <a href="#SkPaint_setTextSize">setTextSize</a> | sets text size in points |
235| <a href="#SkPaint_setTextSkewX">setTextSkewX</a> | sets the text horizontal skew; oblique text |
236| <a href="#SkPaint_setTypeface">setTypeface</a> | sets <a href="undocumented#Typeface">Typeface</a>, font description |
237| <a href="#SkPaint_setVerticalText">setVerticalText</a> | sets or clears <a href="#Vertical_Text">Vertical Text</a> |
238| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
239| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
240| <a href="#SkPaint_unflatten">unflatten</a> | populates from a serialized stream |
Cary Clark12799e12017-07-28 15:18:29 -0400241
Cary Clark08895c42018-02-01 09:37:32 -0500242## <a name="Initializers"></a> Initializers
Cary Clark12799e12017-07-28 15:18:29 -0400243
Cary Clark493df1f2017-08-25 13:14:33 -0400244<a name="SkPaint_empty_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400245## SkPaint
246
Cary Clarka560c472017-11-27 10:44:06 -0500247<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400248SkPaint()
249</pre>
250
Cary Clark8cc16c72017-08-25 11:51:49 -0400251Constructs <a href="#Paint">Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400252
253| attribute | default value |
254| --- | --- |
Cary Clarka560c472017-11-27 10:44:06 -0500255| Anti-alias | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400256| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400257| <a href="undocumented#Color">Color</a> | <a href="undocumented#SK_ColorBLACK">SK ColorBLACK</a> |
Cary Clark8cc16c72017-08-25 11:51:49 -0400258| <a href="#Alpha">Color Alpha</a> | 255 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400259| <a href="undocumented#Color_Filter">Color Filter</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400260| <a href="#Dither">Dither</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400261| <a href="undocumented#Draw_Looper">Draw Looper</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400262| <a href="#Fake_Bold">Fake Bold</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400263| <a href="undocumented#Filter_Quality">Filter Quality</a> | <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> |
264| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400265| <a href="#Automatic_Hinting">Automatic Hinting</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400266| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400267| <a href="#SkPaint_Hinting">Hinting</a> | <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400268| <a href="undocumented#Image_Filter">Image Filter</a> | nullptr |
269| <a href="SkPaint_Reference#LCD_Text">LCD Text</a> | false |
270| <a href="SkPaint_Reference#Linear_Text">Linear Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400271| <a href="#Miter_Limit">Miter Limit</a> | 4 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400272| <a href="undocumented#Mask_Filter">Mask Filter</a> | nullptr |
273| <a href="undocumented#Path_Effect">Path Effect</a> | nullptr |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400274| <a href="undocumented#Shader">Shader</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400275| <a href="#SkPaint_Style">Style</a> | <a href="#SkPaint_kFill_Style">kFill Style</a> |
276| <a href="#Text_Align">Text Align</a> | <a href="#SkPaint_kLeft_Align">kLeft Align</a> |
277| <a href="#Text_Encoding">Text Encoding</a> | <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> |
278| <a href="#Text_Scale_X">Text Scale X</a> | 1 |
279| <a href="#Text_Size">Text Size</a> | 12 |
280| <a href="#Text_Skew_X">Text Skew X</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400281| <a href="undocumented#Typeface">Typeface</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400282| <a href="#Stroke_Cap">Stroke Cap</a> | <a href="#SkPaint_kButt_Cap">kButt Cap</a> |
283| <a href="#Stroke_Join">Stroke Join</a> | <a href="#SkPaint_kMiter_Join">kMiter Join</a> |
284| <a href="#Stroke_Width">Stroke Width</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400285| <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400286| <a href="#Vertical_Text">Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400287
288The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500289paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400290build system.
291
292### Return Value
293
Cary Clark8cc16c72017-08-25 11:51:49 -0400294default initialized <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400295
296### Example
297
298<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
299
300---
301
Cary Clark73fa9722017-08-29 17:36:51 -0400302<a name="SkPaint_copy_const_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400303## SkPaint
304
Cary Clarka560c472017-11-27 10:44:06 -0500305<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400306SkPaint(const SkPaint& paint)
307</pre>
308
Cary Clark8cc16c72017-08-25 11:51:49 -0400309Makes 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 +0000310<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 -0400311between 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 -0400312their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400313
Update Docs949cfd42018-01-22 05:50:26 +0000314The 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 -0400315<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 -0400316This 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 -0400317
318### Parameters
319
Cary Clark73fa9722017-08-29 17:36:51 -0400320<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 -0400321original to copy</td>
322 </tr>
323</table>
324
325### Return Value
326
Cary Clark73fa9722017-08-29 17:36:51 -0400327shallow copy of <a href="#SkPaint_copy_const_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400328
329### Example
330
331<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
332
333#### Example Output
334
335~~~~
336SK_ColorRED == paint1.getColor()
337SK_ColorBLUE == paint2.getColor()
338~~~~
339
340</fiddle-embed></div>
341
342---
343
Cary Clark73fa9722017-08-29 17:36:51 -0400344<a name="SkPaint_move_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400345## SkPaint
346
Cary Clarka560c472017-11-27 10:44:06 -0500347<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400348SkPaint(SkPaint&& paint)
349</pre>
350
Cary Clarkd0530ba2017-09-14 11:25:39 -0400351Implements a move constructor to avoid increasing the reference counts
Cary Clark73fa9722017-08-29 17:36:51 -0400352of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400353
Cary Clark73fa9722017-08-29 17:36:51 -0400354After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400355
356### Parameters
357
Cary Clark73fa9722017-08-29 17:36:51 -0400358<table> <tr> <td><a name="SkPaint_move_SkPaint_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400359original to move</td>
360 </tr>
361</table>
362
363### Return Value
364
Cary Clark73fa9722017-08-29 17:36:51 -0400365content of <a href="#SkPaint_move_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400366
367### Example
368
369<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
370
371#### Example Output
372
373~~~~
374path effect unique: true
375~~~~
376
377</fiddle-embed></div>
378
379---
380
Cary Clark493df1f2017-08-25 13:14:33 -0400381<a name="SkPaint_reset"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400382## reset
383
Cary Clarka560c472017-11-27 10:44:06 -0500384<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400385void reset()
386</pre>
387
Cary Clarkbc5697d2017-10-04 14:31:33 -0400388Sets all <a href="#Paint">Paint</a> contents to their initial values. This is equivalent to replacing
389<a href="#Paint">Paint</a> with the result of <a href="#SkPaint_empty_constructor">SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400390
391### Example
392
393<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
394
395#### Example Output
396
397~~~~
398paint1 == paint2
399~~~~
400
401</fiddle-embed></div>
402
403---
404
Cary Clark493df1f2017-08-25 13:14:33 -0400405<a name="SkPaint_destructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400406## ~SkPaint
407
Cary Clarka560c472017-11-27 10:44:06 -0500408<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400409~SkPaint()
410</pre>
411
Cary Clark8cc16c72017-08-25 11:51:49 -0400412Decreases <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 +0000413<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 -0400414objects containing <a href="undocumented#Reference_Count">Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400415
416---
417
Cary Clark08895c42018-02-01 09:37:32 -0500418## <a name="Management"></a> Management
Cary Clark12799e12017-07-28 15:18:29 -0400419
Cary Clarka560c472017-11-27 10:44:06 -0500420<a name="SkPaint_copy_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400421## operator=
422
Cary Clarka560c472017-11-27 10:44:06 -0500423<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400424SkPaint& operator=(const SkPaint& paint)
425</pre>
426
Cary Clark8cc16c72017-08-25 11:51:49 -0400427Makes 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 +0000428<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 -0500429between 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 -0400430prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clarka560c472017-11-27 10:44:06 -0500431resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_operator_paint">paint</a>
432are increased by one. <a href="#SkPaint_copy_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400433
434### Parameters
435
Cary Clarka560c472017-11-27 10:44:06 -0500436<table> <tr> <td><a name="SkPaint_copy_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400437original to copy</td>
438 </tr>
439</table>
440
441### Return Value
442
Cary Clarka560c472017-11-27 10:44:06 -0500443content of <a href="#SkPaint_copy_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400444
445### Example
446
447<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
448
449#### Example Output
450
451~~~~
452SK_ColorRED == paint1.getColor()
453SK_ColorRED == paint2.getColor()
454~~~~
455
456</fiddle-embed></div>
457
458---
459
Cary Clarka560c472017-11-27 10:44:06 -0500460<a name="SkPaint_move_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400461## operator=
462
Cary Clarka560c472017-11-27 10:44:06 -0500463<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400464SkPaint& operator=(SkPaint&& paint)
465</pre>
466
Cary Clarka560c472017-11-27 10:44:06 -0500467Moves the <a href="#SkPaint_move_operator_paint">paint</a> to avoid increasing the reference counts
468of 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 -0400469prior destination are decreased by one; those objects are deleted if the resulting count
470is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400471
Cary Clarka560c472017-11-27 10:44:06 -0500472After the call, <a href="#SkPaint_move_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400473
474### Parameters
475
Cary Clarka560c472017-11-27 10:44:06 -0500476<table> <tr> <td><a name="SkPaint_move_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400477original to move</td>
478 </tr>
479</table>
480
481### Return Value
482
Cary Clarka560c472017-11-27 10:44:06 -0500483content of <a href="#SkPaint_move_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400484
485### Example
486
487<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
488
489#### Example Output
490
491~~~~
492SK_ColorRED == paint2.getColor()
493~~~~
494
495</fiddle-embed></div>
496
497---
498
Cary Clark493df1f2017-08-25 13:14:33 -0400499<a name="SkPaint_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400500## operator==
501
Cary Clarka560c472017-11-27 10:44:06 -0500502<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400503bool operator==(const SkPaint& a, const SkPaint& b)
504</pre>
505
Cary Clark8cc16c72017-08-25 11:51:49 -0400506Compares <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 +0000507if <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 -0400508<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 -0400509
510### Parameters
511
Cary Clark8cc16c72017-08-25 11:51:49 -0400512<table> <tr> <td><a name="SkPaint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
513<a href="#Paint">Paint</a> to compare</td>
514 </tr> <tr> <td><a name="SkPaint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
515<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400516 </tr>
517</table>
518
519### Return Value
520
Cary Clark8cc16c72017-08-25 11:51:49 -0400521true if <a href="#Paint">Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400522
523### Example
524
525<div><fiddle-embed name="7481a948e34672720337a631830586dd">
526
527#### Example Output
528
529~~~~
530paint1 == paint2
531paint1 != paint2
532~~~~
533
534</fiddle-embed></div>
535
536---
537
Cary Clarka560c472017-11-27 10:44:06 -0500538<a name="SkPaint_notequal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400539## operator!=
540
Cary Clarka560c472017-11-27 10:44:06 -0500541<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400542bool operator!=(const SkPaint& a, const SkPaint& b)
543</pre>
544
Cary Clarka560c472017-11-27 10:44:06 -0500545Compares <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a>, and returns true if <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a> are not equivalent. May return true
Update Docs949cfd42018-01-22 05:50:26 +0000546if <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400547<a href="undocumented#Draw_Looper">Draw Looper</a>, or <a href="undocumented#Image_Filter">Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400548
549### Parameters
550
Cary Clarka560c472017-11-27 10:44:06 -0500551<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400552<a href="#Paint">Paint</a> to compare</td>
Cary Clarka560c472017-11-27 10:44:06 -0500553 </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400554<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400555 </tr>
556</table>
557
558### Return Value
559
Cary Clark8cc16c72017-08-25 11:51:49 -0400560true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400561
562### Example
563
564<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
565
566#### Example Output
567
568~~~~
569paint1 == paint2
570paint1 == paint2
571~~~~
572
573</fiddle-embed></div>
574
575---
576
Cary Clark493df1f2017-08-25 13:14:33 -0400577<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400578## getHash
579
Cary Clarka560c472017-11-27 10:44:06 -0500580<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400581uint32_t getHash() const
582</pre>
583
Cary Clark8cc16c72017-08-25 11:51:49 -0400584Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400585Identical hashes guarantee that the paints are
586equivalent, but differing hashes do not guarantee that the paints have differing
587contents.
588
Cary Clark8cc16c72017-08-25 11:51:49 -0400589If <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 -0400590their hashes are also equal.
591
592The hash returned is platform and implementation specific.
593
594### Return Value
595
596a shallow hash
597
598### Example
599
600<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
601
602#### Example Output
603
604~~~~
605paint1 == paint2
606paint1.getHash() == paint2.getHash()
607~~~~
608
609</fiddle-embed></div>
610
611---
612
Cary Clark493df1f2017-08-25 13:14:33 -0400613<a name="SkPaint_flatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400614## flatten
615
Cary Clarka560c472017-11-27 10:44:06 -0500616<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400617void flatten(SkWriteBuffer& buffer) const
618</pre>
619
Cary Clark8cc16c72017-08-25 11:51:49 -0400620Serializes <a href="#Paint">Paint</a> into a <a href="#SkPaint_flatten_buffer">buffer</a>. A companion <a href="#SkPaint_unflatten">unflatten</a> call
Cary Clark12799e12017-07-28 15:18:29 -0400621can reconstitute the paint at a later time.
622
623### Parameters
624
Cary Clark8cc16c72017-08-25 11:51:49 -0400625<table> <tr> <td><a name="SkPaint_flatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
626<a href="undocumented#Write_Buffer">Write Buffer</a> receiving the flattened <a href="#Paint">Paint</a> data</td>
Cary Clark12799e12017-07-28 15:18:29 -0400627 </tr>
628</table>
629
Cary Clark12799e12017-07-28 15:18:29 -0400630---
631
Cary Clark493df1f2017-08-25 13:14:33 -0400632<a name="SkPaint_unflatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400633## unflatten
634
Cary Clarka560c472017-11-27 10:44:06 -0500635<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Update Docsad2cd562018-01-19 05:52:02 +0000636bool unflatten(SkReadBuffer& buffer)
Cary Clark12799e12017-07-28 15:18:29 -0400637</pre>
638
Cary Clark8cc16c72017-08-25 11:51:49 -0400639Populates <a href="#Paint">Paint</a>, typically from a serialized stream, created by calling
640<a href="#SkPaint_flatten">flatten</a> at an earlier time.
Cary Clark12799e12017-07-28 15:18:29 -0400641
Cary Clark8cc16c72017-08-25 11:51:49 -0400642<a href="undocumented#SkReadBuffer">SkReadBuffer</a> class is not public, so <a href="#SkPaint_unflatten">unflatten</a> cannot be meaningfully called
Cary Clark12799e12017-07-28 15:18:29 -0400643by the client.
644
645### Parameters
646
Cary Clark8cc16c72017-08-25 11:51:49 -0400647<table> <tr> <td><a name="SkPaint_unflatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -0400648serialized data describing <a href="#Paint">Paint</a> content</td>
Cary Clark12799e12017-07-28 15:18:29 -0400649 </tr>
650</table>
651
Update Docsad2cd562018-01-19 05:52:02 +0000652### Return Value
653
Cary Clark5081eed2018-01-22 07:55:48 -0500654false if the <a href="#SkPaint_unflatten_buffer">buffer</a> contains invalid data
655
Cary Clark2ade9972017-11-02 17:49:34 -0400656### See Also
657
658<a href="undocumented#SkReadBuffer">SkReadBuffer</a>
659
Cary Clark12799e12017-07-28 15:18:29 -0400660---
661
Cary Clark08895c42018-02-01 09:37:32 -0500662## <a name="Hinting"></a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400663
Cary Clark8cc16c72017-08-25 11:51:49 -0400664## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400665
Cary Clarka560c472017-11-27 10:44:06 -0500666<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400667enum <a href="#Hinting">Hinting</a> {
668<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
669<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
670<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
671<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400672};</pre>
673
Cary Clark8cc16c72017-08-25 11:51:49 -0400674<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
675look 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 -0400676muted effect or no effect at all depending on the platform.
677
Cary Clark7cfcbca2018-01-04 16:11:51 -0500678The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark8cc16c72017-08-25 11:51:49 -0400679as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400680
681### Constants
682
683<table>
684 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400685 <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 -0500686With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
687bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400688outline being loaded should not be fitted to the pixel grid but simply scaled
689to 26.6 fractional pixels.</td>
690 </tr>
691 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400692 <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 -0500693With FreeType, this is equivalent in spirit to the
694FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400695lighter hinting algorithm for non-monochrome modes.
Cary Clarkce101242017-09-01 15:51:02 -0400696Generated <a href="#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400697 </tr>
698 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400699 <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 -0500700With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
701choosing the default hinting algorithm, which is optimized for standard
Cary Clark12799e12017-07-28 15:18:29 -0400702gray-level rendering.</td>
703 </tr>
704 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -0500705 <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
706FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
707FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
708horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
709variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400710 </tr>
711</table>
712
Cary Clark7cfcbca2018-01-04 16:11:51 -0500713On Windows with DirectWrite, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400714
Cary Clark8cc16c72017-08-25 11:51:49 -0400715<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400716Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400717
718
719
Cary Clark493df1f2017-08-25 13:14:33 -0400720<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400721## getHinting
722
Cary Clarka560c472017-11-27 10:44:06 -0500723<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400724Hinting getHinting() const
725</pre>
726
727Returns level of glyph outline adjustment.
728
729### Return Value
730
Cary Clark8cc16c72017-08-25 11:51:49 -0400731one 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 -0400732
733### Example
734
735<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
736
737#### Example Output
738
739~~~~
740SkPaint::kNormal_Hinting == paint.getHinting()
741~~~~
742
743</fiddle-embed></div>
744
745---
746
Cary Clark493df1f2017-08-25 13:14:33 -0400747<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400748## setHinting
749
Cary Clarka560c472017-11-27 10:44:06 -0500750<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400751void setHinting(Hinting hintingLevel)
752</pre>
753
754Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400755Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400756
Cary Clark8cc16c72017-08-25 11:51:49 -0400757| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400758| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400759| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400760| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
761| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
762| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400763
764### Parameters
765
Cary Clark8cc16c72017-08-25 11:51:49 -0400766<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
767one 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 -0400768 </tr>
769</table>
770
771### Example
772
773<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
774
775#### Example Output
776
777~~~~
778paint1 == paint2
779~~~~
780
781</fiddle-embed></div>
782
783---
784
Cary Clark08895c42018-02-01 09:37:32 -0500785## <a name="Flags"></a> Flags
Cary Clark12799e12017-07-28 15:18:29 -0400786
Cary Clark8cc16c72017-08-25 11:51:49 -0400787## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400788
Cary Clarka560c472017-11-27 10:44:06 -0500789<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400790enum <a href="#Flags">Flags</a> {
791<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
792<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
793<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
794<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
795<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
796<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
797<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
798<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
799<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
800<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
801<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400802
Cary Clark8cc16c72017-08-25 11:51:49 -0400803<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400804};
805</pre>
806
Cary Clark8cc16c72017-08-25 11:51:49 -0400807The bit values stored in <a href="#Flags">Flags</a>.
808The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400809with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400810All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400811multiple settings at once.
812
813### Constants
814
815<table>
816 <tr>
Cary Clarka560c472017-11-27 10:44:06 -0500817 <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 -0400818 </tr>
819 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400820 <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 -0400821 </tr>
822 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400823 <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 -0400824 </tr>
825 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400826 <td><a name="SkPaint_kLinearText_Flag"> <code><strong>SkPaint::kLinearText_Flag </strong></code> </a></td><td>0x0040</td><td>mask for setting <a href="SkPaint_Reference#Linear_Text">Linear Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400827 </tr>
828 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400829 <td><a name="SkPaint_kSubpixelText_Flag"> <code><strong>SkPaint::kSubpixelText_Flag </strong></code> </a></td><td>0x0080</td><td>mask for setting <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400830 </tr>
831 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400832 <td><a name="SkPaint_kDevKernText_Flag"> <code><strong>SkPaint::kDevKernText_Flag </strong></code> </a></td><td>0x0100</td><td>mask for setting <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400833 </tr>
834 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400835 <td><a name="SkPaint_kLCDRenderText_Flag"> <code><strong>SkPaint::kLCDRenderText_Flag </strong></code> </a></td><td>0x0200</td><td>mask for setting <a href="SkPaint_Reference#LCD_Text">LCD Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400836 </tr>
837 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400838 <td><a name="SkPaint_kEmbeddedBitmapText_Flag"> <code><strong>SkPaint::kEmbeddedBitmapText_Flag </strong></code> </a></td><td>0x0400</td><td>mask for setting <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400839 </tr>
840 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400841 <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 -0400842 </tr>
843 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400844 <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 -0400845 </tr>
846 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400847 <td><a name="SkPaint_kGenA8FromLCD_Flag"> <code><strong>SkPaint::kGenA8FromLCD_Flag </strong></code> </a></td><td>0x2000</td><td>not intended for public use</td>
Cary Clark12799e12017-07-28 15:18:29 -0400848 </tr>
849 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400850 <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 -0400851 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400852<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400853
854</table>
855
Cary Clark8cc16c72017-08-25 11:51:49 -0400856## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400857
Cary Clark4855f782018-02-06 09:41:53 -0500858soonOnly valid for Android framework.
859
Cary Clarka560c472017-11-27 10:44:06 -0500860<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400861enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
862<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
863<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400864};</pre>
865
866### Constants
867
868<table>
869 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500870 <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 -0400871 </tr>
872 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500873 <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 -0400874 </tr>
Cary Clark4855f782018-02-06 09:41:53 -0500875
Cary Clark12799e12017-07-28 15:18:29 -0400876</table>
877
Cary Clark493df1f2017-08-25 13:14:33 -0400878<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400879## getFlags
880
Cary Clarka560c472017-11-27 10:44:06 -0500881<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400882uint32_t getFlags() const
883</pre>
884
Cary Clark8cc16c72017-08-25 11:51:49 -0400885Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
886bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400887
888### Return Value
889
Cary Clark8cc16c72017-08-25 11:51:49 -0400890zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400891
892### Example
893
894<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
895
896#### Example Output
897
898~~~~
899(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
900~~~~
901
902</fiddle-embed></div>
903
904---
905
Cary Clark493df1f2017-08-25 13:14:33 -0400906<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400907## setFlags
908
Cary Clarka560c472017-11-27 10:44:06 -0500909<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400910void setFlags(uint32_t flags)
911</pre>
912
Cary Clark8cc16c72017-08-25 11:51:49 -0400913Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
914All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400915
916### Parameters
917
Cary Clark8cc16c72017-08-25 11:51:49 -0400918<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
919union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400920 </tr>
921</table>
922
923### Example
924
925<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
926
927#### Example Output
928
929~~~~
930paint.isAntiAlias()
931paint.isDither()
932~~~~
933
934</fiddle-embed></div>
935
936---
937
Cary Clark08895c42018-02-01 09:37:32 -0500938## <a name="Anti-alias"></a> Anti-alias
939
Cary Clarka560c472017-11-27 10:44:06 -0500940Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400941If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
942If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, pixels are drawn with <a href="#Alpha">Color Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400943
Cary Clark7cfcbca2018-01-04 16:11:51 -0500944The rule for <a href="#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400945passing through the pixel center may, but is not required to, draw the pixel.
946
Cary Clarkce101242017-09-01 15:51:02 -0400947<a href="undocumented#Raster_Engine">Raster Engine</a> draws <a href="#Alias">Aliased</a> pixels whose centers are on or to the right of the start of an
Cary Clark4c06f5e2017-08-04 12:48:24 -0400948active <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 -0400949
Cary Clark7cfcbca2018-01-04 16:11:51 -0500950A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500951<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400952<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400953
Cary Clarka560c472017-11-27 10:44:06 -0500954The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400955
Cary Clarka560c472017-11-27 10:44:06 -0500956Anti-alias is disabled by default.
957Anti-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 -0400958at compile time.
959
960### Example
961
962<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
963A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400964The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clarkce101242017-09-01 15:51:02 -0400965<a href="#Alias">Aliasing</a> easier to see.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400966
Cary Clark493df1f2017-08-25 13:14:33 -0400967<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400968## isAntiAlias
969
Cary Clarka560c472017-11-27 10:44:06 -0500970<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400971bool isAntiAlias() const
972</pre>
973
Cary Clark4c06f5e2017-08-04 12:48:24 -0400974If 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 -0400975
Cary Clark8cc16c72017-08-25 11:51:49 -0400976Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400977
978### Return Value
979
Cary Clark8cc16c72017-08-25 11:51:49 -0400980<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400981
982### Example
983
984<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
985
986#### Example Output
987
988~~~~
989paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
990paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
991~~~~
992
993</fiddle-embed></div>
994
995---
996
Cary Clark493df1f2017-08-25 13:14:33 -0400997<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400998## setAntiAlias
999
Cary Clarka560c472017-11-27 10:44:06 -05001000<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001001void setAntiAlias(bool aa)
1002</pre>
1003
Cary Clark4c06f5e2017-08-04 12:48:24 -04001004Requests, 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 -04001005partial transparency.
1006
Cary Clark8cc16c72017-08-25 11:51:49 -04001007Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
1008Clears <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 -04001009
1010### Parameters
1011
Cary Clark8cc16c72017-08-25 11:51:49 -04001012<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
1013setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001014 </tr>
1015</table>
1016
1017### Example
1018
1019<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1020
1021#### Example Output
1022
1023~~~~
1024paint1 == paint2
1025~~~~
1026
1027</fiddle-embed></div>
1028
1029---
1030
Cary Clark08895c42018-02-01 09:37:32 -05001031## <a name="Dither"></a> Dither
1032
Cary Clark7cfcbca2018-01-04 16:11:51 -05001033<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001034This can help to smooth color transitions and reducing banding in gradients.
Cary Clark2dc84ad2018-01-26 12:56:22 -05001035Dithering lessens visible banding from <a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a>
1036and <a href="SkImageInfo_Reference#SkColorType">kRGBA 8888 SkColorType</a> gradients,
1037and improves rendering into a <a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001038
1039Dithering is always enabled for linear gradients drawing into
Cary Clark2dc84ad2018-01-26 12:56:22 -05001040<a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and <a href="SkImageInfo_Reference#SkColorType">kRGBA 8888 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
1041<a href="#Dither">Dither</a> cannot be enabled for <a href="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and
1042<a href="SkImageInfo_Reference#SkColorType">kRGBA F16 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001043
Cary Clark8cc16c72017-08-25 11:51:49 -04001044<a href="#Dither">Dither</a> is disabled by default.
1045<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 -04001046at compile time.
1047
Cary Clark8cc16c72017-08-25 11:51:49 -04001048Some platform implementations may ignore dithering. Setto ignore <a href="#Dither">Dither</a> on <a href="undocumented#GPU_Surface">GPU Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001049
1050### Example
1051
1052<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1053alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1054
1055### Example
1056
1057<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001058Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001059dither, making it easier to see.</div></fiddle-embed></div>
1060
Cary Clark493df1f2017-08-25 13:14:33 -04001061<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001062## isDither
1063
Cary Clarka560c472017-11-27 10:44:06 -05001064<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001065bool isDither() const
1066</pre>
1067
1068If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001069Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001070
1071### Return Value
1072
Cary Clark8cc16c72017-08-25 11:51:49 -04001073<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001074
1075### Example
1076
1077<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1078
1079#### Example Output
1080
1081~~~~
1082paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1083paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1084~~~~
1085
1086</fiddle-embed></div>
1087
1088---
1089
Cary Clark493df1f2017-08-25 13:14:33 -04001090<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001091## setDither
1092
Cary Clarka560c472017-11-27 10:44:06 -05001093<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001094void setDither(bool dither)
1095</pre>
1096
1097Requests, but does not require, to distribute color error.
1098
Cary Clark8cc16c72017-08-25 11:51:49 -04001099Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1100Clears <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 -04001101
1102### Parameters
1103
Cary Clark8cc16c72017-08-25 11:51:49 -04001104<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1105setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001106 </tr>
1107</table>
1108
1109### Example
1110
1111<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1112
1113#### Example Output
1114
1115~~~~
1116paint1 == paint2
1117~~~~
1118
1119</fiddle-embed></div>
1120
1121### See Also
1122
Cary Clark2dc84ad2018-01-26 12:56:22 -05001123<a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001124
1125---
1126
1127### See Also
1128
Cary Clarka560c472017-11-27 10:44:06 -05001129Gradient <a href="#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001130
Cary Clark08895c42018-02-01 09:37:32 -05001131## <a name="Device_Text"></a> Device Text
1132
Cary Clark4c06f5e2017-08-04 12:48:24 -04001133<a href="SkPaint_Reference#LCD_Text">LCD Text</a> and <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> increase the precision of glyph position.
Cary Clark12799e12017-07-28 15:18:29 -04001134
Cary Clark7cfcbca2018-01-04 16:11:51 -05001135When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001136create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001137on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001138<a href="SkPaint_Reference#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark8cc16c72017-08-25 11:51:49 -04001139the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001140
Cary Clark7cfcbca2018-01-04 16:11:51 -05001141<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 -04001142As the opaqueness
1143of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1144
1145Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001146<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> and <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> are clear by default.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001147<a href="SkPaint_Reference#LCD_Text">LCD Text</a> or <a href="SkPaint_Reference#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 -04001148<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 -04001149
1150### Example
1151
Cary Clark4c06f5e2017-08-04 12:48:24 -04001152<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href="SkPaint_Reference#LCD_Text">LCD Text</a> and <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a>.
Cary Clarkce101242017-09-01 15:51:02 -04001153When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="#Glyph">Glyphs</a> are identical, but not evenly spaced.
1154When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is enabled, the comma <a href="#Glyph">Glyphs</a> are unique, but appear evenly spaced.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001155
1156## <a name="Linear_Text"></a> Linear Text
1157
Cary Clark4c06f5e2017-08-04 12:48:24 -04001158<a href="SkPaint_Reference#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 -04001159If <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 -04001160If <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 -04001161
Cary Clark493df1f2017-08-25 13:14:33 -04001162<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001163## isLinearText
1164
Cary Clarka560c472017-11-27 10:44:06 -05001165<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001166bool isLinearText() const
1167</pre>
1168
Cary Clark4c06f5e2017-08-04 12:48:24 -04001169If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001170
Cary Clark8cc16c72017-08-25 11:51:49 -04001171Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001172
1173### Return Value
1174
Cary Clark8cc16c72017-08-25 11:51:49 -04001175<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001176
1177### Example
1178
1179<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1180
1181### See Also
1182
Cary Clark8cc16c72017-08-25 11:51:49 -04001183<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001184
1185---
1186
Cary Clark493df1f2017-08-25 13:14:33 -04001187<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001188## setLinearText
1189
Cary Clarka560c472017-11-27 10:44:06 -05001190<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001191void setLinearText(bool linearText)
1192</pre>
1193
Cary Clark4c06f5e2017-08-04 12:48:24 -04001194If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001195By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001196
Cary Clark8cc16c72017-08-25 11:51:49 -04001197Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1198Clears <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 -04001199
1200### Parameters
1201
Cary Clark8cc16c72017-08-25 11:51:49 -04001202<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1203setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001204 </tr>
1205</table>
1206
1207### Example
1208
1209<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1210
1211### See Also
1212
Cary Clark8cc16c72017-08-25 11:51:49 -04001213<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001214
1215---
1216
1217## <a name="Subpixel_Text"></a> Subpixel Text
1218
Cary Clark7cfcbca2018-01-04 16:11:51 -05001219<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 -04001220As the opaqueness
1221of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1222
Cary Clark493df1f2017-08-25 13:14:33 -04001223<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001224## isSubpixelText
1225
Cary Clarka560c472017-11-27 10:44:06 -05001226<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001227bool isSubpixelText() const
1228</pre>
1229
Cary Clarkce101242017-09-01 15:51:02 -04001230If true, <a href="#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001231
Cary Clark8cc16c72017-08-25 11:51:49 -04001232Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001233
1234### Return Value
1235
Cary Clark8cc16c72017-08-25 11:51:49 -04001236<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001237
1238### Example
1239
1240<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1241
1242#### Example Output
1243
1244~~~~
1245paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1246paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1247~~~~
1248
1249</fiddle-embed></div>
1250
1251---
1252
Cary Clark493df1f2017-08-25 13:14:33 -04001253<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001254## setSubpixelText
1255
Cary Clarka560c472017-11-27 10:44:06 -05001256<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001257void setSubpixelText(bool subpixelText)
1258</pre>
1259
Cary Clarkce101242017-09-01 15:51:02 -04001260Requests, but does not require, that <a href="#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001261
Cary Clark8cc16c72017-08-25 11:51:49 -04001262Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1263Clears <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 -04001264
1265### Parameters
1266
Cary Clark8cc16c72017-08-25 11:51:49 -04001267<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1268setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001269 </tr>
1270</table>
1271
1272### Example
1273
1274<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1275
1276#### Example Output
1277
1278~~~~
1279paint1 == paint2
1280~~~~
1281
1282</fiddle-embed></div>
1283
1284---
1285
1286## <a name="LCD_Text"></a> LCD Text
1287
Cary Clark7cfcbca2018-01-04 16:11:51 -05001288When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001289create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001290on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001291<a href="SkPaint_Reference#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark8cc16c72017-08-25 11:51:49 -04001292the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001293
Cary Clark493df1f2017-08-25 13:14:33 -04001294<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001295## isLCDRenderText
1296
Cary Clarka560c472017-11-27 10:44:06 -05001297<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001298bool isLCDRenderText() const
1299</pre>
1300
Cary Clark7cfcbca2018-01-04 16:11:51 -05001301If true, <a href="#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001302
Cary Clark8cc16c72017-08-25 11:51:49 -04001303Returns 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 -04001304
1305### Return Value
1306
Cary Clark8cc16c72017-08-25 11:51:49 -04001307<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001308
1309### Example
1310
1311<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1312
1313#### Example Output
1314
1315~~~~
1316paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1317paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1318~~~~
1319
1320</fiddle-embed></div>
1321
1322---
1323
Cary Clark493df1f2017-08-25 13:14:33 -04001324<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001325## setLCDRenderText
1326
Cary Clarka560c472017-11-27 10:44:06 -05001327<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001328void setLCDRenderText(bool lcdText)
1329</pre>
1330
Cary Clark7cfcbca2018-01-04 16:11:51 -05001331Requests, but does not require, that <a href="#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001332
Cary Clark8cc16c72017-08-25 11:51:49 -04001333Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1334Clears <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 -04001335
1336### Parameters
1337
Cary Clark8cc16c72017-08-25 11:51:49 -04001338<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1339setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001340 </tr>
1341</table>
1342
1343### Example
1344
1345<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1346
1347#### Example Output
1348
1349~~~~
1350paint1 == paint2
1351~~~~
1352
1353</fiddle-embed></div>
1354
1355---
1356
Cary Clark08895c42018-02-01 09:37:32 -05001357## <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
1358
Cary Clarkce101242017-09-01 15:51:02 -04001359<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001360<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 -05001361in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001362
Cary Clark7cfcbca2018-01-04 16:11:51 -05001363FreeType 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 -04001364the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001365Windows may select the bitmap glyph but is not required to do so.
1366<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001367
Cary Clark4c06f5e2017-08-04 12:48:24 -04001368<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1369<a href="SkPaint_Reference#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 -04001370<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001371
1372### Example
1373
Cary Clarka560c472017-11-27 10:44:06 -05001374<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
1375void draw(SkCanvas* canvas) {<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
1376 includes an embedded bitmap Glyph at odd font sizes. This example works
1377 on platforms that use FreeType as their Font_Engine.
1378 Windows may, but is not required to, return a bitmap glyph if
1379 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1380 bitmap.allocN32Pixels(30, 15);
1381 bitmap.eraseColor(0);
1382 SkCanvas offscreen(bitmap);
1383 SkPaint paint;
1384 paint.setAntiAlias(true);
1385 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001386 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001387 for (bool embedded : { false, true}) {
1388 paint.setEmbeddedBitmapText(embedded);
1389 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1390 }
1391 canvas->drawBitmap(bitmap, 0, 0);
1392 canvas->scale(10, 10);
1393 canvas->drawBitmap(bitmap, -2, 1);
1394}
1395</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001396
Cary Clark493df1f2017-08-25 13:14:33 -04001397<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001398## isEmbeddedBitmapText
1399
Cary Clarka560c472017-11-27 10:44:06 -05001400<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001401bool isEmbeddedBitmapText() const
1402</pre>
1403
Cary Clarkce101242017-09-01 15:51:02 -04001404If true, <a href="#Engine">Font Engine</a> may return <a href="#Glyph">Glyphs</a> from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001405
Cary Clark8cc16c72017-08-25 11:51:49 -04001406Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001407
1408### Return Value
1409
Cary Clark8cc16c72017-08-25 11:51:49 -04001410<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001411
1412### Example
1413
1414<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1415
1416#### Example Output
1417
1418~~~~
1419paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1420paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1421~~~~
1422
1423</fiddle-embed></div>
1424
1425---
1426
Cary Clark493df1f2017-08-25 13:14:33 -04001427<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001428## setEmbeddedBitmapText
1429
Cary Clarka560c472017-11-27 10:44:06 -05001430<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001431void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1432</pre>
1433
1434Requests, but does not require, to use bitmaps in fonts instead of outlines.
1435
Cary Clark8cc16c72017-08-25 11:51:49 -04001436Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1437Clears <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 -04001438
1439### Parameters
1440
Cary Clark8cc16c72017-08-25 11:51:49 -04001441<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1442setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001443 </tr>
1444</table>
1445
1446### Example
1447
1448<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1449
1450#### Example Output
1451
1452~~~~
1453paint1 == paint2
1454~~~~
1455
1456</fiddle-embed></div>
1457
1458---
1459
Cary Clark08895c42018-02-01 09:37:32 -05001460## <a name="Automatic_Hinting"></a> Automatic Hinting
1461
Cary Clark8cc16c72017-08-25 11:51:49 -04001462If <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 Clarkce101242017-09-01 15:51:02 -04001463instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001464<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
1465<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001466
Cary Clark7cfcbca2018-01-04 16:11:51 -05001467<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 -04001468
Cary Clark493df1f2017-08-25 13:14:33 -04001469<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001470## isAutohinted
1471
Cary Clarka560c472017-11-27 10:44:06 -05001472<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001473bool isAutohinted() const
1474</pre>
1475
Cary Clark8cc16c72017-08-25 11:51:49 -04001476If 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 -05001477platform 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 Clarkce101242017-09-01 15:51:02 -04001478<a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001479
Cary Clark8cc16c72017-08-25 11:51:49 -04001480Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001481
1482### Return Value
1483
Cary Clark8cc16c72017-08-25 11:51:49 -04001484<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001485
1486### Example
1487
1488<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1489
1490#### Example Output
1491
1492~~~~
1493paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1494paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1495~~~~
1496
1497</fiddle-embed></div>
1498
1499### See Also
1500
Cary Clark8cc16c72017-08-25 11:51:49 -04001501<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001502
1503---
1504
Cary Clark493df1f2017-08-25 13:14:33 -04001505<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001506## setAutohinted
1507
Cary Clarka560c472017-11-27 10:44:06 -05001508<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001509void setAutohinted(bool useAutohinter)
1510</pre>
1511
Cary Clark8cc16c72017-08-25 11:51:49 -04001512If <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 Clarkce101242017-09-01 15:51:02 -04001513instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001514<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
1515<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001516
Cary Clark7cfcbca2018-01-04 16:11:51 -05001517Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001518
Cary Clark8cc16c72017-08-25 11:51:49 -04001519Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1520Clears <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 -04001521
1522### Parameters
1523
Cary Clark8cc16c72017-08-25 11:51:49 -04001524<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1525setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001526 </tr>
1527</table>
1528
1529### Example
1530
1531<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1532
1533### See Also
1534
Cary Clark8cc16c72017-08-25 11:51:49 -04001535<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001536
1537---
1538
Cary Clark08895c42018-02-01 09:37:32 -05001539## <a name="Vertical_Text"></a> Vertical Text
1540
Cary Clark4c06f5e2017-08-04 12:48:24 -04001541<a href="undocumented#Text">Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
Cary Clarkce101242017-09-01 15:51:02 -04001542using <a href="#Advance">Font Advance</a> to position subsequent <a href="#Glyph">Glyphs</a>. By default, each successive glyph
1543is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
1544<a href="#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001545
Cary Clark7cfcbca2018-01-04 16:11:51 -05001546Skia can translate text character codes as a series of <a href="#Glyph">Glyphs</a>, but does not implement
1547font substitution,
1548textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1549a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001550into glyph series.
1551
Cary Clark8cc16c72017-08-25 11:51:49 -04001552<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 -04001553
Cary Clark8cc16c72017-08-25 11:51:49 -04001554<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1555<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 -04001556
Cary Clark8cc16c72017-08-25 11:51:49 -04001557<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1558<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1559<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001560
1561### Example
1562
1563<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1564
Cary Clark493df1f2017-08-25 13:14:33 -04001565<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001566## isVerticalText
1567
Cary Clarka560c472017-11-27 10:44:06 -05001568<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001569bool isVerticalText() const
1570</pre>
1571
Cary Clarkce101242017-09-01 15:51:02 -04001572If true, <a href="#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001573
Cary Clark8cc16c72017-08-25 11:51:49 -04001574Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001575
1576### Return Value
1577
Cary Clark8cc16c72017-08-25 11:51:49 -04001578<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001579
1580### Example
1581
1582<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1583
1584#### Example Output
1585
1586~~~~
1587paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1588paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1589~~~~
1590
1591</fiddle-embed></div>
1592
1593---
1594
Cary Clark493df1f2017-08-25 13:14:33 -04001595<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001596## setVerticalText
1597
Cary Clarka560c472017-11-27 10:44:06 -05001598<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001599void setVerticalText(bool verticalText)
1600</pre>
1601
1602If true, text advance positions the next glyph below the previous glyph instead of to the
1603right of previous glyph.
1604
Cary Clark8cc16c72017-08-25 11:51:49 -04001605Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1606Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001607
1608### Parameters
1609
Cary Clark8cc16c72017-08-25 11:51:49 -04001610<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1611setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001612 </tr>
1613</table>
1614
1615### Example
1616
1617<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1618
1619#### Example Output
1620
1621~~~~
1622paint1 == paint2
1623~~~~
1624
1625</fiddle-embed></div>
1626
1627---
1628
Cary Clark08895c42018-02-01 09:37:32 -05001629## <a name="Fake_Bold"></a> Fake Bold
1630
Cary Clark8cc16c72017-08-25 11:51:49 -04001631<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 -05001632is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001633bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001634
Cary Clark7cfcbca2018-01-04 16:11:51 -05001635Use <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 -04001636is not available.
1637
Cary Clark7cfcbca2018-01-04 16:11:51 -05001638A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clarkce101242017-09-01 15:51:02 -04001639the font engine to create the bold <a href="#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark7cfcbca2018-01-04 16:11:51 -05001640by 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 -04001641
Cary Clark8cc16c72017-08-25 11:51:49 -04001642<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001643
1644### Example
1645
1646<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1647
Cary Clark493df1f2017-08-25 13:14:33 -04001648<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001649## isFakeBoldText
1650
Cary Clarka560c472017-11-27 10:44:06 -05001651<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001652bool isFakeBoldText() const
1653</pre>
1654
1655If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1656from outlines.
1657
Cary Clark8cc16c72017-08-25 11:51:49 -04001658Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001659
1660### Return Value
1661
Cary Clark8cc16c72017-08-25 11:51:49 -04001662<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001663
1664### Example
1665
1666<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1667
1668#### Example Output
1669
1670~~~~
1671paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1672paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1673~~~~
1674
1675</fiddle-embed></div>
1676
1677---
1678
Cary Clark493df1f2017-08-25 13:14:33 -04001679<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001680## setFakeBoldText
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 -04001683void setFakeBoldText(bool fakeBoldText)
1684</pre>
1685
Cary Clarkce101242017-09-01 15:51:02 -04001686Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001687
Cary Clark8cc16c72017-08-25 11:51:49 -04001688Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1689Clears <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 -04001690
1691### Parameters
1692
Cary Clark8cc16c72017-08-25 11:51:49 -04001693<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1694setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001695 </tr>
1696</table>
1697
1698### Example
1699
1700<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1701
1702#### Example Output
1703
1704~~~~
1705paint1 == paint2
1706~~~~
1707
1708</fiddle-embed></div>
1709
1710---
1711
Cary Clark08895c42018-02-01 09:37:32 -05001712## <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
1713
Cary Clarkce101242017-09-01 15:51:02 -04001714if <a href="#SkPaint_Hinting">Hinting</a> is set to <a href="#SkPaint_kFull_Hinting">kFull Hinting</a>, <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> adjusts the character
Cary Clark7cfcbca2018-01-04 16:11:51 -05001715spacing by the difference of the hinted and Unhinted <a href="undocumented#Left_Side_Bearing">Left Side Bearing</a> and
Cary Clarkce101242017-09-01 15:51:02 -04001716<a href="undocumented#Right_Side_Bearing">Right Side Bearing</a>. <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> only applies to platforms that use
Cary Clark7cfcbca2018-01-04 16:11:51 -05001717FreeType as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001718
Cary Clark7cfcbca2018-01-04 16:11:51 -05001719<a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is not related to text Kerning, where the space between
1720a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001721
Cary Clark493df1f2017-08-25 13:14:33 -04001722<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001723## isDevKernText
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 -04001726bool isDevKernText() const
1727</pre>
1728
1729Returns if character spacing may be adjusted by the hinting difference.
1730
Cary Clark8cc16c72017-08-25 11:51:49 -04001731Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001732
1733### Return Value
1734
Cary Clark8cc16c72017-08-25 11:51:49 -04001735<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001736
1737### Example
1738
1739<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1740
1741---
1742
Cary Clark493df1f2017-08-25 13:14:33 -04001743<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001744## setDevKernText
1745
Cary Clarka560c472017-11-27 10:44:06 -05001746<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001747void setDevKernText(bool devKernText)
1748</pre>
1749
1750Requests, but does not require, to use hinting to adjust glyph spacing.
1751
Cary Clark8cc16c72017-08-25 11:51:49 -04001752Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1753Clears <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001754
1755### Parameters
1756
Cary Clark8cc16c72017-08-25 11:51:49 -04001757<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1758setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001759 </tr>
1760</table>
1761
1762### Example
1763
1764<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1765
1766#### Example Output
1767
1768~~~~
1769paint1 == paint2
1770~~~~
1771
1772</fiddle-embed></div>
1773
1774---
1775
Cary Clark08895c42018-02-01 09:37:32 -05001776## <a name="Filter_Quality_Methods"></a> Filter Quality Methods
1777
Cary Clark4c06f5e2017-08-04 12:48:24 -04001778<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1779A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1780A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001781If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1782in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001783
Cary Clark8cc16c72017-08-25 11:51:49 -04001784<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 -04001785
1786<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001787 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1788 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1789 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1790 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001791</table>
1792
Cary Clarka560c472017-11-27 10:44:06 -05001793and 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 -04001794
Cary Clark4c06f5e2017-08-04 12:48:24 -04001795<a href="undocumented#Filter_Quality">Filter Quality</a> is <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04001796
1797### Example
1798
1799<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1800
Cary Clark493df1f2017-08-25 13:14:33 -04001801<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001802## getFilterQuality
1803
Cary Clarka560c472017-11-27 10:44:06 -05001804<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001805SkFilterQuality getFilterQuality() const
1806</pre>
1807
Cary Clark4c06f5e2017-08-04 12:48:24 -04001808Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001809draws faster; a higher setting looks better when the image is scaled.
1810
1811### Return Value
1812
Cary Clark7cfcbca2018-01-04 16:11:51 -05001813one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001814<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001815
1816### Example
1817
1818<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1819
1820#### Example Output
1821
1822~~~~
1823kNone_SkFilterQuality == paint.getFilterQuality()
1824~~~~
1825
1826</fiddle-embed></div>
1827
1828---
1829
Cary Clark493df1f2017-08-25 13:14:33 -04001830<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001831## setFilterQuality
1832
Cary Clarka560c472017-11-27 10:44:06 -05001833<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001834void setFilterQuality(SkFilterQuality quality)
1835</pre>
1836
Cary Clark4c06f5e2017-08-04 12:48:24 -04001837Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001838draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001839Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001840
1841### Parameters
1842
Cary Clark8cc16c72017-08-25 11:51:49 -04001843<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05001844one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001845<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001846 </tr>
1847</table>
1848
1849### Example
1850
1851<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1852
1853#### Example Output
1854
1855~~~~
1856kHigh_SkFilterQuality == paint.getFilterQuality()
1857~~~~
1858
1859</fiddle-embed></div>
1860
1861### See Also
1862
Cary Clark4c06f5e2017-08-04 12:48:24 -04001863<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001864
1865---
1866
Cary Clark08895c42018-02-01 09:37:32 -05001867## <a name="Color_Methods"></a> Color Methods
Cary Clark12799e12017-07-28 15:18:29 -04001868
Cary Clarkab2621d2018-01-30 10:08:57 -05001869| name | description |
1870| --- | --- |
1871| <a href="#SkPaint_getColor">getColor</a> | returns <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color |
1872| <a href="#SkPaint_setColor">setColor</a> | sets <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color |
Cary Clark12799e12017-07-28 15:18:29 -04001873
Cary Clarkab2621d2018-01-30 10:08:57 -05001874<a href="undocumented#Color">Color</a> specifies the <a href="#RGB_Red">Color RGB Red</a>, <a href="#RGB_Blue">Color RGB Blue</a>, <a href="#RGB_Green">Color RGB Green</a>, and <a href="#Alpha">Color Alpha</a>
1875values used to draw a filled or stroked shape in a 32-bit value. Each component
1876occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1877All values in any combination are valid.
1878
1879<a href="undocumented#Color">Color</a> is not <a href="#Premultiply">Premultiplied</a>; <a href="#Alpha">Color Alpha</a> sets the transparency independent of
1880<a href="#RGB">Color RGB</a>: <a href="#RGB_Red">Color RGB Red</a>, <a href="#RGB_Blue">Color RGB Blue</a>, and <a href="#RGB_Green">Color RGB Green</a>.
1881
1882The bit positions of <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a> are independent of the bit
1883positions on the output device, which may have more or fewer bits, and may have
1884a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001885
Cary Clark8cc16c72017-08-25 11:51:49 -04001886| bit positions | <a href="#Alpha">Color Alpha</a> | <a href="#RGB_Red">Color RGB Red</a> | <a href="#RGB_Blue">Color RGB Blue</a> | <a href="#RGB_Green">Color RGB Green</a> |
Cary Clark12799e12017-07-28 15:18:29 -04001887| --- | --- | --- | --- | --- |
1888| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1889
1890### Example
1891
1892<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1893
Cary Clark493df1f2017-08-25 13:14:33 -04001894<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001895## getColor
1896
Cary Clarka560c472017-11-27 10:44:06 -05001897<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001898SkColor getColor() const
1899</pre>
1900
Cary Clarkce101242017-09-01 15:51:02 -04001901Retrieves <a href="#Alpha">Alpha</a> and <a href="#RGB">Color RGB</a>, <a href="#Unpremultiply">Unpremultiplied</a>, packed into 32 bits.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001902Use helpers <a href="undocumented#SkColorGetA">SkColorGetA</a>, <a href="undocumented#SkColorGetR">SkColorGetR</a>, <a href="undocumented#SkColorGetG">SkColorGetG</a>, and <a href="undocumented#SkColorGetB">SkColorGetB</a> to extract
Cary Clark12799e12017-07-28 15:18:29 -04001903a color component.
1904
1905### Return Value
1906
Cary Clarkce101242017-09-01 15:51:02 -04001907<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001908
1909### Example
1910
1911<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1912
1913#### Example Output
1914
1915~~~~
1916Yellow is 100% red, 100% green, and 0% blue.
1917~~~~
1918
1919</fiddle-embed></div>
1920
1921### See Also
1922
Cary Clark4c06f5e2017-08-04 12:48:24 -04001923<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001924
1925---
1926
Cary Clark493df1f2017-08-25 13:14:33 -04001927<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001928## setColor
1929
Cary Clarka560c472017-11-27 10:44:06 -05001930<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001931void setColor(SkColor color)
1932</pre>
1933
Cary Clarkce101242017-09-01 15:51:02 -04001934Sets <a href="#Alpha">Alpha</a> and <a href="#RGB">Color RGB</a> used when stroking and filling. The <a href="#SkPaint_setColor_color">color</a> is a 32-bit value,
Cary Clark7cfcbca2018-01-04 16:11:51 -05001935<a href="#Unpremultiply">Unpremultiplied</a>, packing 8-bit components for <a href="#Alpha">Alpha</a>, <a href="#Red">Red</a>, <a href="#Blue">Blue</a>, and <a href="#Green">Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001936
1937### Parameters
1938
Cary Clark8cc16c72017-08-25 11:51:49 -04001939<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001940<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001941 </tr>
1942</table>
1943
1944### Example
1945
1946<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1947
1948#### Example Output
1949
1950~~~~
1951green1 == green2
1952~~~~
1953
1954</fiddle-embed></div>
1955
1956### See Also
1957
Cary Clark8cc16c72017-08-25 11:51:49 -04001958<a href="undocumented#SkColor">SkColor</a> <a href="#SkPaint_setARGB">setARGB</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001959
1960---
1961
1962## <a name="Alpha_Methods"></a> Alpha Methods
1963
Cary Clark8cc16c72017-08-25 11:51:49 -04001964<a href="#Alpha">Color Alpha</a> sets the transparency independent of <a href="#RGB">Color RGB</a>: <a href="#RGB_Red">Color RGB Red</a>, <a href="#RGB_Blue">Color RGB Blue</a>, and <a href="#RGB_Green">Color RGB Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001965
Cary Clark493df1f2017-08-25 13:14:33 -04001966<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001967## getAlpha
1968
Cary Clarka560c472017-11-27 10:44:06 -05001969<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001970uint8_t getAlpha() const
1971</pre>
1972
Cary Clarkce101242017-09-01 15:51:02 -04001973Retrieves <a href="#Alpha">Alpha</a> from the <a href="undocumented#Color">Color</a> used when stroking and filling.
Cary Clark12799e12017-07-28 15:18:29 -04001974
1975### Return Value
1976
Cary Clarkce101242017-09-01 15:51:02 -04001977<a href="#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001978
1979### Example
1980
1981<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1982
1983#### Example Output
1984
1985~~~~
1986255 == paint.getAlpha()
1987~~~~
1988
1989</fiddle-embed></div>
1990
1991---
1992
Cary Clark493df1f2017-08-25 13:14:33 -04001993<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001994## setAlpha
1995
Cary Clarka560c472017-11-27 10:44:06 -05001996<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001997void setAlpha(U8CPU a)
1998</pre>
1999
Cary Clark7cfcbca2018-01-04 16:11:51 -05002000Replaces <a href="#Alpha">Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002001unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04002002build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
2003<a href="#SkPaint_setAlpha_a">a</a> set to zero makes <a href="undocumented#Color">Color</a> fully transparent; <a href="#SkPaint_setAlpha_a">a</a> set to 255 makes <a href="undocumented#Color">Color</a>
Cary Clark12799e12017-07-28 15:18:29 -04002004fully opaque.
2005
2006### Parameters
2007
Cary Clark8cc16c72017-08-25 11:51:49 -04002008<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04002009<a href="#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002010 </tr>
2011</table>
2012
2013### Example
2014
2015<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
2016
2017#### Example Output
2018
2019~~~~
20200x44112233 == paint.getColor()
2021~~~~
2022
2023</fiddle-embed></div>
2024
2025---
2026
Cary Clark493df1f2017-08-25 13:14:33 -04002027<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002028## setARGB
2029
Cary Clarka560c472017-11-27 10:44:06 -05002030<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002031void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
2032</pre>
2033
Cary Clark4c06f5e2017-08-04 12:48:24 -04002034Sets <a href="undocumented#Color">Color</a> used when drawing solid fills. The color components range from 0 to 255.
Cary Clarkce101242017-09-01 15:51:02 -04002035The color is <a href="#Unpremultiply">Unpremultiplied</a>; <a href="#Alpha">Alpha</a> sets the transparency independent of <a href="#RGB">Color RGB</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002036
2037### Parameters
2038
Cary Clark8cc16c72017-08-25 11:51:49 -04002039<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2040amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2041 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2042amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2043 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2044amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2045 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2046amount of <a href="#RGB_Blue">Color RGB Blue</a>, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002047 </tr>
2048</table>
2049
2050### Example
2051
2052<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2053
2054#### Example Output
2055
2056~~~~
2057transRed1 == transRed2
2058~~~~
2059
2060</fiddle-embed></div>
2061
2062### See Also
2063
Cary Clark8cc16c72017-08-25 11:51:49 -04002064<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002065
2066---
2067
Cary Clark08895c42018-02-01 09:37:32 -05002068## <a name="Style"></a> Style
2069
Cary Clark8cc16c72017-08-25 11:51:49 -04002070<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2071Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002072
Cary Clark8cc16c72017-08-25 11:51:49 -04002073Set <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 -04002074The fill covers the area inside the geometry for most shapes.
2075
Cary Clark8cc16c72017-08-25 11:51:49 -04002076Set <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 -04002077
2078## <a name="Fill"></a> Fill
2079
2080### See Also
2081
Cary Clark8cc16c72017-08-25 11:51:49 -04002082<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002083
2084## <a name="Stroke"></a> Stroke
2085
Cary Clarkbc5697d2017-10-04 14:31:33 -04002086The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002087<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>.
2088The 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 -04002089The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002090
Cary Clark8cc16c72017-08-25 11:51:49 -04002091As <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
2092may have gaps, and if <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, <a href="#Alpha">Color Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04002093
2094## <a name="Hairline"></a> Hairline
2095
Cary Clark8cc16c72017-08-25 11:51:49 -04002096<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Hairline">Hairline</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002097<a href="#Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
2098flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002099
Cary Clark8cc16c72017-08-25 11:51:49 -04002100<a href="SkPath_Reference#Path">Path</a> drawing with <a href="#Hairline">Hairline</a> may hit the same pixel more than once. For instance, <a href="SkPath_Reference#Path">Path</a> containing
2101two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2102pixel. 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 -05002103GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002104while stroking.
2105
Cary Clark8cc16c72017-08-25 11:51:49 -04002106## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002107
Cary Clarka560c472017-11-27 10:44:06 -05002108<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002109enum <a href="#SkPaint_Style">Style</a> {
2110<a href="#SkPaint_kFill_Style">kFill Style</a>,
2111<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2112<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002113};</pre>
2114
Cary Clark8cc16c72017-08-25 11:51:49 -04002115Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002116The stroke and fill
2117share all paint attributes; for instance, they are drawn with the same color.
2118
Cary Clark8cc16c72017-08-25 11:51:49 -04002119Use <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 -04002120a fill draw.
2121
2122### Constants
2123
2124<table>
2125 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002126 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002127Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clarka560c472017-11-27 10:44:06 -05002128<a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="SkImage_Reference#Image">Image</a>, <a href="#Patch">Patches</a>, <a href="undocumented#Region">Region</a>, <a href="#Sprite">Sprites</a>, and <a href="undocumented#Vertices">Vertices</a> are painted as if
Cary Clark8cc16c72017-08-25 11:51:49 -04002129<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2130The <a href="#Fill_Type">Path Fill Type</a> specifies additional rules to fill the area outside the path edge,
Cary Clark12799e12017-07-28 15:18:29 -04002131and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002132<a href="#SkPaint_Style">Style</a> is set to <a href="#SkPaint_kFill_Style">kFill Style</a> by default.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002133 </tr>
2134 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002135 <td><a name="SkPaint_kStroke_Style"> <code><strong>SkPaint::kStroke_Style </strong></code> </a></td><td>1</td><td>Set to stroke geometry.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002136Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Arc">Arcs</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clarkce101242017-09-01 15:51:02 -04002137<a href="#Arc">Arcs</a>, <a href="#Line">Lines</a>, and <a href="#Point">Points</a>, are always drawn as if <a href="#SkPaint_kStroke_Style">kStroke Style</a> is set,
Cary Clark8cc16c72017-08-25 11:51:49 -04002138and ignore the set <a href="#SkPaint_Style">Style</a>.
2139The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002140 </tr>
2141 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002142 <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 Clarkbc5697d2017-10-04 14:31:33 -04002143Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002144<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2145and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002146 </tr>
2147
2148</table>
2149
Cary Clark8cc16c72017-08-25 11:51:49 -04002150## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002151
Cary Clarka560c472017-11-27 10:44:06 -05002152<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002153enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002154<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002155};</pre>
2156
2157### Constants
2158
2159<table>
2160 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002161 <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.
2162May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002163 </tr>
2164
2165</table>
2166
Cary Clark493df1f2017-08-25 13:14:33 -04002167<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002168## getStyle
2169
Cary Clarka560c472017-11-27 10:44:06 -05002170<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002171Style getStyle() const
2172</pre>
2173
2174Whether the geometry is filled, stroked, or filled and stroked.
2175
2176### Return Value
2177
Cary Clark8cc16c72017-08-25 11:51:49 -04002178one 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 -04002179
2180### Example
2181
2182<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2183
2184#### Example Output
2185
2186~~~~
2187SkPaint::kFill_Style == paint.getStyle()
2188~~~~
2189
2190</fiddle-embed></div>
2191
2192### See Also
2193
Cary Clark8cc16c72017-08-25 11:51:49 -04002194<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002195
2196---
2197
Cary Clark493df1f2017-08-25 13:14:33 -04002198<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002199## setStyle
2200
Cary Clarka560c472017-11-27 10:44:06 -05002201<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002202void setStyle(Style style)
2203</pre>
2204
2205Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002206Has 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 -04002207
2208### Parameters
2209
Cary Clark8cc16c72017-08-25 11:51:49 -04002210<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2211one 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 -04002212 </tr>
2213</table>
2214
2215### Example
2216
2217<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2218
2219### See Also
2220
Cary Clark8cc16c72017-08-25 11:51:49 -04002221<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002222
2223---
2224
2225### See Also
2226
Cary Clark8cc16c72017-08-25 11:51:49 -04002227<a href="#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 -04002228
Cary Clark08895c42018-02-01 09:37:32 -05002229## <a name="Stroke_Width"></a> Stroke Width
2230
Cary Clark8cc16c72017-08-25 11:51:49 -04002231<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002232of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002233set 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 -04002234
2235When width is greater than zero, the stroke encompasses as many pixels partially
2236or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002237the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002238
Cary Clarkbc5697d2017-10-04 14:31:33 -04002239The stroke dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002240remains one pixel wide regardless of scaling.
2241
2242The default width for the paint is zero.
2243
2244### Example
2245
Cary Clark7cfcbca2018-01-04 16:11:51 -05002246<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756" gpu="true"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clarkbc5697d2017-10-04 14:31:33 -04002247line and the platform implementation.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002248
Cary Clark493df1f2017-08-25 13:14:33 -04002249<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002250## getStrokeWidth
2251
Cary Clarka560c472017-11-27 10:44:06 -05002252<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002253SkScalar getStrokeWidth() const
2254</pre>
2255
Cary Clark8cc16c72017-08-25 11:51:49 -04002256Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002257outline the shape.
2258
2259### Return Value
2260
Cary Clark8cc16c72017-08-25 11:51:49 -04002261zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002262
2263### Example
2264
2265<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2266
2267#### Example Output
2268
2269~~~~
22700 == paint.getStrokeWidth()
2271~~~~
2272
2273</fiddle-embed></div>
2274
2275---
2276
Cary Clark493df1f2017-08-25 13:14:33 -04002277<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002278## setStrokeWidth
2279
Cary Clarka560c472017-11-27 10:44:06 -05002280<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002281void setStrokeWidth(SkScalar width)
2282</pre>
2283
2284Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002285outline the shape.
2286Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002287
2288### Parameters
2289
Cary Clark8cc16c72017-08-25 11:51:49 -04002290<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2291zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002292 </tr>
2293</table>
2294
2295### Example
2296
2297<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2298
2299#### Example Output
2300
2301~~~~
23025 == paint.getStrokeWidth()
2303~~~~
2304
2305</fiddle-embed></div>
2306
2307---
2308
Cary Clark08895c42018-02-01 09:37:32 -05002309## <a name="Miter_Limit"></a> Miter Limit
2310
Cary Clark8cc16c72017-08-25 11:51:49 -04002311<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002312relative to the stroke width.
2313
Cary Clark8cc16c72017-08-25 11:51:49 -04002314<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2315is 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>
2316or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002317
Cary Clark8cc16c72017-08-25 11:51:49 -04002318If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2319is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002320
Cary Clark8cc16c72017-08-25 11:51:49 -04002321<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002322
Cary Clark8cc16c72017-08-25 11:51:49 -04002323miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002324The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002325in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002326
2327Here are some miter limits and the angles that triggers them.
2328
2329| miter limit | angle in degrees |
2330| --- | --- |
2331| 10 | 11.48 |
2332| 9 | 12.76 |
2333| 8 | 14.36 |
2334| 7 | 16.43 |
2335| 6 | 19.19 |
2336| 5 | 23.07 |
2337| 4 | 28.96 |
2338| 3 | 38.94 |
2339| 2 | 60 |
2340| 1 | 180 |
2341
2342### Example
2343
2344<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2345When the miter limit is decreased slightly, the miter join is replaced
2346by a bevel join.</div></fiddle-embed></div>
2347
Cary Clark493df1f2017-08-25 13:14:33 -04002348<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002349## getStrokeMiter
2350
Cary Clarka560c472017-11-27 10:44:06 -05002351<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002352SkScalar getStrokeMiter() const
2353</pre>
2354
2355The limit at which a sharp corner is drawn beveled.
2356
2357### Return Value
2358
Cary Clark8cc16c72017-08-25 11:51:49 -04002359zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002360
2361### Example
2362
2363<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2364
2365#### Example Output
2366
2367~~~~
2368default miter limit == 4
2369~~~~
2370
2371</fiddle-embed></div>
2372
2373### See Also
2374
Cary Clark8cc16c72017-08-25 11:51:49 -04002375<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 -04002376
2377---
2378
Cary Clark493df1f2017-08-25 13:14:33 -04002379<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002380## setStrokeMiter
2381
Cary Clarka560c472017-11-27 10:44:06 -05002382<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002383void setStrokeMiter(SkScalar miter)
2384</pre>
2385
2386The limit at which a sharp corner is drawn beveled.
2387Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002388Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002389
2390### Parameters
2391
Cary Clark8cc16c72017-08-25 11:51:49 -04002392<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2393zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002394 </tr>
2395</table>
2396
2397### Example
2398
2399<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2400
2401#### Example Output
2402
2403~~~~
2404default miter limit == 8
2405~~~~
2406
2407</fiddle-embed></div>
2408
2409### See Also
2410
Cary Clark8cc16c72017-08-25 11:51:49 -04002411<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 -04002412
2413---
2414
Cary Clark08895c42018-02-01 09:37:32 -05002415## <a name="Stroke_Cap"></a> Stroke Cap
Cary Clark12799e12017-07-28 15:18:29 -04002416
Cary Clark8cc16c72017-08-25 11:51:49 -04002417## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002418
Cary Clarka560c472017-11-27 10:44:06 -05002419<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002420enum <a href="#SkPaint_Cap">Cap</a> {
2421<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2422<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2423<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002424
Cary Clark8cc16c72017-08-25 11:51:49 -04002425<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2426<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002427};
Cary Clark6fc50412017-09-21 12:31:06 -04002428
Cary Clark8cc16c72017-08-25 11:51:49 -04002429static constexpr int <a href="#SkPaint_kCapCount">kCapCount</a> = <a href="#SkPaint_kLast_Cap">kLast Cap</a> + 1;</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002430
Cary Clark8cc16c72017-08-25 11:51:49 -04002431<a href="#Stroke_Cap">Stroke Cap</a> draws at the beginning and end of an open <a href="#Contour">Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002432
2433### Constants
2434
2435<table>
2436 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002437 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002438 </tr>
2439 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002440 <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 Clark12799e12017-07-28 15:18:29 -04002441and end.</td>
2442 </tr>
2443 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002444 <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 -04002445and end. The square sides are parallel to the initial and final direction
2446of the stroke.</td>
2447 </tr>
2448 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002449 <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>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002450 </tr>
2451 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002452 <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>.
2453<a href="#Stroke_Cap">Stroke Cap</a> is set to <a href="#SkPaint_kButt_Cap">kButt Cap</a> by default.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002454 </tr>
2455 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002456 <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.
2457May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002458 </tr>
2459
Cary Clark7cfcbca2018-01-04 16:11:51 -05002460Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002461follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002462
Cary Clark8cc16c72017-08-25 11:51:49 -04002463If the <a href="#Contour">Path Contour</a> is not terminated by <a href="#SkPath_kClose_Verb">SkPath::kClose Verb</a>, the contour has a
Cary Clark12799e12017-07-28 15:18:29 -04002464visible beginning and end.
2465
Cary Clark8cc16c72017-08-25 11:51:49 -04002466<a href="#Contour">Path Contour</a> may start and end at the same point; defining <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002467
Cary Clark8cc16c72017-08-25 11:51:49 -04002468<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> is not drawn.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002469<a href="#SkPaint_kRound_Cap">kRound Cap</a> and <a href="SkPath_Reference#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 -04002470at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002471<a href="#SkPaint_kSquare_Cap">kSquare Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> draws an upright square with a side of
2472<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002473
Cary Clark8cc16c72017-08-25 11:51:49 -04002474<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 -04002475
2476</table>
2477
2478### Example
2479
Cary Clark2ade9972017-11-02 17:49:34 -04002480<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002481
Cary Clark493df1f2017-08-25 13:14:33 -04002482<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002483## getStrokeCap
2484
Cary Clarka560c472017-11-27 10:44:06 -05002485<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002486Cap getStrokeCap() const
2487</pre>
2488
2489The geometry drawn at the beginning and end of strokes.
2490
2491### Return Value
2492
Cary Clark8cc16c72017-08-25 11:51:49 -04002493one 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 -04002494
2495### Example
2496
2497<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2498
2499#### Example Output
2500
2501~~~~
2502kButt_Cap == default stroke cap
2503~~~~
2504
2505</fiddle-embed></div>
2506
2507### See Also
2508
Cary Clark8cc16c72017-08-25 11:51:49 -04002509<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002510
2511---
2512
Cary Clark493df1f2017-08-25 13:14:33 -04002513<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002514## setStrokeCap
2515
Cary Clarka560c472017-11-27 10:44:06 -05002516<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002517void setStrokeCap(Cap cap)
2518</pre>
2519
2520The geometry drawn at the beginning and end of strokes.
2521
2522### Parameters
2523
Cary Clark8cc16c72017-08-25 11:51:49 -04002524<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2525one 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>;
2526has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002527 </tr>
2528</table>
2529
2530### Example
2531
2532<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2533
2534#### Example Output
2535
2536~~~~
2537kRound_Cap == paint.getStrokeCap()
2538~~~~
2539
2540</fiddle-embed></div>
2541
2542### See Also
2543
Cary Clark8cc16c72017-08-25 11:51:49 -04002544<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002545
2546---
2547
Cary Clark08895c42018-02-01 09:37:32 -05002548## <a name="Stroke_Join"></a> Stroke Join
2549
Cary Clark8cc16c72017-08-25 11:51:49 -04002550<a href="#Stroke_Join">Stroke Join</a> draws at the sharp corners of an open or closed <a href="#Contour">Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002551
Cary Clark7cfcbca2018-01-04 16:11:51 -05002552Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002553follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002554
2555If the contour direction changes abruptly, because the tangent direction leading
2556to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002557the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002558
2559### Example
2560
Cary Clark2ade9972017-11-02 17:49:34 -04002561<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002562
Cary Clark8cc16c72017-08-25 11:51:49 -04002563## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002564
Cary Clarka560c472017-11-27 10:44:06 -05002565<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002566enum <a href="#SkPaint_Join">Join</a> {
2567<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2568<a href="#SkPaint_kRound_Join">kRound Join</a>,
2569<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002570
Cary Clark8cc16c72017-08-25 11:51:49 -04002571<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2572<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002573};
Cary Clark6fc50412017-09-21 12:31:06 -04002574
Cary Clark8cc16c72017-08-25 11:51:49 -04002575static constexpr int <a href="#SkPaint_kJoinCount">kJoinCount</a> = <a href="#SkPaint_kLast_Join">kLast Join</a> + 1;</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002576
Cary Clark8cc16c72017-08-25 11:51:49 -04002577<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 -04002578affects the four corners of a stroked rectangle, and the connected segments in a
2579stroked path.
2580
2581Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2582radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2583connect the thick strokes.
2584
Cary Clark7cfcbca2018-01-04 16:11:51 -05002585The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002586not contain the actual join. For instance, a fill path constructed with round joins does
2587not necessarily include circles at each connected segment.
2588
2589### Constants
2590
2591<table>
2592 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002593 <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>.
2594If the extension exceeds <a href="#Miter_Limit">Miter Limit</a>, <a href="#SkPaint_kBevel_Join">kBevel Join</a> is used instead.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002595 </tr>
2596 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002597 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002598 </tr>
2599 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002600 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002601 </tr>
2602 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002603 <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>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002604 </tr>
2605 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002606 <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>.
2607<a href="#Stroke_Join">Stroke Join</a> is set to <a href="#SkPaint_kMiter_Join">kMiter Join</a> by default.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002608 </tr>
2609 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002610 <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.
2611May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002612 </tr>
2613</table>
2614
2615### Example
2616
2617<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2618
2619### See Also
2620
Cary Clark8cc16c72017-08-25 11:51:49 -04002621<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 -04002622
2623
2624
Cary Clark493df1f2017-08-25 13:14:33 -04002625<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002626## getStrokeJoin
2627
Cary Clarka560c472017-11-27 10:44:06 -05002628<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002629Join getStrokeJoin() const
2630</pre>
2631
Cary Clark0c5f5462017-12-15 11:21:51 -05002632The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002633
2634### Return Value
2635
Cary Clark8cc16c72017-08-25 11:51:49 -04002636one 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 -04002637
2638### Example
2639
2640<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2641
2642#### Example Output
2643
2644~~~~
2645kMiter_Join == default stroke join
2646~~~~
2647
2648</fiddle-embed></div>
2649
2650### See Also
2651
Cary Clark8cc16c72017-08-25 11:51:49 -04002652<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002653
2654---
2655
Cary Clark493df1f2017-08-25 13:14:33 -04002656<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002657## setStrokeJoin
2658
Cary Clarka560c472017-11-27 10:44:06 -05002659<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002660void setStrokeJoin(Join join)
2661</pre>
2662
Cary Clark0c5f5462017-12-15 11:21:51 -05002663The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002664
2665### Parameters
2666
Cary Clark8cc16c72017-08-25 11:51:49 -04002667<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2668one 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 -04002669otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002670 </tr>
2671</table>
2672
2673### Example
2674
2675<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2676
2677#### Example Output
2678
2679~~~~
2680kMiter_Join == paint.getStrokeJoin()
2681~~~~
2682
2683</fiddle-embed></div>
2684
2685### See Also
2686
Cary Clark8cc16c72017-08-25 11:51:49 -04002687<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002688
2689---
2690
2691### See Also
2692
Cary Clark8cc16c72017-08-25 11:51:49 -04002693<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002694
Cary Clark08895c42018-02-01 09:37:32 -05002695## <a name="Fill_Path"></a> Fill Path
2696
Cary Clark8cc16c72017-08-25 11:51:49 -04002697<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 -04002698
Cary Clark8cc16c72017-08-25 11:51:49 -04002699If <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 -04002700replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2701destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002702
Cary Clark4c06f5e2017-08-04 12:48:24 -04002703Fill <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
2704the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002705
Cary Clark7cfcbca2018-01-04 16:11:51 -05002706If <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 -04002707and <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>,
2708and <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 -04002709
Cary Clark7cfcbca2018-01-04 16:11:51 -05002710Fill <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 -04002711
Cary Clark8cc16c72017-08-25 11:51:49 -04002712If 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>
2713returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002714
Cary Clark493df1f2017-08-25 13:14:33 -04002715<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002716## getFillPath
2717
Cary Clarka560c472017-11-27 10:44:06 -05002718<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2719bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002720</pre>
2721
2722The filled equivalent of the stroked path.
2723
2724### Parameters
2725
Cary Clark8cc16c72017-08-25 11:51:49 -04002726<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002727<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002728 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2729resulting <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>
2730 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002731optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002732 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002733if > 1, increase precision, else if (0 < res < 1) reduce precision
2734to favor speed and size</td>
2735 </tr>
2736</table>
2737
2738### Return Value
2739
Cary Clark8cc16c72017-08-25 11:51:49 -04002740true if the path represents <a href="#Style_Fill">Style Fill</a>, or false if it represents <a href="#Hairline">Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002741
2742### Example
2743
Cary Clarkce101242017-09-01 15:51:02 -04002744<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href="#Quad">Quad</a> stroke is turned into a filled path with increasing levels of precision.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002745At the lowest precision, the <a href="#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark12799e12017-07-28 15:18:29 -04002746At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2747
2748---
2749
Cary Clark2dc84ad2018-01-26 12:56:22 -05002750<a name="SkPaint_getFillPath_2"></a>
2751
Cary Clarka560c472017-11-27 10:44:06 -05002752<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002753bool getFillPath(const SkPath& src, SkPath* dst) const
2754</pre>
2755
2756The filled equivalent of the stroked path.
2757
Cary Clark8cc16c72017-08-25 11:51:49 -04002758Replaces <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>.
2759<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 -04002760
2761### Parameters
2762
Cary Clark8cc16c72017-08-25 11:51:49 -04002763<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002764<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002765 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2766resulting <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 -04002767 </tr>
2768</table>
2769
2770### Return Value
2771
Cary Clark8cc16c72017-08-25 11:51:49 -04002772true if the path represents <a href="#Style_Fill">Style Fill</a>, or false if it represents <a href="#Hairline">Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002773
2774### Example
2775
2776<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2777
2778---
2779
2780### See Also
2781
Cary Clark8cc16c72017-08-25 11:51:49 -04002782<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 -04002783
Cary Clark08895c42018-02-01 09:37:32 -05002784## <a name="Shader_Methods"></a> Shader Methods
2785
Cary Clark4c06f5e2017-08-04 12:48:24 -04002786<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2787<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002788If <a href="#Paint">Paint</a> has no <a href="undocumented#Shader">Shader</a>, then <a href="undocumented#Color">Color</a> fills the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002789
Cary Clark8cc16c72017-08-25 11:51:49 -04002790<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2791If <a href="undocumented#Shader">Shader</a> object defines only <a href="#Alpha">Color Alpha</a>, then <a href="undocumented#Color">Color</a> modulated by <a href="#Alpha">Color Alpha</a> describes
Cary Clark12799e12017-07-28 15:18:29 -04002792the fill.
2793
Cary Clark8cc16c72017-08-25 11:51:49 -04002794The drawn transparency can be modified without altering <a href="undocumented#Shader">Shader</a>, by changing <a href="#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002795
2796### Example
2797
2798<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2799
Cary Clark8cc16c72017-08-25 11:51:49 -04002800If <a href="undocumented#Shader">Shader</a> generates only <a href="#Alpha">Color Alpha</a> then all components of <a href="undocumented#Color">Color</a> modulate the output.
Cary Clark12799e12017-07-28 15:18:29 -04002801
2802### Example
2803
2804<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2805
Cary Clark493df1f2017-08-25 13:14:33 -04002806<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002807## getShader
2808
Cary Clarka560c472017-11-27 10:44:06 -05002809<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002810SkShader* getShader() const
2811</pre>
2812
2813Optional colors used when filling a path, such as a gradient.
2814
Cary Clark4c06f5e2017-08-04 12:48:24 -04002815Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002816
2817### Return Value
2818
Cary Clark4c06f5e2017-08-04 12:48:24 -04002819<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002820
2821### Example
2822
2823<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2824
2825#### Example Output
2826
2827~~~~
2828nullptr == shader
2829nullptr != shader
2830~~~~
2831
2832</fiddle-embed></div>
2833
2834---
2835
Cary Clark493df1f2017-08-25 13:14:33 -04002836<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002837## refShader
2838
Cary Clarka560c472017-11-27 10:44:06 -05002839<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002840sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002841</pre>
2842
2843Optional colors used when filling a path, such as a gradient.
2844
Cary Clark4c06f5e2017-08-04 12:48:24 -04002845Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002846
2847### Return Value
2848
Cary Clark4c06f5e2017-08-04 12:48:24 -04002849<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002850
2851### Example
2852
2853<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2854
2855#### Example Output
2856
2857~~~~
2858shader unique: true
2859shader unique: false
2860~~~~
2861
2862</fiddle-embed></div>
2863
2864---
2865
Cary Clark493df1f2017-08-25 13:14:33 -04002866<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002867## setShader
2868
Cary Clarka560c472017-11-27 10:44:06 -05002869<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002870void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002871</pre>
2872
2873Optional colors used when filling a path, such as a gradient.
2874
Cary Clarkd0530ba2017-09-14 11:25:39 -04002875Sets <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 -04002876Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002877
2878### Parameters
2879
Cary Clark8cc16c72017-08-25 11:51:49 -04002880<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002881how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002882 </tr>
2883</table>
2884
2885### Example
2886
2887<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2888
2889---
2890
Cary Clark08895c42018-02-01 09:37:32 -05002891## <a name="Color_Filter_Methods"></a> Color Filter Methods
2892
Cary Clark4c06f5e2017-08-04 12:48:24 -04002893<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2894<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 -04002895If <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 -04002896
Cary Clark8cc16c72017-08-25 11:51:49 -04002897The drawn transparency can be modified without altering <a href="undocumented#Color_Filter">Color Filter</a>, by changing <a href="#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002898
2899### Example
2900
2901<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2902
Cary Clark493df1f2017-08-25 13:14:33 -04002903<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002904## getColorFilter
2905
Cary Clarka560c472017-11-27 10:44:06 -05002906<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002907SkColorFilter* getColorFilter() const
2908</pre>
2909
Cary Clark4c06f5e2017-08-04 12:48:24 -04002910Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2911Does 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 -04002912
2913### Return Value
2914
Cary Clark4c06f5e2017-08-04 12:48:24 -04002915<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002916
2917### Example
2918
2919<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2920
2921#### Example Output
2922
2923~~~~
2924nullptr == color filter
2925nullptr != color filter
2926~~~~
2927
2928</fiddle-embed></div>
2929
2930---
2931
Cary Clark493df1f2017-08-25 13:14:33 -04002932<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002933## refColorFilter
2934
Cary Clarka560c472017-11-27 10:44:06 -05002935<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002936sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002937</pre>
2938
Cary Clark4c06f5e2017-08-04 12:48:24 -04002939Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2940Increases <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 -04002941
2942### Return Value
2943
Cary Clark4c06f5e2017-08-04 12:48:24 -04002944<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002945
2946### Example
2947
2948<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2949
2950#### Example Output
2951
2952~~~~
2953color filter unique: true
2954color filter unique: false
2955~~~~
2956
2957</fiddle-embed></div>
2958
2959---
2960
Cary Clark493df1f2017-08-25 13:14:33 -04002961<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002962## setColorFilter
2963
Cary Clarka560c472017-11-27 10:44:06 -05002964<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002965void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002966</pre>
2967
Cary Clark6fc50412017-09-21 12:31:06 -04002968Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2969<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2970
2971Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002972
2973### Parameters
2974
Cary Clark8cc16c72017-08-25 11:51:49 -04002975<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002976<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002977 </tr>
2978</table>
2979
2980### Example
2981
2982<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2983
2984---
2985
Cary Clark08895c42018-02-01 09:37:32 -05002986## <a name="Blend_Mode_Methods"></a> Blend Mode Methods
2987
Cary Clark4c06f5e2017-08-04 12:48:24 -04002988<a href="undocumented#Blend_Mode">Blend Mode</a> describes how <a href="undocumented#Color">Color</a> combines with the destination color.
Cary Clark8cc16c72017-08-25 11:51:49 -04002989The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002990over the destination color.
2991
2992### Example
2993
2994<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2995
2996### See Also
2997
Cary Clark4c06f5e2017-08-04 12:48:24 -04002998<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002999
Cary Clark493df1f2017-08-25 13:14:33 -04003000<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003001## getBlendMode
3002
Cary Clarka560c472017-11-27 10:44:06 -05003003<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003004SkBlendMode getBlendMode() const
3005</pre>
3006
Cary Clark4c06f5e2017-08-04 12:48:24 -04003007Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003008By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003009
3010### Return Value
3011
3012mode used to combine source color with destination color
3013
3014### Example
3015
3016<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
3017
3018#### Example Output
3019
3020~~~~
3021kSrcOver == getBlendMode
3022kSrcOver != getBlendMode
3023~~~~
3024
3025</fiddle-embed></div>
3026
3027---
3028
Cary Clark493df1f2017-08-25 13:14:33 -04003029<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003030## isSrcOver
3031
Cary Clarka560c472017-11-27 10:44:06 -05003032<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003033bool isSrcOver() const
3034</pre>
3035
Cary Clark8cc16c72017-08-25 11:51:49 -04003036Returns true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04003037
3038### Return Value
3039
Cary Clark8cc16c72017-08-25 11:51:49 -04003040true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003041
3042### Example
3043
3044<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3045
3046#### Example Output
3047
3048~~~~
3049isSrcOver == true
3050isSrcOver != true
3051~~~~
3052
3053</fiddle-embed></div>
3054
3055---
3056
Cary Clark493df1f2017-08-25 13:14:33 -04003057<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003058## setBlendMode
3059
Cary Clarka560c472017-11-27 10:44:06 -05003060<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003061void setBlendMode(SkBlendMode mode)
3062</pre>
3063
Cary Clark7cfcbca2018-01-04 16:11:51 -05003064Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003065Does not check for valid input.
3066
3067### Parameters
3068
Cary Clark8cc16c72017-08-25 11:51:49 -04003069<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003070<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003071 </tr>
3072</table>
3073
3074### Example
3075
3076<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3077
3078#### Example Output
3079
3080~~~~
3081isSrcOver == true
3082isSrcOver != true
3083~~~~
3084
3085</fiddle-embed></div>
3086
3087---
3088
Cary Clark08895c42018-02-01 09:37:32 -05003089## <a name="Path_Effect_Methods"></a> Path Effect Methods
3090
Cary Clark4c06f5e2017-08-04 12:48:24 -04003091<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3092<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 -04003093If <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 -04003094
3095### Example
3096
3097<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3098
3099### See Also
3100
Cary Clark4c06f5e2017-08-04 12:48:24 -04003101<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003102
Cary Clark493df1f2017-08-25 13:14:33 -04003103<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003104## getPathEffect
3105
Cary Clarka560c472017-11-27 10:44:06 -05003106<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003107SkPathEffect* getPathEffect() const
3108</pre>
3109
Cary Clark4c06f5e2017-08-04 12:48:24 -04003110Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3111Does 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 -04003112
3113### Return Value
3114
Cary Clark4c06f5e2017-08-04 12:48:24 -04003115<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003116
3117### Example
3118
3119<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3120
3121#### Example Output
3122
3123~~~~
3124nullptr == path effect
3125nullptr != path effect
3126~~~~
3127
3128</fiddle-embed></div>
3129
3130---
3131
Cary Clark493df1f2017-08-25 13:14:33 -04003132<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003133## refPathEffect
3134
Cary Clarka560c472017-11-27 10:44:06 -05003135<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003136sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003137</pre>
3138
Cary Clark4c06f5e2017-08-04 12:48:24 -04003139Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3140Increases <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 -04003141
3142### Return Value
3143
Cary Clark4c06f5e2017-08-04 12:48:24 -04003144<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003145
3146### Example
3147
Cary Clarka560c472017-11-27 10:44:06 -05003148<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003149
3150#### Example Output
3151
3152~~~~
3153path effect unique: true
3154path effect unique: false
3155~~~~
3156
3157</fiddle-embed></div>
3158
3159---
3160
Cary Clark493df1f2017-08-25 13:14:33 -04003161<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003162## setPathEffect
3163
Cary Clarka560c472017-11-27 10:44:06 -05003164<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003165void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003166</pre>
3167
Cary Clark6fc50412017-09-21 12:31:06 -04003168Sets <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
3169<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3170
3171Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003172
3173### Parameters
3174
Cary Clark8cc16c72017-08-25 11:51:49 -04003175<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003176replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003177 </tr>
3178</table>
3179
3180### Example
3181
3182<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3183
3184---
3185
Cary Clark08895c42018-02-01 09:37:32 -05003186## <a name="Mask_Filter_Methods"></a> Mask Filter Methods
3187
Cary Clarkce101242017-09-01 15:51:02 -04003188<a href="undocumented#Mask_Filter">Mask Filter</a> uses coverage of the shape drawn to create <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
Update Docs949cfd42018-01-22 05:50:26 +00003189<a href="undocumented#Mask_Filter">Mask Filter</a> takes a <a href="undocumented#Mask">Mask</a>, and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003190
3191<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3192creating 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
3193modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003194
3195### Example
3196
3197<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3198
Cary Clark493df1f2017-08-25 13:14:33 -04003199<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003200## getMaskFilter
3201
Cary Clarka560c472017-11-27 10:44:06 -05003202<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003203SkMaskFilter* getMaskFilter() const
3204</pre>
3205
Cary Clark4c06f5e2017-08-04 12:48:24 -04003206Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3207Does 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 -04003208
3209### Return Value
3210
Cary Clark4c06f5e2017-08-04 12:48:24 -04003211<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003212
3213### Example
3214
3215<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3216
3217#### Example Output
3218
3219~~~~
3220nullptr == mask filter
3221nullptr != mask filter
3222~~~~
3223
3224</fiddle-embed></div>
3225
3226---
3227
Cary Clark493df1f2017-08-25 13:14:33 -04003228<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003229## refMaskFilter
3230
Cary Clarka560c472017-11-27 10:44:06 -05003231<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003232sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003233</pre>
3234
Cary Clark4c06f5e2017-08-04 12:48:24 -04003235Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003236
Cary Clark4c06f5e2017-08-04 12:48:24 -04003237Increases <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 -04003238
3239### Return Value
3240
Cary Clark4c06f5e2017-08-04 12:48:24 -04003241<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003242
3243### Example
3244
3245<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3246
3247#### Example Output
3248
3249~~~~
3250mask filter unique: true
3251mask filter unique: false
3252~~~~
3253
3254</fiddle-embed></div>
3255
3256---
3257
Cary Clark493df1f2017-08-25 13:14:33 -04003258<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003259## setMaskFilter
3260
Cary Clarka560c472017-11-27 10:44:06 -05003261<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003262void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003263</pre>
3264
Cary Clark6fc50412017-09-21 12:31:06 -04003265Sets <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
3266<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
3267<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3268
Cary Clark6fc50412017-09-21 12:31:06 -04003269Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003270
3271### Parameters
3272
Cary Clark8cc16c72017-08-25 11:51:49 -04003273<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003274modifies clipping mask generated from drawn geometry</td>
3275 </tr>
3276</table>
3277
3278### Example
3279
3280<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3281
3282---
3283
Cary Clark08895c42018-02-01 09:37:32 -05003284## <a name="Typeface_Methods"></a> Typeface Methods
3285
Cary Clark4c06f5e2017-08-04 12:48:24 -04003286<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3287<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3288The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003289implementation.
3290
3291### Example
3292
Ben Wagner700ff172017-11-08 15:37:22 -05003293<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003294
Cary Clark493df1f2017-08-25 13:14:33 -04003295<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003296## getTypeface
3297
Cary Clarka560c472017-11-27 10:44:06 -05003298<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003299SkTypeface* getTypeface() const
3300</pre>
3301
Cary Clark4c06f5e2017-08-04 12:48:24 -04003302Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003303Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003304
3305### Return Value
3306
Cary Clark4c06f5e2017-08-04 12:48:24 -04003307<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003308
3309### Example
3310
Cary Clark71961fb2018-01-05 14:21:59 -05003311<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003312
3313#### Example Output
3314
3315~~~~
3316nullptr == typeface
3317nullptr != typeface
3318~~~~
3319
3320</fiddle-embed></div>
3321
3322---
3323
Cary Clark493df1f2017-08-25 13:14:33 -04003324<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003325## refTypeface
3326
Cary Clarka560c472017-11-27 10:44:06 -05003327<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003328sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003329</pre>
3330
Cary Clark4c06f5e2017-08-04 12:48:24 -04003331Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003332
3333### Return Value
3334
Cary Clark4c06f5e2017-08-04 12:48:24 -04003335<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003336
3337### Example
3338
Cary Clark71961fb2018-01-05 14:21:59 -05003339<div><fiddle-embed name="4bf8ed109c4b46d8a05c8b7763c1982c">
Cary Clark12799e12017-07-28 15:18:29 -04003340
3341#### Example Output
3342
3343~~~~
3344typeface1 != typeface2
3345typeface1 == typeface2
3346~~~~
3347
3348</fiddle-embed></div>
3349
3350---
3351
Cary Clark493df1f2017-08-25 13:14:33 -04003352<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003353## setTypeface
3354
Cary Clarka560c472017-11-27 10:44:06 -05003355<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003356void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003357</pre>
3358
Cary Clark7cfcbca2018-01-04 16:11:51 -05003359Sets <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 -04003360Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3361<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003362
3363### Parameters
3364
Cary Clark8cc16c72017-08-25 11:51:49 -04003365<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003366font and style used to draw text</td>
3367 </tr>
3368</table>
3369
3370### Example
3371
Cary Clark71961fb2018-01-05 14:21:59 -05003372<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003373
3374---
3375
Cary Clark08895c42018-02-01 09:37:32 -05003376## <a name="Image_Filter_Methods"></a> Image Filter Methods
3377
Cary Clark8cc16c72017-08-25 11:51:49 -04003378<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3379with <a href="undocumented#Blend_Mode">Blend Mode</a> set to <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>. <a href="undocumented#Image_Filter">Image Filter</a> creates a new bitmap,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003380which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003381
Cary Clark4c06f5e2017-08-04 12:48:24 -04003382<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 Clarkce101242017-09-01 15:51:02 -04003383can operate on all channels of <a href="undocumented#Color">Color</a>, while <a href="undocumented#Mask_Filter">Mask Filter</a> generates <a href="#Alpha">Alpha</a> only.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003384<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 +00003385<a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003386
3387### Example
3388
Cary Clarka560c472017-11-27 10:44:06 -05003389<div><fiddle-embed name="0b2eec148d6397d6231e1fa0b3d1496d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003390
Cary Clark493df1f2017-08-25 13:14:33 -04003391<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003392## getImageFilter
3393
Cary Clarka560c472017-11-27 10:44:06 -05003394<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003395SkImageFilter* getImageFilter() const
3396</pre>
3397
Cary Clark4c06f5e2017-08-04 12:48:24 -04003398Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3399Does 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 -04003400
3401### Return Value
3402
Cary Clark4c06f5e2017-08-04 12:48:24 -04003403<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003404
3405### Example
3406
Cary Clarka560c472017-11-27 10:44:06 -05003407<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003408
3409#### Example Output
3410
3411~~~~
3412nullptr == image filter
3413nullptr != image filter
3414~~~~
3415
3416</fiddle-embed></div>
3417
3418---
3419
Cary Clark493df1f2017-08-25 13:14:33 -04003420<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003421## refImageFilter
3422
Cary Clarka560c472017-11-27 10:44:06 -05003423<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003424sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003425</pre>
3426
Cary Clark4c06f5e2017-08-04 12:48:24 -04003427Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3428Increases <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 -04003429
3430### Return Value
3431
Cary Clark4c06f5e2017-08-04 12:48:24 -04003432<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003433
3434### Example
3435
3436<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3437
3438#### Example Output
3439
3440~~~~
3441image filter unique: true
3442image filter unique: false
3443~~~~
3444
3445</fiddle-embed></div>
3446
3447---
3448
Cary Clark493df1f2017-08-25 13:14:33 -04003449<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003450## setImageFilter
3451
Cary Clarka560c472017-11-27 10:44:06 -05003452<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003453void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003454</pre>
3455
Cary Clark6fc50412017-09-21 12:31:06 -04003456Sets <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
3457<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 -04003458on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003459
Cary Clark6fc50412017-09-21 12:31:06 -04003460Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003461
3462### Parameters
3463
Cary Clark8cc16c72017-08-25 11:51:49 -04003464<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003465how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003466 </tr>
3467</table>
3468
3469### Example
3470
3471<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3472
3473---
3474
Cary Clark08895c42018-02-01 09:37:32 -05003475## <a name="Draw_Looper_Methods"></a> Draw Looper Methods
3476
Cary Clark4c06f5e2017-08-04 12:48:24 -04003477<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 -04003478to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003479
Cary Clark4c06f5e2017-08-04 12:48:24 -04003480<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3481<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 -05003482Set <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 -04003483
3484### Example
3485
3486<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3487
Cary Clark493df1f2017-08-25 13:14:33 -04003488<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003489## getDrawLooper
3490
Cary Clarka560c472017-11-27 10:44:06 -05003491<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003492SkDrawLooper* getDrawLooper() const
3493</pre>
3494
Cary Clark4c06f5e2017-08-04 12:48:24 -04003495Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3496Does 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 -04003497
3498### Return Value
3499
Cary Clark4c06f5e2017-08-04 12:48:24 -04003500<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003501
3502### Example
3503
3504<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3505
3506#### Example Output
3507
3508~~~~
3509nullptr == draw looper
3510nullptr != draw looper
3511~~~~
3512
3513</fiddle-embed></div>
3514
3515---
3516
Cary Clark493df1f2017-08-25 13:14:33 -04003517<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003518## refDrawLooper
3519
Cary Clarka560c472017-11-27 10:44:06 -05003520<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003521sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003522</pre>
3523
Cary Clark4c06f5e2017-08-04 12:48:24 -04003524Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3525Increases <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 -04003526
3527### Return Value
3528
Cary Clark4c06f5e2017-08-04 12:48:24 -04003529<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003530
3531### Example
3532
3533<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3534
3535#### Example Output
3536
3537~~~~
3538draw looper unique: true
3539draw looper unique: false
3540~~~~
3541
3542</fiddle-embed></div>
3543
3544---
3545
Cary Clark493df1f2017-08-25 13:14:33 -04003546<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003547## getLooper
3548
Cary Clarka560c472017-11-27 10:44:06 -05003549<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003550SkDrawLooper* getLooper() const
3551</pre>
3552
Cary Clark12799e12017-07-28 15:18:29 -04003553---
3554
Cary Clark493df1f2017-08-25 13:14:33 -04003555<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003556## setDrawLooper
3557
Cary Clarka560c472017-11-27 10:44:06 -05003558<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003559void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003560</pre>
3561
Cary Clark6fc50412017-09-21 12:31:06 -04003562Sets <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
3563<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
3564drawing unaltered.
3565
3566Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003567
3568### Parameters
3569
Cary Clark8cc16c72017-08-25 11:51:49 -04003570<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003571iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003572 </tr>
3573</table>
3574
3575### Example
3576
3577<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3578
3579---
3580
Cary Clark493df1f2017-08-25 13:14:33 -04003581<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003582## setLooper
3583
Cary Clarka560c472017-11-27 10:44:06 -05003584<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003585void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003586</pre>
3587
Cary Clark12799e12017-07-28 15:18:29 -04003588---
3589
Cary Clark08895c42018-02-01 09:37:32 -05003590## <a name="Text_Align"></a> Text Align
Cary Clark12799e12017-07-28 15:18:29 -04003591
Cary Clark8cc16c72017-08-25 11:51:49 -04003592## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003593
Cary Clarka560c472017-11-27 10:44:06 -05003594<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003595enum <a href="#SkPaint_Align">Align</a> {
3596<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3597<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3598<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003599};</pre>
3600
Cary Clark8cc16c72017-08-25 11:51:49 -04003601<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clarkce101242017-09-01 15:51:02 -04003602<a href="#SkPaint_Align">Align</a> affects <a href="#Glyph">Glyphs</a> drawn with: <a href="#SkCanvas_drawText">SkCanvas::drawText</a>, <a href="#SkCanvas_drawPosText">SkCanvas::drawPosText</a>,
Cary Clark7cfcbca2018-01-04 16:11:51 -05003603<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04003604<a href="#SkCanvas_drawTextOnPathHV">SkCanvas::drawTextOnPathHV</a>, <a href="#SkCanvas_drawTextRSXform">SkCanvas::drawTextRSXform</a>, <a href="#SkCanvas_drawTextBlob">SkCanvas::drawTextBlob</a>,
Cary Clark7cfcbca2018-01-04 16:11:51 -05003605and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
Cary Clarkce101242017-09-01 15:51:02 -04003606as well as calls that place text <a href="#Glyph">Glyphs</a> like <a href="#SkPaint_getTextWidths">getTextWidths</a> and <a href="#SkPaint_getTextPath">getTextPath</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003607
3608The text position is set by the font for both horizontal and vertical text.
3609Typically, for horizontal text, the position is to the left side of the glyph on the
3610base line; and for vertical text, the position is the horizontal center of the glyph
3611at the caps height.
3612
Cary Clark7cfcbca2018-01-04 16:11:51 -05003613<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 -04003614using the metrics returned by the font.
3615
Cary Clark8cc16c72017-08-25 11:51:49 -04003616<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003617
3618### Constants
3619
3620<table>
3621 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003622 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003623 </tr>
3624 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003625 <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
3626half its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003627 </tr>
3628 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003629 <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,
3630and by its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003631 </tr>
3632
3633</table>
3634
Cary Clark8cc16c72017-08-25 11:51:49 -04003635## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003636
Cary Clarka560c472017-11-27 10:44:06 -05003637<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003638enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003639<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003640};</pre>
3641
3642### Constants
3643
3644<table>
3645 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003646 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003647 </tr>
3648
3649</table>
3650
3651### Example
3652
3653<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3654
3655### Example
3656
Cary Clark8cc16c72017-08-25 11:51:49 -04003657<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.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003658
Cary Clark493df1f2017-08-25 13:14:33 -04003659<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003660## getTextAlign
3661
Cary Clarka560c472017-11-27 10:44:06 -05003662<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003663Align getTextAlign() const
3664</pre>
3665
Cary Clark8cc16c72017-08-25 11:51:49 -04003666Returns <a href="#Text_Align">Text Align</a>.
3667Returns <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 -04003668
3669### Return Value
3670
3671text placement relative to position
3672
3673### Example
3674
3675<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3676
3677#### Example Output
3678
3679~~~~
3680kLeft_Align == default
3681~~~~
3682
3683</fiddle-embed></div>
3684
3685---
3686
Cary Clark493df1f2017-08-25 13:14:33 -04003687<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003688## setTextAlign
3689
Cary Clarka560c472017-11-27 10:44:06 -05003690<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003691void setTextAlign(Align align)
3692</pre>
3693
Cary Clark8cc16c72017-08-25 11:51:49 -04003694Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3695Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003696
3697### Parameters
3698
Cary Clark8cc16c72017-08-25 11:51:49 -04003699<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003700text placement relative to position</td>
3701 </tr>
3702</table>
3703
3704### Example
3705
Cary Clark4c06f5e2017-08-04 12:48:24 -04003706<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 Clark12799e12017-07-28 15:18:29 -04003707alignment out of range has no effect.</div></fiddle-embed></div>
3708
3709---
3710
Cary Clark08895c42018-02-01 09:37:32 -05003711## <a name="Text_Size"></a> Text Size
3712
Cary Clark8cc16c72017-08-25 11:51:49 -04003713<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3714<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3715<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003716Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003717
3718### Example
3719
3720<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3721
Cary Clark493df1f2017-08-25 13:14:33 -04003722<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003723## getTextSize
3724
Cary Clarka560c472017-11-27 10:44:06 -05003725<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003726SkScalar getTextSize() const
3727</pre>
3728
Cary Clark8cc16c72017-08-25 11:51:49 -04003729Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003730
3731### Return Value
3732
3733typographic height of text
3734
3735### Example
3736
3737<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3738
3739---
3740
Cary Clark493df1f2017-08-25 13:14:33 -04003741<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003742## setTextSize
3743
Cary Clarka560c472017-11-27 10:44:06 -05003744<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003745void setTextSize(SkScalar textSize)
3746</pre>
3747
Cary Clark8cc16c72017-08-25 11:51:49 -04003748Sets <a href="#Text_Size">Text Size</a> in points.
3749Has 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 -04003750
3751### Parameters
3752
Cary Clark8cc16c72017-08-25 11:51:49 -04003753<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003754typographic height of text</td>
3755 </tr>
3756</table>
3757
3758### Example
3759
3760<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3761
3762---
3763
Cary Clark08895c42018-02-01 09:37:32 -05003764## <a name="Text_Scale_X"></a> Text Scale X
3765
Cary Clark8cc16c72017-08-25 11:51:49 -04003766<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003767<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003768is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003769<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3770<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003771
3772### Example
3773
3774<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3775
Cary Clark493df1f2017-08-25 13:14:33 -04003776<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003777## getTextScaleX
3778
Cary Clarka560c472017-11-27 10:44:06 -05003779<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003780SkScalar getTextScaleX() const
3781</pre>
3782
Cary Clark8cc16c72017-08-25 11:51:49 -04003783Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003784Default value is 1.
3785
3786### Return Value
3787
3788text horizontal scale
3789
3790### Example
3791
3792<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3793
3794---
3795
Cary Clark493df1f2017-08-25 13:14:33 -04003796<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003797## setTextScaleX
3798
Cary Clarka560c472017-11-27 10:44:06 -05003799<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003800void setTextScaleX(SkScalar scaleX)
3801</pre>
3802
Cary Clark8cc16c72017-08-25 11:51:49 -04003803Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003804Default value is 1.
3805
3806### Parameters
3807
Cary Clark8cc16c72017-08-25 11:51:49 -04003808<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003809text horizontal scale</td>
3810 </tr>
3811</table>
3812
3813### Example
3814
3815<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3816
3817---
3818
Cary Clark08895c42018-02-01 09:37:32 -05003819## <a name="Text_Skew_X"></a> Text Skew X
3820
Cary Clark8cc16c72017-08-25 11:51:49 -04003821<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003822<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003823is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003824<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3825<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003826
3827### Example
3828
3829<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3830
Cary Clark493df1f2017-08-25 13:14:33 -04003831<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003832## getTextSkewX
3833
Cary Clarka560c472017-11-27 10:44:06 -05003834<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003835SkScalar getTextSkewX() const
3836</pre>
3837
Cary Clark8cc16c72017-08-25 11:51:49 -04003838Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003839Default value is zero.
3840
3841### Return Value
3842
3843additional shear in x-axis relative to y-axis
3844
3845### Example
3846
3847<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3848
3849---
3850
Cary Clark493df1f2017-08-25 13:14:33 -04003851<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003852## setTextSkewX
3853
Cary Clarka560c472017-11-27 10:44:06 -05003854<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003855void setTextSkewX(SkScalar skewX)
3856</pre>
3857
Cary Clark8cc16c72017-08-25 11:51:49 -04003858Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003859Default value is zero.
3860
3861### Parameters
3862
Cary Clark8cc16c72017-08-25 11:51:49 -04003863<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003864additional shear in x-axis relative to y-axis</td>
3865 </tr>
3866</table>
3867
3868### Example
3869
3870<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3871
3872---
3873
Cary Clark08895c42018-02-01 09:37:32 -05003874## <a name="Text_Encoding"></a> Text Encoding
Cary Clark12799e12017-07-28 15:18:29 -04003875
Cary Clark8cc16c72017-08-25 11:51:49 -04003876## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003877
Cary Clarka560c472017-11-27 10:44:06 -05003878<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003879enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3880<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3881<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3882<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3883<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003884};</pre>
3885
Cary Clark6fc50412017-09-21 12:31:06 -04003886<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003887size, 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 -04003888
Cary Clarka560c472017-11-27 10:44:06 -05003889Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003890All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003891in the total storage required.
3892
Cary Clark7cfcbca2018-01-04 16:11:51 -05003893<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 -04003894
Cary Clark7cfcbca2018-01-04 16:11:51 -05003895<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 -04003896
Cary Clark7cfcbca2018-01-04 16:11:51 -05003897<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 -04003898
Cary Clark7cfcbca2018-01-04 16:11:51 -05003899<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 -04003900A glyph index is a 16-bit word.
3901
Cary Clark8cc16c72017-08-25 11:51:49 -04003902<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 -04003903
3904### Constants
3905
3906<table>
3907 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003908 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003909 </tr>
3910 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003911 <td><a name="SkPaint_kUTF16_TextEncoding"> <code><strong>SkPaint::kUTF16_TextEncoding </strong></code> </a></td><td>1</td><td>Uses two byte words to represent most of Unicode.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003912 </tr>
3913 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003914 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003915 </tr>
3916 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003917 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003918 </tr>
3919
3920</table>
3921
3922### Example
3923
Cary Clarka560c472017-11-27 10:44:06 -05003924<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3925Second line is encoded in UTF-16.
3926Third line is encoded in UTF-32.
Cary Clark12799e12017-07-28 15:18:29 -04003927Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
3928
Cary Clark493df1f2017-08-25 13:14:33 -04003929<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003930## getTextEncoding
3931
Cary Clarka560c472017-11-27 10:44:06 -05003932<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003933TextEncoding getTextEncoding() const
3934</pre>
3935
Cary Clark8cc16c72017-08-25 11:51:49 -04003936Returns <a href="#Text_Encoding">Text Encoding</a>.
3937<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 -04003938
3939### Return Value
3940
Cary Clark7cfcbca2018-01-04 16:11:51 -05003941one 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 -04003942<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003943
3944### Example
3945
3946<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
3947
3948#### Example Output
3949
3950~~~~
3951kUTF8_TextEncoding == text encoding
3952kGlyphID_TextEncoding == text encoding
3953~~~~
3954
3955</fiddle-embed></div>
3956
3957---
3958
Cary Clark493df1f2017-08-25 13:14:33 -04003959<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003960## setTextEncoding
3961
Cary Clarka560c472017-11-27 10:44:06 -05003962<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003963void setTextEncoding(TextEncoding encoding)
3964</pre>
3965
Cary Clark7cfcbca2018-01-04 16:11:51 -05003966Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003967<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
3968Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003969
3970### Parameters
3971
Cary Clark8cc16c72017-08-25 11:51:49 -04003972<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003973one 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 -04003974<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003975 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04003976#
3977
Cary Clark12799e12017-07-28 15:18:29 -04003978</table>
3979
3980### Example
3981
3982<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
3983
3984#### Example Output
3985
3986~~~~
39874 != text encoding
3988~~~~
3989
3990</fiddle-embed></div>
3991
3992---
3993
Cary Clark08895c42018-02-01 09:37:32 -05003994## <a name="Font_Metrics"></a> Font Metrics
3995
Cary Clarkce101242017-09-01 15:51:02 -04003996<a href="#Font_Metrics">Font Metrics</a> describe dimensions common to the <a href="#Glyph">Glyphs</a> in <a href="undocumented#Typeface">Typeface</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003997The 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 -04003998<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04003999
Cary Clark4c06f5e2017-08-04 12:48:24 -04004000<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 -04004001X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4002are positive.
4003Y-axis values above the baseline are negative, and below the baseline are positive.
4004
4005### Example
4006
Ben Wagnere5806492017-11-09 12:08:31 -05004007<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004008
Cary Clark8cc16c72017-08-25 11:51:49 -04004009# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04004010
Cary Clarka560c472017-11-27 10:44:06 -05004011<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004012struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4013enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4014<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4015<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4016<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4017<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004018};
4019
Cary Clark8cc16c72017-08-25 11:51:49 -04004020uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4021<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4022<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4023<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4024<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4025<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4026<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4027<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4028<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4029<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4030<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4031<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4032<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4033<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4034<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4035<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004036
Cary Clark8cc16c72017-08-25 11:51:49 -04004037bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4038bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4039bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4040bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004041};</pre>
4042
Cary Clark154beea2017-10-26 07:58:48 -04004043<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
4044computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4045not available.
4046
Ben Wagnere5806492017-11-09 12:08:31 -05004047All vertical values relative to the baseline are given y-down. As such, zero is on the
4048baseline, negative values are above the baseline, and positive values are below the
4049baseline.
4050
Cary Clark154beea2017-10-26 07:58:48 -04004051<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
4052are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004053
Cary Clark154beea2017-10-26 07:58:48 -04004054<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
4055are valid, since their value may be zero.
4056
Cary Clark8cc16c72017-08-25 11:51:49 -04004057## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004058
Cary Clarka560c472017-11-27 10:44:06 -05004059<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004060enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4061<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4062<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4063<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4064<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004065};</pre>
4066
Cary Clark154beea2017-10-26 07:58:48 -04004067<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4068the underline or strikeout metric may be valid and zero.
4069Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4070
Cary Clark12799e12017-07-28 15:18:29 -04004071### Constants
4072
4073<table>
4074 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004075 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004076 </tr>
4077 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004078 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004079 </tr>
4080 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004081 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004082 </tr>
4083 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004084 <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.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004085 </tr>
4086
4087</table>
4088
Cary Clark8cc16c72017-08-25 11:51:49 -04004089<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004090
Cary Clark8cc16c72017-08-25 11:51:49 -04004091<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004092
Cary Clark8cc16c72017-08-25 11:51:49 -04004093<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004094
Ben Wagnere5806492017-11-09 12:08:31 -05004095Greatest extent above the baseline for any glyph.
4096Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004097
Cary Clark8cc16c72017-08-25 11:51:49 -04004098<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004099
4100Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004101Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004102
Cary Clark8cc16c72017-08-25 11:51:49 -04004103<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004104
4105Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004106Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004107
Cary Clark8cc16c72017-08-25 11:51:49 -04004108<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004109
Ben Wagnere5806492017-11-09 12:08:31 -05004110Greatest extent below the baseline for any glyph.
4111Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004112
Cary Clark8cc16c72017-08-25 11:51:49 -04004113<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004114
4115Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004116Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004117
Cary Clark8cc16c72017-08-25 11:51:49 -04004118<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004119
4120Average character width, if it is available.
4121Zero if no average width is stored in the font.
4122
Cary Clark8cc16c72017-08-25 11:51:49 -04004123<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004124
4125Maximum character width.
4126
Cary Clark8cc16c72017-08-25 11:51:49 -04004127<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004128
Ben Wagnere5806492017-11-09 12:08:31 -05004129Minimum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004130Typically less than zero.
4131
Cary Clark8cc16c72017-08-25 11:51:49 -04004132<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004133
Cary Clarkce101242017-09-01 15:51:02 -04004134Maximum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004135Typically greater than zero.
4136
Cary Clark8cc16c72017-08-25 11:51:49 -04004137<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004138
4139Height of a lower-case 'x'.
4140May be zero if no lower-case height is stored in the font.
4141
Cary Clark8cc16c72017-08-25 11:51:49 -04004142<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004143
4144Height of an upper-case letter.
4145May be zero if no upper-case height is stored in the font.
4146
Cary Clark8cc16c72017-08-25 11:51:49 -04004147<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004148
Ben Wagnere5806492017-11-09 12:08:31 -05004149Underline thickness.
4150
4151If 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 -04004152If <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 -04004153
Cary Clark8cc16c72017-08-25 11:51:49 -04004154<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004155
Ben Wagnere5806492017-11-09 12:08:31 -05004156Position of the top of the underline stroke relative to the baseline.
4157Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004158
Cary Clark8cc16c72017-08-25 11:51:49 -04004159If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4160If <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 -04004161
Cary Clark8cc16c72017-08-25 11:51:49 -04004162<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004163
Ben Wagnere5806492017-11-09 12:08:31 -05004164Strikeout thickness.
4165
4166If 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 -04004167If <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 -04004168
Cary Clark8cc16c72017-08-25 11:51:49 -04004169<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004170
Ben Wagnere5806492017-11-09 12:08:31 -05004171Position of the bottom of the strikeout stroke relative to the baseline.
4172Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004173
Cary Clark8cc16c72017-08-25 11:51:49 -04004174If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4175If <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 -04004176
Cary Clark493df1f2017-08-25 13:14:33 -04004177<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004178## hasUnderlineThickness
4179
Cary Clarka560c472017-11-27 10:44:06 -05004180<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004181bool hasUnderlineThickness(SkScalar* thickness) const
4182</pre>
4183
Ben Wagnere5806492017-11-09 12:08:31 -05004184If <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 -04004185<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,
4186return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004187
4188### Parameters
4189
Cary Clark8cc16c72017-08-25 11:51:49 -04004190<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004191storage for underline width</td>
4192 </tr>
4193</table>
4194
4195### Return Value
4196
4197true if font specifies underline width
4198
4199---
4200
Cary Clark493df1f2017-08-25 13:14:33 -04004201<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004202## hasUnderlinePosition
4203
Cary Clarka560c472017-11-27 10:44:06 -05004204<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004205bool hasUnderlinePosition(SkScalar* position) const
4206</pre>
4207
Ben Wagnere5806492017-11-09 12:08:31 -05004208If <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 -04004209<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,
4210return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004211
4212### Parameters
4213
Cary Clark8cc16c72017-08-25 11:51:49 -04004214<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4215storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004216 </tr>
4217</table>
4218
4219### Return Value
4220
Cary Clark8cc16c72017-08-25 11:51:49 -04004221true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004222
4223---
4224
Cary Clark493df1f2017-08-25 13:14:33 -04004225<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004226## hasStrikeoutThickness
4227
Cary Clarka560c472017-11-27 10:44:06 -05004228<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004229bool hasStrikeoutThickness(SkScalar* thickness) const
4230</pre>
4231
Ben Wagnere5806492017-11-09 12:08:31 -05004232If <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 -04004233<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,
4234return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004235
4236### Parameters
4237
Cary Clark8cc16c72017-08-25 11:51:49 -04004238<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004239storage for strikeout width</td>
4240 </tr>
4241</table>
4242
4243### Return Value
4244
4245true if font specifies strikeout width
4246
4247---
4248
Cary Clark493df1f2017-08-25 13:14:33 -04004249<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004250## hasStrikeoutPosition
4251
Cary Clarka560c472017-11-27 10:44:06 -05004252<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004253bool hasStrikeoutPosition(SkScalar* position) const
4254</pre>
4255
Ben Wagnere5806492017-11-09 12:08:31 -05004256If <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 -04004257<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,
4258return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004259
4260### Parameters
4261
Cary Clark8cc16c72017-08-25 11:51:49 -04004262<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4263storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004264 </tr>
4265</table>
4266
4267### Return Value
4268
Cary Clark8cc16c72017-08-25 11:51:49 -04004269true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004270
4271---
4272
Cary Clark493df1f2017-08-25 13:14:33 -04004273<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004274## getFontMetrics
4275
Cary Clarka560c472017-11-27 10:44:06 -05004276<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004277SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4278</pre>
4279
Cary Clark8cc16c72017-08-25 11:51:49 -04004280Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4281The 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 -04004282descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004283If <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>.
4284Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4285dimensions 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>,
4286<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4287Results 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 -04004288is ignored.
4289
4290### Parameters
4291
Cary Clark8cc16c72017-08-25 11:51:49 -04004292<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4293storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4294 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004295additional multiplier for returned values</td>
4296 </tr>
4297</table>
4298
4299### Return Value
4300
4301recommended spacing between lines
4302
4303### Example
4304
4305<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4306
4307### See Also
4308
Cary Clark8cc16c72017-08-25 11:51:49 -04004309<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 -04004310
4311---
4312
Cary Clark493df1f2017-08-25 13:14:33 -04004313<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004314## getFontSpacing
4315
Cary Clarka560c472017-11-27 10:44:06 -05004316<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004317SkScalar getFontSpacing() const
4318</pre>
4319
4320Returns the recommended spacing between lines: the sum of metrics
4321descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004322Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004323dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004324Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004325
4326### Return Value
4327
4328recommended spacing between lines
4329
4330### Example
4331
4332<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4333
4334#### Example Output
4335
4336~~~~
4337textSize: 12 fontSpacing: 13.9688
4338textSize: 18 fontSpacing: 20.9531
4339textSize: 24 fontSpacing: 27.9375
4340textSize: 32 fontSpacing: 37.25
4341~~~~
4342
4343</fiddle-embed></div>
4344
4345---
4346
Cary Clark493df1f2017-08-25 13:14:33 -04004347<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004348## getFontBounds
4349
Cary Clarka560c472017-11-27 10:44:06 -05004350<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004351SkRect getFontBounds() const
4352</pre>
4353
Cary Clarkce101242017-09-01 15:51:02 -04004354Returns the union of bounds of all <a href="#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004355Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004356ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4357and <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 -04004358
Cary Clark8cc16c72017-08-25 11:51:49 -04004359If <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 -05004360returns 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 -04004361<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 -04004362
4363### Return Value
4364
Cary Clarkce101242017-09-01 15:51:02 -04004365union of bounds of all <a href="#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004366
4367### Example
4368
4369<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4370
4371#### Example Output
4372
4373~~~~
4374metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4375font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4376~~~~
4377
4378</fiddle-embed></div>
4379
4380---
4381
Cary Clark493df1f2017-08-25 13:14:33 -04004382<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004383## textToGlyphs
4384
Cary Clarka560c472017-11-27 10:44:06 -05004385<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004386int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4387</pre>
4388
Cary Clark8cc16c72017-08-25 11:51:49 -04004389Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4390Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4391<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>.
4392<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004393
Cary Clarkbc5697d2017-10-04 14:31:33 -04004394Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004395
Cary Clark8cc16c72017-08-25 11:51:49 -04004396If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4397If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004398
Cary Clark8cc16c72017-08-25 11:51:49 -04004399If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004400<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004401
4402### Parameters
4403
Cary Clark8cc16c72017-08-25 11:51:49 -04004404<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004405character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004406 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004407length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004408 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004409storage for glyph indices; may be nullptr</td>
4410 </tr>
4411</table>
4412
4413### Return Value
4414
Cary Clark8cc16c72017-08-25 11:51:49 -04004415number 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 -04004416
4417### Example
4418
4419<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4420
4421---
4422
Cary Clark493df1f2017-08-25 13:14:33 -04004423<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004424## countText
4425
Cary Clarka560c472017-11-27 10:44:06 -05004426<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004427int countText(const void* text, size_t byteLength) const
4428</pre>
4429
Cary Clarkce101242017-09-01 15:51:02 -04004430Returns the number of <a href="#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4431Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004432Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004433
4434### Parameters
4435
Cary Clark8cc16c72017-08-25 11:51:49 -04004436<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004437character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004438 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004439length of character storage in bytes</td>
4440 </tr>
4441</table>
4442
4443### Return Value
4444
Cary Clarkce101242017-09-01 15:51:02 -04004445number of <a href="#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 -04004446
4447### Example
4448
4449<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4450
4451#### Example Output
4452
4453~~~~
4454count = 5
4455~~~~
4456
4457</fiddle-embed></div>
4458
4459---
4460
Cary Clark493df1f2017-08-25 13:14:33 -04004461<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004462## containsText
4463
Cary Clarka560c472017-11-27 10:44:06 -05004464<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004465bool containsText(const void* text, size_t byteLength) const
4466</pre>
4467
Cary Clark7cfcbca2018-01-04 16:11:51 -05004468Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004469Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004470<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004471
Cary Clark8cc16c72017-08-25 11:51:49 -04004472If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4473returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4474does 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 -04004475
Cary Clarkce101242017-09-01 15:51:02 -04004476Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004477
4478### Parameters
4479
Cary Clark8cc16c72017-08-25 11:51:49 -04004480<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004481array of characters or <a href="#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004482 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4483number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004484 </tr>
4485</table>
4486
4487### Return Value
4488
Cary Clark8cc16c72017-08-25 11:51:49 -04004489true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004490
4491### Example
4492
Cary Clark8cc16c72017-08-25 11:51:49 -04004493<div><fiddle-embed name="9202369019552f09cd4bec7f3046fee4"><div><a href="#SkPaint_containsText">containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark7cfcbca2018-01-04 16:11:51 -05004494corresponding to the Unicode surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004495
4496#### Example Output
4497
4498~~~~
44990x00b0 == has char
45000xd800 != has char
4501~~~~
4502
4503</fiddle-embed></div>
4504
4505### Example
4506
Cary Clark8cc16c72017-08-25 11:51:49 -04004507<div><fiddle-embed name="904227febfd1c2e264955da0ef66da73"><div><a href="#SkPaint_containsText">containsText</a> returns true that glyph index is greater than zero, not
Cary Clark4c06f5e2017-08-04 12:48:24 -04004508that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004509
4510#### Example Output
4511
4512~~~~
45130x01ff == has glyph
45140x0000 != has glyph
45150xffff == has glyph
4516~~~~
4517
4518</fiddle-embed></div>
4519
4520### See Also
4521
Cary Clark8cc16c72017-08-25 11:51:49 -04004522<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004523
4524---
4525
Cary Clark493df1f2017-08-25 13:14:33 -04004526<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004527## glyphsToUnichars
4528
Cary Clarka560c472017-11-27 10:44:06 -05004529<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004530void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4531</pre>
4532
Cary Clark7cfcbca2018-01-04 16:11:51 -05004533Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4534<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004535Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004536by <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 -04004537
Cary Clark7cfcbca2018-01-04 16:11:51 -05004538Only supported on platforms that use FreeType as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004539
4540### Parameters
4541
Cary Clark8cc16c72017-08-25 11:51:49 -04004542<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004543array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004544 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004545length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004546 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004547storage for character codes, one per glyph</td>
4548 </tr>
4549</table>
4550
4551### Example
4552
Cary Clark7cfcbca2018-01-04 16:11:51 -05004553<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.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004554
4555---
4556
Cary Clark08895c42018-02-01 09:37:32 -05004557## <a name="Measure_Text"></a> Measure Text
Cary Clark12799e12017-07-28 15:18:29 -04004558
Cary Clark493df1f2017-08-25 13:14:33 -04004559<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004560## measureText
4561
Cary Clarka560c472017-11-27 10:44:06 -05004562<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004563SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4564</pre>
4565
Cary Clark8cc16c72017-08-25 11:51:49 -04004566Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4567and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4568The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4569Uses <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,
4570and <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
4571<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4572Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4573The 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 -04004574
4575### Parameters
4576
Cary Clark8cc16c72017-08-25 11:51:49 -04004577<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004578character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004579 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4580number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4581 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004582returns bounding box relative to (0, 0) if not nullptr</td>
4583 </tr>
4584</table>
4585
4586### Return Value
4587
4588advance width or height
4589
4590### Example
4591
4592<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4593
4594---
4595
Cary Clark2dc84ad2018-01-26 12:56:22 -05004596<a name="SkPaint_measureText_2"></a>
4597
Cary Clarka560c472017-11-27 10:44:06 -05004598<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004599SkScalar measureText(const void* text, size_t length) const
4600</pre>
4601
Cary Clark8cc16c72017-08-25 11:51:49 -04004602Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4603and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4604The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4605Uses <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,
4606and <a href="#Text_Size">Text Size</a> to scale the metrics.
4607Does 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 -04004608
4609### Parameters
4610
Cary Clark8cc16c72017-08-25 11:51:49 -04004611<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004612character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004613 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4614number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004615 </tr>
4616</table>
4617
4618### Return Value
4619
4620advance width or height
4621
4622### Example
4623
4624<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4625
4626#### Example Output
4627
4628~~~~
4629default width = 5
4630double width = 10
4631~~~~
4632
4633</fiddle-embed></div>
4634
4635---
4636
Cary Clark493df1f2017-08-25 13:14:33 -04004637<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004638## breakText
4639
Cary Clarka560c472017-11-27 10:44:06 -05004640<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004641size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004642 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004643</pre>
4644
Cary Clark8cc16c72017-08-25 11:51:49 -04004645Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4646If <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
4647equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4648If <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
4649equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4650Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4651Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4652Uses <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,
4653and <a href="#Text_Size">Text Size</a> to scale the metrics.
4654Does 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 -04004655
4656### Parameters
4657
Cary Clark8cc16c72017-08-25 11:51:49 -04004658<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004659character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004660 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4661number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4662 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4663advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4664 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4665returns 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 -04004666 </tr>
4667</table>
4668
4669### Return Value
4670
Cary Clark8cc16c72017-08-25 11:51:49 -04004671bytes 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 -04004672
4673### Example
4674
Cary Clark4c06f5e2017-08-04 12:48:24 -04004675<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href="undocumented#Line">Line</a> under "" shows desired width, shorter than available characters.
Cary Clark8cc16c72017-08-25 11:51:49 -04004676<a href="undocumented#Line">Line</a> under "" shows measured width after breaking <a href="#SkPaint_breakText_text">text</a>.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004677
4678---
4679
Cary Clark493df1f2017-08-25 13:14:33 -04004680<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004681## getTextWidths
4682
Cary Clarka560c472017-11-27 10:44:06 -05004683<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4684int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004685</pre>
4686
Cary Clark8cc16c72017-08-25 11:51:49 -04004687Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4688the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4689Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4690If <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 -05004691if <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 -04004692If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4693If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4694Uses <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,
4695and <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>.
4696Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4697Does 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 -04004698
4699### Parameters
4700
Cary Clark8cc16c72017-08-25 11:51:49 -04004701<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004702character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004703 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4704number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4705 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4706returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4707 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4708returns <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 -04004709 </tr>
4710</table>
4711
4712### Return Value
4713
Cary Clark8cc16c72017-08-25 11:51:49 -04004714glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004715
4716### Example
4717
Cary Clarkce101242017-09-01 15:51:02 -04004718<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href="#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 Clark8cc16c72017-08-25 11:51:49 -04004719The underlines show the <a href="#SkPaint_getTextWidths_text">text</a> advance, spaced to keep them distinct.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004720
4721---
4722
Cary Clark08895c42018-02-01 09:37:32 -05004723## <a name="Text_Path"></a> Text Path
4724
Cary Clarkce101242017-09-01 15:51:02 -04004725<a href="#Text_Path">Text Path</a> describes the geometry of <a href="#Glyph">Glyphs</a> used to draw text.
Cary Clark12799e12017-07-28 15:18:29 -04004726
Cary Clark493df1f2017-08-25 13:14:33 -04004727<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004728## getTextPath
4729
Cary Clarka560c472017-11-27 10:44:06 -05004730<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4731void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004732</pre>
4733
Cary Clark8cc16c72017-08-25 11:51:49 -04004734Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4735Uses <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,
4736and <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.
4737All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4738Uses <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 -04004739
4740### Parameters
4741
Cary Clark8cc16c72017-08-25 11:51:49 -04004742<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004743character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004744 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4745number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4746 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004747<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 -04004748 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004749<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 -04004750 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004751geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004752 </tr>
4753</table>
4754
4755### Example
4756
Cary Clark4c06f5e2017-08-04 12:48:24 -04004757<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 Clark12799e12017-07-28 15:18:29 -04004758the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4759
4760---
4761
Cary Clark493df1f2017-08-25 13:14:33 -04004762<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004763## getPosTextPath
4764
Cary Clarka560c472017-11-27 10:44:06 -05004765<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4766void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004767</pre>
4768
Cary Clark8cc16c72017-08-25 11:51:49 -04004769Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4770Uses <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,
4771and <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.
4772All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4773Uses <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>.
4774<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004775
4776### Parameters
4777
Cary Clark8cc16c72017-08-25 11:51:49 -04004778<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004779character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004780 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4781number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4782 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004783positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004784 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004785geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004786 </tr>
4787</table>
4788
4789### Example
4790
Cary Clarkce101242017-09-01 15:51:02 -04004791<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three <a href="#Glyph">Glyphs</a> to eliminate overlaps, and strokes the result.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004792
4793---
4794
Cary Clark08895c42018-02-01 09:37:32 -05004795## <a name="Text_Intercepts"></a> Text Intercepts
4796
Cary Clarkce101242017-09-01 15:51:02 -04004797<a href="#Text_Intercepts">Text Intercepts</a> describe the intersection of drawn text <a href="#Glyph">Glyphs</a> with a pair
Cary Clark8cc16c72017-08-25 11:51:49 -04004798of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004799underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004800
Cary Clark493df1f2017-08-25 13:14:33 -04004801<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004802## getTextIntercepts
4803
Cary Clarka560c472017-11-27 10:44:06 -05004804<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004805int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4806 const SkScalar bounds[2], SkScalar* intervals) const
4807</pre>
4808
Cary Clark8cc16c72017-08-25 11:51:49 -04004809Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4810<a href="#SkPaint_getTextIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getTextIntercepts_text">text</a> advance.
Cary Clarkce101242017-09-01 15:51:02 -04004811The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004812the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004813Uses <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,
4814and <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.
4815Uses <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>.
4816Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4817<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004818
4819### Parameters
4820
Cary Clark8cc16c72017-08-25 11:51:49 -04004821<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004822character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004823 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4824number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4825 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004826<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 -04004827 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004828<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 -04004829 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004830lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004831 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004832returned intersections; may be nullptr</td>
4833 </tr>
4834</table>
4835
4836### Return Value
4837
4838number of intersections; may be zero
4839
4840### Example
4841
Cary Clarkce101242017-09-01 15:51:02 -04004842<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004843
4844---
4845
Cary Clark493df1f2017-08-25 13:14:33 -04004846<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004847## getPosTextIntercepts
4848
Cary Clarka560c472017-11-27 10:44:06 -05004849<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004850int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4851 const SkScalar bounds[2], SkScalar* intervals) const
4852</pre>
4853
Cary Clark8cc16c72017-08-25 11:51:49 -04004854Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4855<a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getPosTextIntercepts_text">text</a> advance.
Cary Clarkce101242017-09-01 15:51:02 -04004856The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004857the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004858Uses <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,
4859and <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.
4860Uses <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>.
4861Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4862<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004863
4864### Parameters
4865
Cary Clark8cc16c72017-08-25 11:51:49 -04004866<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004867character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004868 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4869number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4870 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004871positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004872 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004873lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004874 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004875returned intersections; may be nullptr</td>
4876 </tr>
4877</table>
4878
4879### Return Value
4880
Cary Clarka523d2d2017-08-30 08:58:10 -04004881number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004882
4883### Example
4884
Cary Clarkce101242017-09-01 15:51:02 -04004885<div><fiddle-embed name="98b2dfc552d0540a7c041fe7a2839bd7"><div><a href="undocumented#Text">Text</a> intercepts draw on either side of, but not inside, <a href="#Glyph">Glyphs</a> in a run.</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_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004890## getPosTextHIntercepts
4891
Cary Clarka560c472017-11-27 10:44:06 -05004892<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4893int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4894 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004895</pre>
4896
Cary Clark8cc16c72017-08-25 11:51:49 -04004897Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4898<a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getPosTextHIntercepts_text">text</a> advance.
Cary Clarkce101242017-09-01 15:51:02 -04004899The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004900the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004901Uses <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,
4902and <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.
4903Uses <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>.
4904Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4905<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004906
4907### Parameters
4908
Cary Clark8cc16c72017-08-25 11:51:49 -04004909<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004910character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004911 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4912number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4913 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004914positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004915 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004916position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004917 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004918lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004919 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004920returned intersections; may be nullptr</td>
4921 </tr>
4922</table>
4923
4924### Return Value
4925
4926number of intersections; may be zero
4927
4928### Example
4929
Cary Clark4c06f5e2017-08-04 12:48:24 -04004930<div><fiddle-embed name="dc9851c43acc3716aca8c9a4d40d452d"><div><a href="undocumented#Text">Text</a> intercepts do not take stroke thickness into consideration.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004931
4932---
4933
Cary Clark493df1f2017-08-25 13:14:33 -04004934<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004935## getTextBlobIntercepts
4936
Cary Clarka560c472017-11-27 10:44:06 -05004937<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4938int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004939</pre>
4940
Cary Clark8cc16c72017-08-25 11:51:49 -04004941Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4942<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clarkce101242017-09-01 15:51:02 -04004943The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004944the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004945Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04004946and <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 -04004947Uses run array and <a href="#Text_Align">Text Align</a> to position <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a>.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004948<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
4949
Cary Clark8cc16c72017-08-25 11:51:49 -04004950Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
4951<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004952
4953### Parameters
4954
Cary Clark8cc16c72017-08-25 11:51:49 -04004955<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004956<a href="#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004957 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004958lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004959 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004960returned intersections; may be nullptr</td>
4961 </tr>
4962</table>
4963
4964### Return Value
4965
4966number of intersections; may be zero
4967
4968### Example
4969
Cary Clark3cd22cc2017-12-01 11:49:58 -05004970<div><fiddle-embed name="71959a66b2290d70003887c0de339266"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004971
4972---
4973
Cary Clark493df1f2017-08-25 13:14:33 -04004974<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004975## nothingToDraw
4976
Cary Clarka560c472017-11-27 10:44:06 -05004977<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004978bool nothingToDraw() const
4979</pre>
4980
Cary Clark8cc16c72017-08-25 11:51:49 -04004981Returns true if <a href="#Paint">Paint</a> prevents all drawing;
4982otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004983
Cary Clarkce101242017-09-01 15:51:02 -04004984Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="#Alpha">Color Alpha</a> computes a
4985new <a href="#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004986
4987### Return Value
4988
Cary Clark8cc16c72017-08-25 11:51:49 -04004989true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004990
4991### Example
4992
4993<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
4994
4995#### Example Output
4996
4997~~~~
4998initial nothing to draw: false
4999blend dst nothing to draw: true
5000blend src over nothing to draw: false
5001alpha 0 nothing to draw: true
5002~~~~
5003
5004</fiddle-embed></div>
5005
5006---
5007
Cary Clark08895c42018-02-01 09:37:32 -05005008## <a name="Fast_Bounds"></a> Fast Bounds
5009
Cary Clark8cc16c72017-08-25 11:51:49 -04005010<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5011<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005012
Cary Clark493df1f2017-08-25 13:14:33 -04005013<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005014## canComputeFastBounds
5015
Cary Clarka560c472017-11-27 10:44:06 -05005016<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005017bool canComputeFastBounds() const
5018</pre>
5019
Cary Clark8cc16c72017-08-25 11:51:49 -04005020Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5021to 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 -04005022always returns false.
5023
5024### Return Value
5025
Cary Clark8cc16c72017-08-25 11:51:49 -04005026true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005027
5028---
5029
Cary Clark493df1f2017-08-25 13:14:33 -04005030<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005031## computeFastBounds
5032
Cary Clarka560c472017-11-27 10:44:06 -05005033<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005034const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5035</pre>
5036
Cary Clark8cc16c72017-08-25 11:51:49 -04005037Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005038raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005039effects 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 -04005040parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005041for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005042
Cary Clarkbc5697d2017-10-04 14:31:33 -04005043The 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 -04005044should 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 -04005045use 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 -04005046<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005047
5048### Parameters
5049
Cary Clark8cc16c72017-08-25 11:51:49 -04005050<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5051geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5052 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005053computed bounds of geometry; may not be nullptr</td>
5054 </tr>
5055</table>
5056
5057### Return Value
5058
5059fast computed bounds
5060
5061---
5062
Cary Clark493df1f2017-08-25 13:14:33 -04005063<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005064## computeFastStrokeBounds
5065
Cary Clarka560c472017-11-27 10:44:06 -05005066<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005067const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5068</pre>
5069
5070### Parameters
5071
Cary Clark8cc16c72017-08-25 11:51:49 -04005072<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5073geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5074 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005075computed bounds of geometry</td>
5076 </tr>
5077</table>
5078
5079### Return Value
5080
5081fast computed bounds
5082
5083---
5084
Cary Clark493df1f2017-08-25 13:14:33 -04005085<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005086## doComputeFastBounds
5087
Cary Clarka560c472017-11-27 10:44:06 -05005088<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5089const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005090</pre>
5091
Cary Clarkce101242017-09-01 15:51:02 -04005092Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5093account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5094altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005095
5096### Parameters
5097
Cary Clark8cc16c72017-08-25 11:51:49 -04005098<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5099geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5100 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005101computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005102 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5103overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005104 </tr>
5105</table>
5106
5107### Return Value
5108
5109fast computed bounds
5110
5111---
5112
Cary Clark78de7512018-02-07 07:27:09 -05005113## <a name="Utility"></a> Utility
5114
5115| name | description |
5116| --- | --- |
5117| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="#Glyph">Glyphs</a> |
5118| <a href="#SkPaint_countText">countText</a> | returns number of <a href="#Glyph">Glyphs</a> in text |
5119| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="#Glyph">Glyphs</a> into text |
5120| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
5121| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
5122| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
5123
Cary Clark493df1f2017-08-25 13:14:33 -04005124<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005125## toString
5126
Cary Clarka560c472017-11-27 10:44:06 -05005127<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark2dc84ad2018-01-26 12:56:22 -05005128void toString(SkString* str) const
Cary Clark12799e12017-07-28 15:18:29 -04005129</pre>
5130
Cary Clarkce101242017-09-01 15:51:02 -04005131Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5132internal debugging tools. The interface and implementation may be
Cary Clark7cfcbca2018-01-04 16:11:51 -05005133suppressed by defining SK_IGNORE_TO_STRING.
Cary Clark12799e12017-07-28 15:18:29 -04005134
5135### Parameters
5136
Cary Clark8cc16c72017-08-25 11:51:49 -04005137<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005138storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005139 </tr>
5140</table>
5141
5142### Example
5143
5144<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5145
5146#### Example Output
5147
5148~~~~
5149text size = 12
5150~~~~
5151
5152</fiddle-embed></div>
5153
Cary Clark2ade9972017-11-02 17:49:34 -04005154### See Also
5155
5156<a href="#SkPathEffect_toString">SkPathEffect::toString</a> <a href="#SkMaskFilter_toString">SkMaskFilter::toString</a> <a href="#SkColorFilter_toString">SkColorFilter::toString</a> <a href="#SkImageFilter_toString">SkImageFilter::toString</a>
5157
Cary Clark12799e12017-07-28 15:18:29 -04005158---
5159