blob: a9fa76e3d3b7ca617bcc7513dc9b1d66e2bae837 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
4# <a name="Paint"></a> Paint
Cary Clark8cc16c72017-08-25 11:51:49 -04005<a href="#Paint">Paint</a> controls options applied when drawing and measuring. <a href="#Paint">Paint</a> collects all
6options outside of the <a href="#Clip">Canvas Clip</a> and <a href="#Matrix">Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -04007
8Various options apply to text, strokes and fills, and images.
9
10Some options may not be implemented on all platforms; in these cases, setting
Cary Clark4c06f5e2017-08-04 12:48:24 -040011the option has no effect. Some options are conveniences that duplicate <a href="SkCanvas_Reference#Canvas">Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -040012functionality; for instance, text size is identical to matrix scale.
13
Cary Clark8cc16c72017-08-25 11:51:49 -040014<a href="#Paint">Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
15pipeline and multiple pipeline stages may be affected by a single <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040016
Cary Clark8cc16c72017-08-25 11:51:49 -040017<a href="#Paint">Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040018algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark8cc16c72017-08-25 11:51:49 -040019<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 -040020
Cary Clark8cc16c72017-08-25 11:51:49 -040021The 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 -040022to affect it. The implementation is free to defer computations associated with the
Cary Clark8cc16c72017-08-25 11:51:49 -040023<a href="#Paint">Paint</a>, or ignore them altogether. For instance, some <a href="undocumented#GPU">GPU</a> implementations draw all
Cary Clarkce101242017-09-01 15:51:02 -040024<a href="SkPath_Reference#Path">Path</a> geometries with <a href="undocumented#Anti_alias">Anti-aliasing</a>, regardless of how <a href="#SkPaint_kAntiAlias_Flag">SkPaint::kAntiAlias Flag</a>
Cary Clark8cc16c72017-08-25 11:51:49 -040025is set in <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040026
Cary Clark8cc16c72017-08-25 11:51:49 -040027<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 -040028Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark8cc16c72017-08-25 11:51:49 -040029<a href="undocumented#Shader">Shader</a> attached to <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040030
31# <a name="SkPaint"></a> Class SkPaint
32
33# <a name="Overview"></a> Overview
34
35## <a name="Subtopics"></a> Subtopics
36
37| topics | description |
38| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040039| <a href="#Initializers">Initializers</a> | Constructors and initialization. |
Cary Clarkce101242017-09-01 15:51:02 -040040| <a href="undocumented#Destructor">Destructor</a> | <a href="#Paint">Paint</a> termination. |
Cary Clark8cc16c72017-08-25 11:51:49 -040041| <a href="#Management">Management</a> | <a href="#Paint">Paint</a> copying, moving, comparing. |
42| <a href="#SkPaint_Hinting">Hinting</a> | <a href="undocumented#Glyph">Glyph</a> outline adjustment. |
43| <a href="#SkPaint_Flags">Flags</a> | Attributes represented by single bits. |
Cary Clark4c06f5e2017-08-04 12:48:24 -040044| <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> | Approximating coverage with transparency. |
Cary Clark8cc16c72017-08-25 11:51:49 -040045| <a href="#Dither">Dither</a> | Distributing color error. |
46| <a href="#Device_Text">Device Text</a> | Increase precision of glyph position. |
Cary Clarkce101242017-09-01 15:51:02 -040047| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | Custom sized bitmap <a href="#Glyph">Glyphs</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040048| <a href="#Automatic_Hinting">Automatic Hinting</a> | Always adjust glyph paths. |
49| <a href="#Vertical_Text">Vertical Text</a> | Orient text from top to bottom. |
50| <a href="#Fake_Bold">Fake Bold</a> | Approximate font styles. |
Cary Clark4c06f5e2017-08-04 12:48:24 -040051| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | <a href="undocumented#Glyph">Glyph</a> spacing affected by hinting. |
Cary Clark8cc16c72017-08-25 11:51:49 -040052| <a href="#Filter_Quality_Methods">Filter Quality Methods</a> | Get and set <a href="undocumented#Filter_Quality">Filter Quality</a>. |
53| <a href="#Color_Methods">Color Methods</a> | Get and set <a href="undocumented#Color">Color</a>. |
54| <a href="#SkPaint_Style">Style</a> | Geometry filling, stroking. |
55| <a href="#Stroke_Width">Stroke Width</a> | Thickness perpendicular to geometry. |
56| <a href="#Miter_Limit">Miter Limit</a> | Maximum length of stroked corners. |
57| <a href="#Stroke_Cap">Stroke Cap</a> | Decorations at ends of open strokes. |
58| <a href="#Stroke_Join">Stroke Join</a> | Decoration at corners of strokes. |
59| <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. |
60| <a href="#Shader_Methods">Shader Methods</a> | Get and set <a href="undocumented#Shader">Shader</a>. |
61| <a href="#Color_Filter_Methods">Color Filter Methods</a> | Get and set <a href="undocumented#Color_Filter">Color Filter</a>. |
62| <a href="#Blend_Mode_Methods">Blend Mode Methods</a> | Get and set <a href="undocumented#Blend_Mode">Blend Mode</a>. |
63| <a href="#Path_Effect_Methods">Path Effect Methods</a> | Get and set <a href="undocumented#Path_Effect">Path Effect</a>. |
64| <a href="#Mask_Filter_Methods">Mask Filter Methods</a> | Get and set <a href="undocumented#Mask_Filter">Mask Filter</a>. |
65| <a href="#Typeface_Methods">Typeface Methods</a> | Get and set <a href="undocumented#Typeface">Typeface</a>. |
66| <a href="#Rasterizer_Methods">Rasterizer Methods</a> | Get and set <a href="undocumented#Rasterizer">Rasterizer</a>. |
67| <a href="#Image_Filter_Methods">Image Filter Methods</a> | Get and set <a href="undocumented#Image_Filter">Image Filter</a>. |
68| <a href="#Draw_Looper_Methods">Draw Looper Methods</a> | Get and set <a href="undocumented#Draw_Looper">Draw Looper</a>. |
69| <a href="#Text_Align">Text Align</a> | <a href="undocumented#Text">Text</a> placement relative to position. |
70| <a href="#Text_Size">Text Size</a> | Overall height in points. |
71| <a href="#Text_Scale_X">Text Scale X</a> | <a href="undocumented#Text">Text</a> horizontal scale. |
72| <a href="#Text_Skew_X">Text Skew X</a> | <a href="undocumented#Text">Text</a> horizontal slant. |
Cary Clarkce101242017-09-01 15:51:02 -040073| <a href="#Text_Encoding">Text Encoding</a> | <a href="undocumented#Text">Text</a> encoded as characters or <a href="#Glyph">Glyphs</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040074| <a href="#Font_Metrics">Font Metrics</a> | Common glyph dimensions. |
75| <a href="#Measure_Text">Measure Text</a> | Width, height, bounds of text. |
Cary Clarkce101242017-09-01 15:51:02 -040076| <a href="#Text_Path">Text Path</a> | Geometry of <a href="#Glyph">Glyphs</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040077| <a href="#Text_Intercepts">Text Intercepts</a> | Advanced underline, strike through. |
Cary Clarkce101242017-09-01 15:51:02 -040078| <a href="#Fast_Bounds">Fast Bounds</a> | Approximate area required by <a href="#Paint">Paint</a>. |
Cary Clark12799e12017-07-28 15:18:29 -040079
80## <a name="Constants"></a> Constants
81
82| constants | description |
83| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040084| <a href="#SkPaint_Align">Align</a> | <a href="undocumented#Glyph">Glyph</a> locations relative to text position. |
85| <a href="#SkPaint_Cap">Cap</a> | Start and end geometry on stroked shapes. |
86| <a href="#SkPaint_Flags">Flags</a> | Values described by bits and masks. |
87| <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetrics::FontMetricsFlags</a> | Valid <a href="#Font_Metrics">Font Metrics</a>. |
88| <a href="#SkPaint_Hinting">Hinting</a> | Level of glyph outline adjustment. |
89| <a href="#SkPaint_Join">Join</a> | Corner geometry on stroked shapes. |
90| <a href="#SkPaint_Style">Style</a> | Stroke, fill, or both. |
91| <a href="#SkPaint_TextEncoding">TextEncoding</a> | Character or glyph encoding size. |
Cary Clark12799e12017-07-28 15:18:29 -040092
93## <a name="Structs"></a> Structs
94
95| struct | description |
96| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040097| <a href="#SkPaint_FontMetrics">FontMetrics</a> | <a href="undocumented#Typeface">Typeface</a> values. |
Cary Clark12799e12017-07-28 15:18:29 -040098
99## <a name="Constructors"></a> Constructors
100
101| | description |
102| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400103| <a href="#SkPaint_empty_constructor">SkPaint()</a> | Constructs with default values. |
Cary Clark73fa9722017-08-29 17:36:51 -0400104| <a href="#SkPaint_copy_const_SkPaint">SkPaint(const SkPaint& paint)</a> | Makes a shallow copy. |
105| <a href="#SkPaint_move_SkPaint">SkPaint(SkPaint&& paint)</a> | Moves paint without copying it. |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400106| | Decreases <a href="undocumented#Reference_Count">Reference Count</a> of owned objects. |
Cary Clark12799e12017-07-28 15:18:29 -0400107
108## <a name="Operators"></a> Operators
109
110| operator | description |
111| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400112| <a href="#SkPaint_copy_assignment_operator">operator=(const SkPaint& paint)</a> | Makes a shallow copy. |
113| <a href="#SkPaint_move_assignment_operator">operator=(SkPaint&& paint)</a> | Moves paint without copying it. |
114| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | Compares paints for equality. |
115| <a href="#SkPaint_not_equal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | Compares paints for inequality. |
Cary Clark12799e12017-07-28 15:18:29 -0400116
117## <a name="Member_Functions"></a> Member Functions
118
119| function | description |
120| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400121| <a href="#SkPaint_breakText">breakText</a> | Returns text that fits in a width. |
122| <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> | Returns true if settings allow for fast bounds computation. |
123| <a href="#SkPaint_computeFastBounds">computeFastBounds</a> | Returns fill bounds for quick reject tests. |
124| <a href="#SkPaint_computeFastStrokeBounds">computeFastStrokeBounds</a> | Returns stroke bounds for quick reject tests. |
Cary Clarkce101242017-09-01 15:51:02 -0400125| <a href="#SkPaint_containsText">containsText</a> | Returns if all text corresponds to <a href="#Glyph">Glyphs</a>. |
126| <a href="#SkPaint_countText">countText</a> | Returns number of <a href="#Glyph">Glyphs</a> in text. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400127| <a href="#SkPaint_doComputeFastBounds">doComputeFastBounds</a> | Returns bounds for quick reject tests. |
128| <a href="#SkPaint_flatten">flatten</a> | Serializes into a buffer. |
129| <a href="#SkPaint_getAlpha">getAlpha</a> | Returns <a href="#Alpha">Color Alpha</a>, color opacity. |
Cary Clarkce101242017-09-01 15:51:02 -0400130| <a href="#SkPaint_getBlendMode">getBlendMode</a> | Returns <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with <a href="undocumented#Device">Device</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400131| <a href="#SkPaint_getColor">getColor</a> | Returns <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color. |
132| <a href="#SkPaint_getColorFilter">getColorFilter</a> | Returns <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered. |
133| <a href="#SkPaint_getDrawLooper">getDrawLooper</a> | Returns <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
134| <a href="#SkPaint_getFillPath">getFillPath</a> | Returns fill path equivalent to stroke. |
135| <a href="#SkPaint_getFilterQuality">getFilterQuality</a> | Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, image filtering level. |
136| <a href="#SkPaint_getFlags">getFlags</a> | Returns <a href="#SkPaint_Flags">Flags</a> stored in a bit field. |
137| <a href="#SkPaint_getFontBounds">getFontBounds</a> | Returns union all glyph bounds. |
138| <a href="#SkPaint_getFontMetrics">getFontMetrics</a> | Returns <a href="undocumented#Typeface">Typeface</a> metrics scaled by text size. |
139| <a href="#SkPaint_getFontSpacing">getFontSpacing</a> | Returns recommended spacing between lines. |
140| <a href="#SkPaint_getHash">getHash</a> | Returns a shallow hash for equality checks. |
141| <a href="#SkPaint_getHinting">getHinting</a> | Returns <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level. |
142| <a href="#SkPaint_getImageFilter">getImageFilter</a> | Returns <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
143| <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>. |
144| <a href="#SkPaint_getPathEffect">getPathEffect</a> | Returns <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
145| <a href="#SkPaint_getPosTextPath">getPosTextPath</a> | Returns <a href="SkPath_Reference#Path">Path</a> equivalent to positioned text. |
146| <a href="#SkPaint_getPosTextIntercepts">getPosTextIntercepts</a> | Returns where lines intersect positioned text; underlines. |
147| <a href="#SkPaint_getPosTextHIntercepts">getPosTextHIntercepts</a> | Returns where lines intersect horizontally positioned text; underlines. |
148| <a href="#SkPaint_getRasterizer">getRasterizer</a> | Returns <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Mask_Alpha">Mask Alpha</a> generation from <a href="SkPath_Reference#Path">Path</a>. |
149| <a href="#SkPaint_getShader">getShader</a> | Returns <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
150| <a href="#SkPaint_getStrokeCap">getStrokeCap</a> | Returns <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends. |
151| <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a> | Returns <a href="#SkPaint_Join">Join</a>, geometry on path corners. |
152| <a href="#SkPaint_getStrokeMiter">getStrokeMiter</a> | Returns <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners. |
153| <a href="#SkPaint_getStrokeWidth">getStrokeWidth</a> | Returns thickness of the stroke. |
154| <a href="#SkPaint_getStyle">getStyle</a> | Returns <a href="#SkPaint_Style">Style</a>: stroke, fill, or both. |
155| <a href="#SkPaint_getTextAlign">getTextAlign</a> | Returns <a href="#SkPaint_Align">Align</a>: left, center, or right. |
156| <a href="#SkPaint_getTextBlobIntercepts">getTextBlobIntercepts</a> | Returns where lines intersect <a href="undocumented#Text_Blob">Text Blob</a>; underlines. |
157| <a href="#SkPaint_getTextEncoding">getTextEncoding</a> | Returns character or glyph encoding size. |
158| <a href="#SkPaint_getTextIntercepts">getTextIntercepts</a> | Returns where lines intersect text; underlines. |
159| <a href="#SkPaint_getTextPath">getTextPath</a> | Returns <a href="SkPath_Reference#Path">Path</a> equivalent to text. |
160| <a href="#SkPaint_getTextScaleX">getTextScaleX</a> | Returns the text horizontal scale; condensed text. |
161| <a href="#SkPaint_getTextSkewX">getTextSkewX</a> | Returns the text horizontal skew; oblique text. |
162| <a href="#SkPaint_getTextSize">getTextSize</a> | Returns text size in points. |
163| <a href="#SkPaint_getTextWidths">getTextWidths</a> | Returns advance and bounds for each glyph in text. |
164| <a href="#SkPaint_getTypeface">getTypeface</a> | Returns <a href="undocumented#Typeface">Typeface</a>, font description. |
Cary Clarkce101242017-09-01 15:51:02 -0400165| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | Converts <a href="#Glyph">Glyphs</a> into text. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400166| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | Returns true if <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> is set. |
Cary Clarkce101242017-09-01 15:51:02 -0400167| <a href="#SkPaint_isAutohinted">isAutohinted</a> | Returns true if <a href="#Glyph">Glyphs</a> are always hinted. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400168| <a href="#SkPaint_isDevKernText">isDevKernText</a> | Returns true if <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is set. |
169| <a href="#SkPaint_isDither">isDither</a> | Returns true if <a href="#Dither">Dither</a> is set. |
170| <a href="#SkPaint_isEmbeddedBitmapText">isEmbeddedBitmapText</a> | Returns true if <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is set. |
171| <a href="#SkPaint_isFakeBoldText">isFakeBoldText</a> | Returns true if <a href="#Fake_Bold">Fake Bold</a> is set. |
172| <a href="#SkPaint_isLCDRenderText">isLCDRenderText</a> | Returns true if <a href="SkPaint_Reference#LCD_Text">LCD Text</a> is set. |
173| <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>. |
174| <a href="#SkPaint_isSubpixelText">isSubpixelText</a> | Returns true if <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is set. |
175| <a href="#SkPaint_isVerticalText">isVerticalText</a> | Returns true if <a href="#Vertical_Text">Vertical Text</a> is set. |
176| <a href="#SkPaint_measureText">measureText</a> | Returns advance width and bounds of text. |
177| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | Returns true if <a href="#Paint">Paint</a> prevents all drawing. |
178| <a href="#SkPaint_refColorFilter">refColorFilter</a> | References <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered. |
179| <a href="#SkPaint_refDrawLooper">refDrawLooper</a> | References <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
180| <a href="#SkPaint_refImageFilter">refImageFilter</a> | References <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
181| <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>. |
182| <a href="#SkPaint_refPathEffect">refPathEffect</a> | References <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
183| <a href="#SkPaint_refRasterizer">refRasterizer</a> | References <a href="undocumented#Rasterizer">Rasterizer</a>, mask generation from path. |
184| <a href="#SkPaint_refShader">refShader</a> | References <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
185| <a href="#SkPaint_refTypeface">refTypeface</a> | References <a href="undocumented#Typeface">Typeface</a>, font description. |
186| <a href="#SkPaint_reset">reset</a> | Sets to default values. |
187| <a href="#SkPaint_setAlpha">setAlpha</a> | Sets <a href="#Alpha">Color Alpha</a>, color opacity. |
188| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | Sets or clears <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>. |
189| <a href="#SkPaint_setARGB">setARGB</a> | Sets color by component. |
Cary Clarkce101242017-09-01 15:51:02 -0400190| <a href="#SkPaint_setAutohinted">setAutohinted</a> | Sets <a href="#Glyph">Glyphs</a> to always be hinted. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400191| <a href="#SkPaint_setBlendMode">setBlendMode</a> | Sets <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with destination. |
192| <a href="#SkPaint_setColor">setColor</a> | Sets <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color. |
193| <a href="#SkPaint_setColorFilter">setColorFilter</a> | Sets <a href="undocumented#Color_Filter">Color Filter</a>, alters color. |
194| <a href="#SkPaint_setDevKernText">setDevKernText</a> | Sets or clears <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a>. |
195| <a href="#SkPaint_setDither">setDither</a> | Sets or clears <a href="#Dither">Dither</a>. |
196| <a href="#SkPaint_setDrawLooper">setDrawLooper</a> | Sets <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
197| <a href="#SkPaint_setEmbeddedBitmapText">setEmbeddedBitmapText</a> | Sets or clears <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a>. |
198| <a href="#SkPaint_setFakeBoldText">setFakeBoldText</a> | Sets or clears <a href="#Fake_Bold">Fake Bold</a>. |
199| <a href="#SkPaint_setFilterQuality">setFilterQuality</a> | Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. |
200| <a href="#SkPaint_setFlags">setFlags</a> | Sets multiple <a href="#SkPaint_Flags">Flags</a> in a bit field. |
201| <a href="#SkPaint_setHinting">setHinting</a> | Sets <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level. |
202| <a href="#SkPaint_setLCDRenderText">setLCDRenderText</a> | Sets or clears <a href="SkPaint_Reference#LCD_Text">LCD Text</a>. |
203| <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>. |
204| <a href="#SkPaint_setPathEffect">setPathEffect</a> | Sets <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
205| <a href="#SkPaint_setRasterizer">setRasterizer</a> | Sets <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Mask_Alpha">Mask Alpha</a> generation from <a href="SkPath_Reference#Path">Path</a>. |
206| <a href="#SkPaint_setImageFilter">setImageFilter</a> | Sets <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
207| <a href="#SkPaint_setShader">setShader</a> | Sets <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
208| <a href="#SkPaint_setStrokeCap">setStrokeCap</a> | Sets <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends. |
209| <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a> | Sets <a href="#SkPaint_Join">Join</a>, geometry on path corners. |
210| <a href="#SkPaint_setStrokeMiter">setStrokeMiter</a> | Sets <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners. |
211| <a href="#SkPaint_setStrokeWidth">setStrokeWidth</a> | Sets thickness of the stroke. |
212| <a href="#SkPaint_setStyle">setStyle</a> | Sets <a href="#SkPaint_Style">Style</a>: stroke, fill, or both. |
213| <a href="#SkPaint_setSubpixelText">setSubpixelText</a> | Sets or clears <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a>. |
214| <a href="#SkPaint_setTextAlign">setTextAlign</a> | Sets <a href="#SkPaint_Align">Align</a>: left, center, or right. |
215| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | Sets character or glyph encoding size. |
216| <a href="#SkPaint_setTextScaleX">setTextScaleX</a> | Sets the text horizontal scale; condensed text. |
217| <a href="#SkPaint_setTextSkewX">setTextSkewX</a> | Sets the text horizontal skew; oblique text. |
218| <a href="#SkPaint_setTextSize">setTextSize</a> | Sets text size in points. |
219| <a href="#SkPaint_setTypeface">setTypeface</a> | Sets <a href="undocumented#Typeface">Typeface</a>, font description. |
220| <a href="#SkPaint_setVerticalText">setVerticalText</a> | Sets or clears <a href="#Vertical_Text">Vertical Text</a>. |
221| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | Converts text into glyph indices. |
Cary Clarkce101242017-09-01 15:51:02 -0400222| <a href="#SkPaint_toString">toString</a> | Converts <a href="#Paint">Paint</a> to machine readable form. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400223| <a href="#SkPaint_unflatten">unflatten</a> | Populates from a serialized stream. |
Cary Clark12799e12017-07-28 15:18:29 -0400224
225# <a name="Initializers"></a> Initializers
226
Cary Clark493df1f2017-08-25 13:14:33 -0400227<a name="SkPaint_empty_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400228## SkPaint
229
230<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
231SkPaint()
232</pre>
233
Cary Clark8cc16c72017-08-25 11:51:49 -0400234Constructs <a href="#Paint">Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400235
236| attribute | default value |
237| --- | --- |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400238| <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400239| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400240| <a href="undocumented#Color">Color</a> | <a href="undocumented#SK_ColorBLACK">SK ColorBLACK</a> |
Cary Clark8cc16c72017-08-25 11:51:49 -0400241| <a href="#Alpha">Color Alpha</a> | 255 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400242| <a href="undocumented#Color_Filter">Color Filter</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400243| <a href="#Dither">Dither</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400244| <a href="undocumented#Draw_Looper">Draw Looper</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400245| <a href="#Fake_Bold">Fake Bold</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400246| <a href="undocumented#Filter_Quality">Filter Quality</a> | <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> |
247| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400248| <a href="#Automatic_Hinting">Automatic Hinting</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400249| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400250| <a href="#SkPaint_Hinting">Hinting</a> | <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400251| <a href="undocumented#Image_Filter">Image Filter</a> | nullptr |
252| <a href="SkPaint_Reference#LCD_Text">LCD Text</a> | false |
253| <a href="SkPaint_Reference#Linear_Text">Linear Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400254| <a href="#Miter_Limit">Miter Limit</a> | 4 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400255| <a href="undocumented#Mask_Filter">Mask Filter</a> | nullptr |
256| <a href="undocumented#Path_Effect">Path Effect</a> | nullptr |
257| <a href="undocumented#Rasterizer">Rasterizer</a> | nullptr |
258| <a href="undocumented#Shader">Shader</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400259| <a href="#SkPaint_Style">Style</a> | <a href="#SkPaint_kFill_Style">kFill Style</a> |
260| <a href="#Text_Align">Text Align</a> | <a href="#SkPaint_kLeft_Align">kLeft Align</a> |
261| <a href="#Text_Encoding">Text Encoding</a> | <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> |
262| <a href="#Text_Scale_X">Text Scale X</a> | 1 |
263| <a href="#Text_Size">Text Size</a> | 12 |
264| <a href="#Text_Skew_X">Text Skew X</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400265| <a href="undocumented#Typeface">Typeface</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400266| <a href="#Stroke_Cap">Stroke Cap</a> | <a href="#SkPaint_kButt_Cap">kButt Cap</a> |
267| <a href="#Stroke_Join">Stroke Join</a> | <a href="#SkPaint_kMiter_Join">kMiter Join</a> |
268| <a href="#Stroke_Width">Stroke Width</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400269| <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400270| <a href="#Vertical_Text">Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400271
272The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clarkce101242017-09-01 15:51:02 -0400273paint default values. The overrides may be included in "<a href="undocumented#SkUserConfig">SkUserConfig</a>.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400274build system.
275
276### Return Value
277
Cary Clark8cc16c72017-08-25 11:51:49 -0400278default initialized <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400279
280### Example
281
282<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
283
284---
285
Cary Clark73fa9722017-08-29 17:36:51 -0400286<a name="SkPaint_copy_const_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400287## SkPaint
288
289<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
290SkPaint(const SkPaint& paint)
291</pre>
292
Cary Clark8cc16c72017-08-25 11:51:49 -0400293Makes 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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400294<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</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 -0400295between 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 -0400296their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400297
Cary Clark4c06f5e2017-08-04 12:48:24 -0400298The 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>, <a href="undocumented#Rasterizer">Rasterizer</a>,
299<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 -0400300This 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 -0400301
302### Parameters
303
Cary Clark73fa9722017-08-29 17:36:51 -0400304<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 -0400305original to copy</td>
306 </tr>
307</table>
308
309### Return Value
310
Cary Clark73fa9722017-08-29 17:36:51 -0400311shallow copy of <a href="#SkPaint_copy_const_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400312
313### Example
314
315<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
316
317#### Example Output
318
319~~~~
320SK_ColorRED == paint1.getColor()
321SK_ColorBLUE == paint2.getColor()
322~~~~
323
324</fiddle-embed></div>
325
326---
327
Cary Clark73fa9722017-08-29 17:36:51 -0400328<a name="SkPaint_move_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400329## SkPaint
330
331<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
332SkPaint(SkPaint&& paint)
333</pre>
334
Cary Clarkd0530ba2017-09-14 11:25:39 -0400335Implements a move constructor to avoid increasing the reference counts
Cary Clark73fa9722017-08-29 17:36:51 -0400336of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400337
Cary Clark73fa9722017-08-29 17:36:51 -0400338After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400339
340### Parameters
341
Cary Clark73fa9722017-08-29 17:36:51 -0400342<table> <tr> <td><a name="SkPaint_move_SkPaint_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400343original to move</td>
344 </tr>
345</table>
346
347### Return Value
348
Cary Clark73fa9722017-08-29 17:36:51 -0400349content of <a href="#SkPaint_move_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400350
351### Example
352
353<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
354
355#### Example Output
356
357~~~~
358path effect unique: true
359~~~~
360
361</fiddle-embed></div>
362
363---
364
Cary Clark493df1f2017-08-25 13:14:33 -0400365<a name="SkPaint_reset"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400366## reset
367
368<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
369void reset()
370</pre>
371
372Sets all paint's contents to their initial values. This is equivalent to replacing
Cary Clark8cc16c72017-08-25 11:51:49 -0400373the paint with the result of <a href="#SkPaint_empty_constructor">SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400374
375### Example
376
377<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
378
379#### Example Output
380
381~~~~
382paint1 == paint2
383~~~~
384
385</fiddle-embed></div>
386
387---
388
389# <a name="Destructor"></a> Destructor
390
Cary Clark493df1f2017-08-25 13:14:33 -0400391<a name="SkPaint_destructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400392## ~SkPaint
393
394<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
395~SkPaint()
396</pre>
397
Cary Clark8cc16c72017-08-25 11:51:49 -0400398Decreases <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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400399<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a>. If the
400objects containing <a href="undocumented#Reference_Count">Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400401
402---
403
404# <a name="Management"></a> Management
405
Cary Clark493df1f2017-08-25 13:14:33 -0400406<a name="SkPaint_copy_assignment_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400407## operator=
408
409<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
410SkPaint& operator=(const SkPaint& paint)
411</pre>
412
Cary Clark8cc16c72017-08-25 11:51:49 -0400413Makes 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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400414<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
Cary Clark8cc16c72017-08-25 11:51:49 -0400415between the original <a href="#SkPaint_copy_assignment_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 -0400416prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark8cc16c72017-08-25 11:51:49 -0400417resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_assignment_operator_paint">paint</a>
418are increased by one. <a href="#SkPaint_copy_assignment_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400419
420### Parameters
421
Cary Clark8cc16c72017-08-25 11:51:49 -0400422<table> <tr> <td><a name="SkPaint_copy_assignment_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400423original to copy</td>
424 </tr>
425</table>
426
427### Return Value
428
Cary Clark8cc16c72017-08-25 11:51:49 -0400429content of <a href="#SkPaint_copy_assignment_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400430
431### Example
432
433<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
434
435#### Example Output
436
437~~~~
438SK_ColorRED == paint1.getColor()
439SK_ColorRED == paint2.getColor()
440~~~~
441
442</fiddle-embed></div>
443
444---
445
Cary Clark493df1f2017-08-25 13:14:33 -0400446<a name="SkPaint_move_assignment_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400447## operator=
448
449<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
450SkPaint& operator=(SkPaint&& paint)
451</pre>
452
Cary Clarkd0530ba2017-09-14 11:25:39 -0400453Moves the <a href="#SkPaint_move_assignment_operator_paint">paint</a> to avoid increasing the reference counts
Cary Clark8cc16c72017-08-25 11:51:49 -0400454of objects referenced by the <a href="#SkPaint_move_assignment_operator_paint">paint</a> parameter. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -0400455prior destination are decreased by one; those objects are deleted if the resulting count
456is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400457
Cary Clark8cc16c72017-08-25 11:51:49 -0400458After the call, <a href="#SkPaint_move_assignment_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400459
460### Parameters
461
Cary Clark8cc16c72017-08-25 11:51:49 -0400462<table> <tr> <td><a name="SkPaint_move_assignment_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400463original to move</td>
464 </tr>
465</table>
466
467### Return Value
468
Cary Clark8cc16c72017-08-25 11:51:49 -0400469content of <a href="#SkPaint_move_assignment_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400470
471### Example
472
473<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
474
475#### Example Output
476
477~~~~
478SK_ColorRED == paint2.getColor()
479~~~~
480
481</fiddle-embed></div>
482
483---
484
Cary Clark493df1f2017-08-25 13:14:33 -0400485<a name="SkPaint_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400486## operator==
487
488<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
489bool operator==(const SkPaint& a, const SkPaint& b)
490</pre>
491
Cary Clark8cc16c72017-08-25 11:51:49 -0400492Compares <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
Cary Clark4c06f5e2017-08-04 12:48:24 -0400493if <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>, <a href="undocumented#Rasterizer">Rasterizer</a>,
494<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 -0400495
496### Parameters
497
Cary Clark8cc16c72017-08-25 11:51:49 -0400498<table> <tr> <td><a name="SkPaint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
499<a href="#Paint">Paint</a> to compare</td>
500 </tr> <tr> <td><a name="SkPaint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
501<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400502 </tr>
503</table>
504
505### Return Value
506
Cary Clark8cc16c72017-08-25 11:51:49 -0400507true if <a href="#Paint">Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400508
509### Example
510
511<div><fiddle-embed name="7481a948e34672720337a631830586dd">
512
513#### Example Output
514
515~~~~
516paint1 == paint2
517paint1 != paint2
518~~~~
519
520</fiddle-embed></div>
521
522---
523
Cary Clark493df1f2017-08-25 13:14:33 -0400524<a name="SkPaint_not_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400525## operator!=
526
527<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
528bool operator!=(const SkPaint& a, const SkPaint& b)
529</pre>
530
Cary Clark8cc16c72017-08-25 11:51:49 -0400531Compares <a href="#SkPaint_not_equal_operator_a">a</a> and <a href="#SkPaint_not_equal_operator_b">b</a>, and returns true if <a href="#SkPaint_not_equal_operator_a">a</a> and <a href="#SkPaint_not_equal_operator_b">b</a> are not equivalent. May return true
Cary Clark4c06f5e2017-08-04 12:48:24 -0400532if <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>, <a href="undocumented#Rasterizer">Rasterizer</a>,
533<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 -0400534
535### Parameters
536
Cary Clark8cc16c72017-08-25 11:51:49 -0400537<table> <tr> <td><a name="SkPaint_not_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
538<a href="#Paint">Paint</a> to compare</td>
539 </tr> <tr> <td><a name="SkPaint_not_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
540<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400541 </tr>
542</table>
543
544### Return Value
545
Cary Clark8cc16c72017-08-25 11:51:49 -0400546true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400547
548### Example
549
550<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
551
552#### Example Output
553
554~~~~
555paint1 == paint2
556paint1 == paint2
557~~~~
558
559</fiddle-embed></div>
560
561---
562
Cary Clark493df1f2017-08-25 13:14:33 -0400563<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400564## getHash
565
566<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
567uint32_t getHash() const
568</pre>
569
Cary Clark8cc16c72017-08-25 11:51:49 -0400570Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400571Identical hashes guarantee that the paints are
572equivalent, but differing hashes do not guarantee that the paints have differing
573contents.
574
Cary Clark8cc16c72017-08-25 11:51:49 -0400575If <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 -0400576their hashes are also equal.
577
578The hash returned is platform and implementation specific.
579
580### Return Value
581
582a shallow hash
583
584### Example
585
586<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
587
588#### Example Output
589
590~~~~
591paint1 == paint2
592paint1.getHash() == paint2.getHash()
593~~~~
594
595</fiddle-embed></div>
596
597---
598
Cary Clark493df1f2017-08-25 13:14:33 -0400599<a name="SkPaint_flatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400600## flatten
601
602<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
603void flatten(SkWriteBuffer& buffer) const
604</pre>
605
Cary Clark8cc16c72017-08-25 11:51:49 -0400606Serializes <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 -0400607can reconstitute the paint at a later time.
608
609### Parameters
610
Cary Clark8cc16c72017-08-25 11:51:49 -0400611<table> <tr> <td><a name="SkPaint_flatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
612<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 -0400613 </tr>
614</table>
615
616### Example
617
618<div><fiddle-embed name="670672b146b50eced4d3dd10c701e0a7">
619
620#### Example Output
621
622~~~~
623color = 0xffff0000
624~~~~
625
626</fiddle-embed></div>
627
628---
629
Cary Clark493df1f2017-08-25 13:14:33 -0400630<a name="SkPaint_unflatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400631## unflatten
632
633<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
634void unflatten(SkReadBuffer& buffer)
635</pre>
636
Cary Clark8cc16c72017-08-25 11:51:49 -0400637Populates <a href="#Paint">Paint</a>, typically from a serialized stream, created by calling
638<a href="#SkPaint_flatten">flatten</a> at an earlier time.
Cary Clark12799e12017-07-28 15:18:29 -0400639
Cary Clark8cc16c72017-08-25 11:51:49 -0400640<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 -0400641by the client.
642
643### Parameters
644
Cary Clark8cc16c72017-08-25 11:51:49 -0400645<table> <tr> <td><a name="SkPaint_unflatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -0400646serialized data describing <a href="#Paint">Paint</a> content</td>
Cary Clark12799e12017-07-28 15:18:29 -0400647 </tr>
648</table>
649
650---
651
652# <a name="Hinting"></a> Hinting
653
Cary Clark8cc16c72017-08-25 11:51:49 -0400654## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400655
656<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400657enum <a href="#Hinting">Hinting</a> {
658<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
659<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
660<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
661<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400662};</pre>
663
Cary Clark8cc16c72017-08-25 11:51:49 -0400664<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
665look 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 -0400666muted effect or no effect at all depending on the platform.
667
Cary Clark4c06f5e2017-08-04 12:48:24 -0400668The four levels roughly control corresponding features on platforms that use <a href="undocumented#FreeType">FreeType</a>
Cary Clark8cc16c72017-08-25 11:51:49 -0400669as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400670
671### Constants
672
673<table>
674 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400675 <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 Clark4c06f5e2017-08-04 12:48:24 -0400676With <a href="undocumented#FreeType">FreeType</a>, this is equivalent to the <a href="undocumented#FT_LOAD_NO_HINTING">FT LOAD NO HINTING</a>
677bit-field constant supplied to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400678outline being loaded should not be fitted to the pixel grid but simply scaled
679to 26.6 fractional pixels.</td>
680 </tr>
681 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400682 <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 Clark4c06f5e2017-08-04 12:48:24 -0400683With <a href="undocumented#FreeType">FreeType</a>, this is equivalent in spirit to the
684<a href="undocumented#FT_LOAD_TARGET_LIGHT">FT LOAD TARGET LIGHT</a> value supplied to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400685lighter hinting algorithm for non-monochrome modes.
Cary Clarkce101242017-09-01 15:51:02 -0400686Generated <a href="#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400687 </tr>
688 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400689 <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 Clark4c06f5e2017-08-04 12:48:24 -0400690With <a href="undocumented#FreeType">FreeType</a>, this supplies <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>,
Cary Clark12799e12017-07-28 15:18:29 -0400691choosing the default hinting algorithm, which is optimized for standard
692gray-level rendering.</td>
693 </tr>
694 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400695 <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 <a href="undocumented#FreeType">FreeType</a>, this selects
696<a href="undocumented#FT_LOAD_TARGET_LCD">FT LOAD TARGET LCD</a> or <a href="undocumented#FT_LOAD_TARGET_LCD_V">FT LOAD TARGET LCD V</a> if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400697<a href="undocumented#FT_LOAD_TARGET_LCD">FT LOAD TARGET LCD</a> is a variant of <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> optimized for
698horizontally decimated <a href="undocumented#LCD">LCD</a> displays; <a href="undocumented#FT_LOAD_TARGET_LCD_V">FT LOAD TARGET LCD V</a> is a
699variant of <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> optimized for vertically decimated <a href="undocumented#LCD">LCD</a> displays.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400700 </tr>
701</table>
702
Cary Clark8cc16c72017-08-25 11:51:49 -0400703On <a href="undocumented#Windows">Windows</a> with <a href="undocumented#DirectWrite">DirectWrite</a>, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400704
Cary Clark8cc16c72017-08-25 11:51:49 -0400705<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400706Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400707
708
709
Cary Clark493df1f2017-08-25 13:14:33 -0400710<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400711## getHinting
712
713<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
714Hinting getHinting() const
715</pre>
716
717Returns level of glyph outline adjustment.
718
719### Return Value
720
Cary Clark8cc16c72017-08-25 11:51:49 -0400721one 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 -0400722
723### Example
724
725<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
726
727#### Example Output
728
729~~~~
730SkPaint::kNormal_Hinting == paint.getHinting()
731~~~~
732
733</fiddle-embed></div>
734
735---
736
Cary Clark493df1f2017-08-25 13:14:33 -0400737<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400738## setHinting
739
740<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
741void setHinting(Hinting hintingLevel)
742</pre>
743
744Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400745Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400746
Cary Clark8cc16c72017-08-25 11:51:49 -0400747| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400748| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400749| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400750| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
751| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
752| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400753
754### Parameters
755
Cary Clark8cc16c72017-08-25 11:51:49 -0400756<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
757one 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 -0400758 </tr>
759</table>
760
761### Example
762
763<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
764
765#### Example Output
766
767~~~~
768paint1 == paint2
769~~~~
770
771</fiddle-embed></div>
772
773---
774
775# <a name="Flags"></a> Flags
776
Cary Clark8cc16c72017-08-25 11:51:49 -0400777## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400778
779<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400780enum <a href="#Flags">Flags</a> {
781<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
782<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
783<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
784<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
785<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
786<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
787<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
788<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
789<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
790<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
791<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400792
Cary Clark8cc16c72017-08-25 11:51:49 -0400793<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400794};
795</pre>
796
Cary Clark8cc16c72017-08-25 11:51:49 -0400797The bit values stored in <a href="#Flags">Flags</a>.
798The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400799with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400800All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400801multiple settings at once.
802
803### Constants
804
805<table>
806 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400807 <td><a name="SkPaint_kAntiAlias_Flag"> <code><strong>SkPaint::kAntiAlias_Flag </strong></code> </a></td><td>0x0001 </td><td>mask for setting <a href="SkPaint_Reference#Anti_alias">Anti-alias</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400808 </tr>
809 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400810 <td><a name="SkPaint_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 -0400811 </tr>
812 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400813 <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 -0400814 </tr>
815 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400816 <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 -0400817 </tr>
818 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400819 <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 -0400820 </tr>
821 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400822 <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 -0400823 </tr>
824 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400825 <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 -0400826 </tr>
827 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400828 <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 -0400829 </tr>
830 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400831 <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 -0400832 </tr>
833 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400834 <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 -0400835 </tr>
836 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400837 <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 -0400838 </tr>
839 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400840 <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 -0400841 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400842<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400843
844</table>
845
Cary Clark8cc16c72017-08-25 11:51:49 -0400846## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400847
848<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400849enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
850<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
851<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400852};</pre>
853
854### Constants
855
856<table>
857 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400858 <td><a name="SkPaint_kUnderlineText_ReserveFlag"> <code><strong>SkPaint::kUnderlineText_ReserveFlag </strong></code> </a></td><td>0x0008</td><td>mask for underline text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400859 </tr>
860 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400861 <td><a name="SkPaint_kStrikeThruText_ReserveFlag"> <code><strong>SkPaint::kStrikeThruText_ReserveFlag </strong></code> </a></td><td>0x0010</td><td>mask for strike-thru text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400862 </tr>
863</table>
864
865
866
Cary Clark493df1f2017-08-25 13:14:33 -0400867<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400868## getFlags
869
870<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
871uint32_t getFlags() const
872</pre>
873
Cary Clark8cc16c72017-08-25 11:51:49 -0400874Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
875bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400876
877### Return Value
878
Cary Clark8cc16c72017-08-25 11:51:49 -0400879zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400880
881### Example
882
883<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
884
885#### Example Output
886
887~~~~
888(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
889~~~~
890
891</fiddle-embed></div>
892
893---
894
Cary Clark493df1f2017-08-25 13:14:33 -0400895<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400896## setFlags
897
898<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
899void setFlags(uint32_t flags)
900</pre>
901
Cary Clark8cc16c72017-08-25 11:51:49 -0400902Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
903All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400904
905### Parameters
906
Cary Clark8cc16c72017-08-25 11:51:49 -0400907<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
908union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400909 </tr>
910</table>
911
912### Example
913
914<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
915
916#### Example Output
917
918~~~~
919paint.isAntiAlias()
920paint.isDither()
921~~~~
922
923</fiddle-embed></div>
924
925---
926
927# <a name="Anti-alias"></a> Anti-alias
Cary Clark4c06f5e2017-08-04 12:48:24 -0400928<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400929If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
930If <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 -0400931
Cary Clarkce101242017-09-01 15:51:02 -0400932The rule for <a href="#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400933passing through the pixel center may, but is not required to, draw the pixel.
934
Cary Clarkce101242017-09-01 15:51:02 -0400935<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 -0400936active <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 -0400937
Cary Clarkce101242017-09-01 15:51:02 -0400938A platform may only support <a href="undocumented#Anti_alias">Anti-aliased</a> drawing. Some <a href="undocumented#GPU_backed">GPU-backed</a> platforms use
939<a href="undocumented#Supersampling">Supersampling</a> to <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> all drawing, and have no mechanism to selectively
940<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400941
Cary Clarkce101242017-09-01 15:51:02 -0400942The amount of coverage computed for <a href="undocumented#Anti_alias">Anti-aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400943
Cary Clark4c06f5e2017-08-04 12:48:24 -0400944<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> is disabled by default.
Cary Clark8cc16c72017-08-25 11:51:49 -0400945<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> 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 -0400946at compile time.
947
948### Example
949
950<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
951A blue line draws only where the pixel centers are contained.
Cary Clarkce101242017-09-01 15:51:02 -0400952The lines are drawn into <a href="undocumented#Bitmap">Bitmap</a>, then drawn magnified to make the
953<a href="#Alias">Aliasing</a> easier to see.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400954
Cary Clark493df1f2017-08-25 13:14:33 -0400955<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400956## isAntiAlias
957
958<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
959bool isAntiAlias() const
960</pre>
961
Cary Clark4c06f5e2017-08-04 12:48:24 -0400962If 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 -0400963
Cary Clark8cc16c72017-08-25 11:51:49 -0400964Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400965
966### Return Value
967
Cary Clark8cc16c72017-08-25 11:51:49 -0400968<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400969
970### Example
971
972<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
973
974#### Example Output
975
976~~~~
977paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
978paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
979~~~~
980
981</fiddle-embed></div>
982
983---
984
Cary Clark493df1f2017-08-25 13:14:33 -0400985<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400986## setAntiAlias
987
988<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
989void setAntiAlias(bool aa)
990</pre>
991
Cary Clark4c06f5e2017-08-04 12:48:24 -0400992Requests, 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 -0400993partial transparency.
994
Cary Clark8cc16c72017-08-25 11:51:49 -0400995Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
996Clears <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 -0400997
998### Parameters
999
Cary Clark8cc16c72017-08-25 11:51:49 -04001000<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
1001setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001002 </tr>
1003</table>
1004
1005### Example
1006
1007<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1008
1009#### Example Output
1010
1011~~~~
1012paint1 == paint2
1013~~~~
1014
1015</fiddle-embed></div>
1016
1017---
1018
1019# <a name="Dither"></a> Dither
Cary Clarkce101242017-09-01 15:51:02 -04001020<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001021This can help to smooth color transitions and reducing banding in gradients.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001022Dithering lessens visible banding from <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
1023and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> gradients,
1024and improves rendering into a <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001025
1026Dithering is always enabled for linear gradients drawing into
Cary Clark4c06f5e2017-08-04 12:48:24 -04001027<a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a> and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001028<a href="#Dither">Dither</a> cannot be enabled for <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> <a href="undocumented#Surface">Surface</a> and
Cary Clark4c06f5e2017-08-04 12:48:24 -04001029<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001030
Cary Clark8cc16c72017-08-25 11:51:49 -04001031<a href="#Dither">Dither</a> is disabled by default.
1032<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 -04001033at compile time.
1034
Cary Clark8cc16c72017-08-25 11:51:49 -04001035Some 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 -04001036
1037### Example
1038
1039<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1040alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1041
1042### Example
1043
1044<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001045Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001046dither, making it easier to see.</div></fiddle-embed></div>
1047
Cary Clark493df1f2017-08-25 13:14:33 -04001048<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001049## isDither
1050
1051<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1052bool isDither() const
1053</pre>
1054
1055If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001056Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001057
1058### Return Value
1059
Cary Clark8cc16c72017-08-25 11:51:49 -04001060<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001061
1062### Example
1063
1064<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1065
1066#### Example Output
1067
1068~~~~
1069paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1070paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1071~~~~
1072
1073</fiddle-embed></div>
1074
1075---
1076
Cary Clark493df1f2017-08-25 13:14:33 -04001077<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001078## setDither
1079
1080<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1081void setDither(bool dither)
1082</pre>
1083
1084Requests, but does not require, to distribute color error.
1085
Cary Clark8cc16c72017-08-25 11:51:49 -04001086Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1087Clears <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 -04001088
1089### Parameters
1090
Cary Clark8cc16c72017-08-25 11:51:49 -04001091<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1092setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001093 </tr>
1094</table>
1095
1096### Example
1097
1098<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1099
1100#### Example Output
1101
1102~~~~
1103paint1 == paint2
1104~~~~
1105
1106</fiddle-embed></div>
1107
1108### See Also
1109
Cary Clark4c06f5e2017-08-04 12:48:24 -04001110<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001111
1112---
1113
1114### See Also
1115
Cary Clark4c06f5e2017-08-04 12:48:24 -04001116Gradient <a href="undocumented#RGB_565">Color RGB-565</a>
Cary Clark12799e12017-07-28 15:18:29 -04001117
1118# <a name="Device_Text"></a> Device Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001119<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 -04001120
Cary Clark8cc16c72017-08-25 11:51:49 -04001121When 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 -04001122create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001123on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001124<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 -04001125the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001126
Cary Clark8cc16c72017-08-25 11:51:49 -04001127<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 -04001128As the opaqueness
1129of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1130
1131Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001132<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> and <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> are clear by default.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001133<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 -04001134<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 -04001135
1136### Example
1137
Cary Clark4c06f5e2017-08-04 12:48:24 -04001138<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 -04001139When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="#Glyph">Glyphs</a> are identical, but not evenly spaced.
1140When <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 -04001141
1142## <a name="Linear_Text"></a> Linear Text
1143
Cary Clark4c06f5e2017-08-04 12:48:24 -04001144<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 -04001145If <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 -04001146If <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 -04001147
Cary Clark493df1f2017-08-25 13:14:33 -04001148<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001149## isLinearText
1150
1151<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1152bool isLinearText() const
1153</pre>
1154
Cary Clark4c06f5e2017-08-04 12:48:24 -04001155If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001156
Cary Clark8cc16c72017-08-25 11:51:49 -04001157Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001158
1159### Return Value
1160
Cary Clark8cc16c72017-08-25 11:51:49 -04001161<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001162
1163### Example
1164
1165<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1166
1167### See Also
1168
Cary Clark8cc16c72017-08-25 11:51:49 -04001169<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001170
1171---
1172
Cary Clark493df1f2017-08-25 13:14:33 -04001173<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001174## setLinearText
1175
1176<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1177void setLinearText(bool linearText)
1178</pre>
1179
Cary Clark4c06f5e2017-08-04 12:48:24 -04001180If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001181By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001182
Cary Clark8cc16c72017-08-25 11:51:49 -04001183Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1184Clears <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 -04001185
1186### Parameters
1187
Cary Clark8cc16c72017-08-25 11:51:49 -04001188<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1189setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001190 </tr>
1191</table>
1192
1193### Example
1194
1195<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1196
1197### See Also
1198
Cary Clark8cc16c72017-08-25 11:51:49 -04001199<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001200
1201---
1202
1203## <a name="Subpixel_Text"></a> Subpixel Text
1204
Cary Clark8cc16c72017-08-25 11:51:49 -04001205<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 -04001206As the opaqueness
1207of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1208
Cary Clark493df1f2017-08-25 13:14:33 -04001209<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001210## isSubpixelText
1211
1212<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1213bool isSubpixelText() const
1214</pre>
1215
Cary Clarkce101242017-09-01 15:51:02 -04001216If true, <a href="#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001217
Cary Clark8cc16c72017-08-25 11:51:49 -04001218Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001219
1220### Return Value
1221
Cary Clark8cc16c72017-08-25 11:51:49 -04001222<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001223
1224### Example
1225
1226<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1227
1228#### Example Output
1229
1230~~~~
1231paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1232paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1233~~~~
1234
1235</fiddle-embed></div>
1236
1237---
1238
Cary Clark493df1f2017-08-25 13:14:33 -04001239<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001240## setSubpixelText
1241
1242<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1243void setSubpixelText(bool subpixelText)
1244</pre>
1245
Cary Clarkce101242017-09-01 15:51:02 -04001246Requests, but does not require, that <a href="#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001247
Cary Clark8cc16c72017-08-25 11:51:49 -04001248Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1249Clears <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 -04001250
1251### Parameters
1252
Cary Clark8cc16c72017-08-25 11:51:49 -04001253<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1254setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001255 </tr>
1256</table>
1257
1258### Example
1259
1260<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1261
1262#### Example Output
1263
1264~~~~
1265paint1 == paint2
1266~~~~
1267
1268</fiddle-embed></div>
1269
1270---
1271
1272## <a name="LCD_Text"></a> LCD Text
1273
Cary Clark8cc16c72017-08-25 11:51:49 -04001274When 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 -04001275create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001276on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001277<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 -04001278the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001279
Cary Clark493df1f2017-08-25 13:14:33 -04001280<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001281## isLCDRenderText
1282
1283<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1284bool isLCDRenderText() const
1285</pre>
1286
Cary Clarkce101242017-09-01 15:51:02 -04001287If true, <a href="#Glyph">Glyphs</a> may use <a href="undocumented#LCD">LCD</a> striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001288
Cary Clark8cc16c72017-08-25 11:51:49 -04001289Returns 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 -04001290
1291### Return Value
1292
Cary Clark8cc16c72017-08-25 11:51:49 -04001293<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001294
1295### Example
1296
1297<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1298
1299#### Example Output
1300
1301~~~~
1302paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1303paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1304~~~~
1305
1306</fiddle-embed></div>
1307
1308---
1309
Cary Clark493df1f2017-08-25 13:14:33 -04001310<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001311## setLCDRenderText
1312
1313<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1314void setLCDRenderText(bool lcdText)
1315</pre>
1316
Cary Clarkce101242017-09-01 15:51:02 -04001317Requests, but does not require, that <a href="#Glyph">Glyphs</a> use <a href="undocumented#LCD">LCD</a> striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001318
Cary Clark8cc16c72017-08-25 11:51:49 -04001319Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1320Clears <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 -04001321
1322### Parameters
1323
Cary Clark8cc16c72017-08-25 11:51:49 -04001324<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1325setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001326 </tr>
1327</table>
1328
1329### Example
1330
1331<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1332
1333#### Example Output
1334
1335~~~~
1336paint1 == paint2
1337~~~~
1338
1339</fiddle-embed></div>
1340
1341---
1342
1343# <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
Cary Clarkce101242017-09-01 15:51:02 -04001344<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 -04001345<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 Clark12799e12017-07-28 15:18:29 -04001346in a font if the platform supports this option.
1347
Cary Clark8cc16c72017-08-25 11:51:49 -04001348<a href="undocumented#FreeType">FreeType</a> selects the bitmap glyph if available when <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set, and selects
1349the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001350<a href="undocumented#Windows">Windows</a> may select the bitmap glyph but is not required to do so.
1351<a href="undocumented#OS_X">OS X</a> and <a href="undocumented#iOS">iOS</a> do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001352
Cary Clark4c06f5e2017-08-04 12:48:24 -04001353<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1354<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 -04001355<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001356
1357### Example
1358
1359<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clarkce101242017-09-01 15:51:02 -04001360<div>The "" <a href="undocumented#TrueType">TrueType</a> font in the <a href="undocumented#Skia">Skia</a> resources/fonts directory
1361includes an embedded bitmap <a href="undocumented#Glyph">Glyph</a> at odd font sizes. This example works
1362on platforms that use <a href="undocumented#FreeType">FreeType</a> as their <a href="#Engine">Font Engine</a>.
1363<a href="undocumented#Windows">Windows</a> may, but is not required to, return a bitmap glyph if
1364<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set.</div><a href="undocumented#SkBitmap">SkBitmap</a> bitmap;
Cary Clark12799e12017-07-28 15:18:29 -04001365bitmap.allocN32Pixels(30, 15);
1366bitmap.eraseColor(0);
Cary Clark4c06f5e2017-08-04 12:48:24 -04001367<a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> offscreen(bitmap);
Cary Clark8cc16c72017-08-25 11:51:49 -04001368<a href="#SkPaint">SkPaint</a> paint;
Cary Clark12799e12017-07-28 15:18:29 -04001369paint.</pre>
1370
Cary Clark493df1f2017-08-25 13:14:33 -04001371<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001372## isEmbeddedBitmapText
1373
1374<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1375bool isEmbeddedBitmapText() const
1376</pre>
1377
Cary Clarkce101242017-09-01 15:51:02 -04001378If 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 -04001379
Cary Clark8cc16c72017-08-25 11:51:49 -04001380Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001381
1382### Return Value
1383
Cary Clark8cc16c72017-08-25 11:51:49 -04001384<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001385
1386### Example
1387
1388<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1389
1390#### Example Output
1391
1392~~~~
1393paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1394paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1395~~~~
1396
1397</fiddle-embed></div>
1398
1399---
1400
Cary Clark493df1f2017-08-25 13:14:33 -04001401<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001402## setEmbeddedBitmapText
1403
1404<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1405void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1406</pre>
1407
1408Requests, but does not require, to use bitmaps in fonts instead of outlines.
1409
Cary Clark8cc16c72017-08-25 11:51:49 -04001410Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1411Clears <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 -04001412
1413### Parameters
1414
Cary Clark8cc16c72017-08-25 11:51:49 -04001415<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1416setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001417 </tr>
1418</table>
1419
1420### Example
1421
1422<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1423
1424#### Example Output
1425
1426~~~~
1427paint1 == paint2
1428~~~~
1429
1430</fiddle-embed></div>
1431
1432---
1433
1434# <a name="Automatic_Hinting"></a> Automatic Hinting
Cary Clark8cc16c72017-08-25 11:51:49 -04001435If <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 -04001436instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001437<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
1438<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001439
Cary Clark8cc16c72017-08-25 11:51:49 -04001440<a href="#Automatic_Hinting">Automatic Hinting</a> only affects platforms that use <a href="undocumented#FreeType">FreeType</a> as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001441
Cary Clark493df1f2017-08-25 13:14:33 -04001442<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001443## isAutohinted
1444
1445<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1446bool isAutohinted() const
1447</pre>
1448
Cary Clark8cc16c72017-08-25 11:51:49 -04001449If 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 Clark4c06f5e2017-08-04 12:48:24 -04001450platform uses <a href="undocumented#FreeType">FreeType</a> 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 -04001451<a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001452
Cary Clark8cc16c72017-08-25 11:51:49 -04001453Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001454
1455### Return Value
1456
Cary Clark8cc16c72017-08-25 11:51:49 -04001457<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001458
1459### Example
1460
1461<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1462
1463#### Example Output
1464
1465~~~~
1466paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1467paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1468~~~~
1469
1470</fiddle-embed></div>
1471
1472### See Also
1473
Cary Clark8cc16c72017-08-25 11:51:49 -04001474<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001475
1476---
1477
Cary Clark493df1f2017-08-25 13:14:33 -04001478<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001479## setAutohinted
1480
1481<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1482void setAutohinted(bool useAutohinter)
1483</pre>
1484
Cary Clark8cc16c72017-08-25 11:51:49 -04001485If <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 -04001486instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001487<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
1488<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001489
Cary Clark4c06f5e2017-08-04 12:48:24 -04001490Only affects platforms that use <a href="undocumented#FreeType">FreeType</a> as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001491
Cary Clark8cc16c72017-08-25 11:51:49 -04001492Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1493Clears <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 -04001494
1495### Parameters
1496
Cary Clark8cc16c72017-08-25 11:51:49 -04001497<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1498setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001499 </tr>
1500</table>
1501
1502### Example
1503
1504<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1505
1506### See Also
1507
Cary Clark8cc16c72017-08-25 11:51:49 -04001508<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001509
1510---
1511
1512# <a name="Vertical_Text"></a> Vertical Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001513<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 -04001514using <a href="#Advance">Font Advance</a> to position subsequent <a href="#Glyph">Glyphs</a>. By default, each successive glyph
1515is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
1516<a href="#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001517
Cary Clarkce101242017-09-01 15:51:02 -04001518<a href="undocumented#Skia">Skia</a> can translate text character codes as a series of <a href="#Glyph">Glyphs</a>, but does not implement
Cary Clark12799e12017-07-28 15:18:29 -04001519font substitution,
Cary Clarkce101242017-09-01 15:51:02 -04001520textual substitution, line layout, or contextual spacing like <a href="undocumented#Kerning">Kerning</a> pairs. Use
1521a text shaping engine likeHarfBuzzto translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001522into glyph series.
1523
Cary Clark8cc16c72017-08-25 11:51:49 -04001524<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 -04001525
Cary Clark8cc16c72017-08-25 11:51:49 -04001526<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1527<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 -04001528
Cary Clark8cc16c72017-08-25 11:51:49 -04001529<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1530<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1531<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001532
1533### Example
1534
1535<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1536
Cary Clark493df1f2017-08-25 13:14:33 -04001537<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001538## isVerticalText
1539
1540<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1541bool isVerticalText() const
1542</pre>
1543
Cary Clarkce101242017-09-01 15:51:02 -04001544If true, <a href="#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001545
Cary Clark8cc16c72017-08-25 11:51:49 -04001546Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001547
1548### Return Value
1549
Cary Clark8cc16c72017-08-25 11:51:49 -04001550<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001551
1552### Example
1553
1554<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1555
1556#### Example Output
1557
1558~~~~
1559paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1560paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1561~~~~
1562
1563</fiddle-embed></div>
1564
1565---
1566
Cary Clark493df1f2017-08-25 13:14:33 -04001567<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001568## setVerticalText
1569
1570<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1571void setVerticalText(bool verticalText)
1572</pre>
1573
1574If true, text advance positions the next glyph below the previous glyph instead of to the
1575right of previous glyph.
1576
Cary Clark8cc16c72017-08-25 11:51:49 -04001577Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1578Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001579
1580### Parameters
1581
Cary Clark8cc16c72017-08-25 11:51:49 -04001582<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1583setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001584 </tr>
1585</table>
1586
1587### Example
1588
1589<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1590
1591#### Example Output
1592
1593~~~~
1594paint1 == paint2
1595~~~~
1596
1597</fiddle-embed></div>
1598
1599---
1600
1601# <a name="Fake_Bold"></a> Fake Bold
Cary Clark8cc16c72017-08-25 11:51:49 -04001602<a href="#Fake_Bold">Fake Bold</a> approximates the bold font style accompanying a normal font when a bold font face
Cary Clark4c06f5e2017-08-04 12:48:24 -04001603is not available. <a href="undocumented#Skia">Skia</a> does not provide font substitution; it is up to the client to find the
1604bold font face using the platform's <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001605
Cary Clark8cc16c72017-08-25 11:51:49 -04001606Use <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 -04001607is not available.
1608
Cary Clarkce101242017-09-01 15:51:02 -04001609A <a href="undocumented#FreeType">FreeType</a> based port may define <a href="undocumented#SK_USE_FREETYPE_EMBOLDEN">SK USE FREETYPE EMBOLDEN</a> at compile time to direct
1610the font engine to create the bold <a href="#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark8cc16c72017-08-25 11:51:49 -04001611by 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 -04001612
Cary Clark8cc16c72017-08-25 11:51:49 -04001613<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001614
1615### Example
1616
1617<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1618
Cary Clark493df1f2017-08-25 13:14:33 -04001619<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001620## isFakeBoldText
1621
1622<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1623bool isFakeBoldText() const
1624</pre>
1625
1626If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1627from outlines.
1628
Cary Clark8cc16c72017-08-25 11:51:49 -04001629Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001630
1631### Return Value
1632
Cary Clark8cc16c72017-08-25 11:51:49 -04001633<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001634
1635### Example
1636
1637<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1638
1639#### Example Output
1640
1641~~~~
1642paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1643paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1644~~~~
1645
1646</fiddle-embed></div>
1647
1648---
1649
Cary Clark493df1f2017-08-25 13:14:33 -04001650<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001651## setFakeBoldText
1652
1653<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1654void setFakeBoldText(bool fakeBoldText)
1655</pre>
1656
Cary Clarkce101242017-09-01 15:51:02 -04001657Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001658
Cary Clark8cc16c72017-08-25 11:51:49 -04001659Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1660Clears <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 -04001661
1662### Parameters
1663
Cary Clark8cc16c72017-08-25 11:51:49 -04001664<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1665setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001666 </tr>
1667</table>
1668
1669### Example
1670
1671<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1672
1673#### Example Output
1674
1675~~~~
1676paint1 == paint2
1677~~~~
1678
1679</fiddle-embed></div>
1680
1681---
1682
1683# <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
Cary Clarkce101242017-09-01 15:51:02 -04001684if <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
1685spacing by the difference of the hinted and <a href="undocumented#Unhinted">Unhinted</a> <a href="undocumented#Left_Side_Bearing">Left Side Bearing</a> and
1686<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
1687<a href="undocumented#FreeType">FreeType</a> as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001688
Cary Clarkce101242017-09-01 15:51:02 -04001689<a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is not related to text <a href="undocumented#Kerning">Kerning</a>, where the space between
1690a specific pair of characters is adjusted using data in the font's <a href="undocumented#Kerning">Kerning</a> tables.
Cary Clark12799e12017-07-28 15:18:29 -04001691
Cary Clark493df1f2017-08-25 13:14:33 -04001692<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001693## isDevKernText
1694
1695<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1696bool isDevKernText() const
1697</pre>
1698
1699Returns if character spacing may be adjusted by the hinting difference.
1700
Cary Clark8cc16c72017-08-25 11:51:49 -04001701Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001702
1703### Return Value
1704
Cary Clark8cc16c72017-08-25 11:51:49 -04001705<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001706
1707### Example
1708
1709<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1710
1711---
1712
Cary Clark493df1f2017-08-25 13:14:33 -04001713<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001714## setDevKernText
1715
1716<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1717void setDevKernText(bool devKernText)
1718</pre>
1719
1720Requests, but does not require, to use hinting to adjust glyph spacing.
1721
Cary Clark8cc16c72017-08-25 11:51:49 -04001722Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1723Clears <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 -04001724
1725### Parameters
1726
Cary Clark8cc16c72017-08-25 11:51:49 -04001727<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1728setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001729 </tr>
1730</table>
1731
1732### Example
1733
1734<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1735
1736#### Example Output
1737
1738~~~~
1739paint1 == paint2
1740~~~~
1741
1742</fiddle-embed></div>
1743
1744---
1745
1746# <a name="Filter_Quality_Methods"></a> Filter Quality Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04001747<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1748A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1749A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001750If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1751in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001752
Cary Clark8cc16c72017-08-25 11:51:49 -04001753<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 -04001754
1755<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001756 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1757 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1758 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1759 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001760</table>
1761
Cary Clark8cc16c72017-08-25 11:51:49 -04001762and when <a href="#Paint">Paint</a> has a <a href="undocumented#Shader">Shader</a> specialization that uses <a href="undocumented#Image">Image</a> or <a href="undocumented#Bitmap">Bitmap</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001763
Cary Clark4c06f5e2017-08-04 12:48:24 -04001764<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 -04001765
1766### Example
1767
1768<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1769
Cary Clark493df1f2017-08-25 13:14:33 -04001770<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001771## getFilterQuality
1772
1773<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1774SkFilterQuality getFilterQuality() const
1775</pre>
1776
Cary Clark4c06f5e2017-08-04 12:48:24 -04001777Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001778draws faster; a higher setting looks better when the image is scaled.
1779
1780### Return Value
1781
Cary Clark4c06f5e2017-08-04 12:48:24 -04001782one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1783<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001784
1785### Example
1786
1787<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1788
1789#### Example Output
1790
1791~~~~
1792kNone_SkFilterQuality == paint.getFilterQuality()
1793~~~~
1794
1795</fiddle-embed></div>
1796
1797---
1798
Cary Clark493df1f2017-08-25 13:14:33 -04001799<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001800## setFilterQuality
1801
1802<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1803void setFilterQuality(SkFilterQuality quality)
1804</pre>
1805
Cary Clark4c06f5e2017-08-04 12:48:24 -04001806Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001807draws faster; a higher setting looks better when the image is scaled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001808Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001809
1810### Parameters
1811
Cary Clark8cc16c72017-08-25 11:51:49 -04001812<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04001813one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1814<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001815 </tr>
1816</table>
1817
1818### Example
1819
1820<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1821
1822#### Example Output
1823
1824~~~~
1825kHigh_SkFilterQuality == paint.getFilterQuality()
1826~~~~
1827
1828</fiddle-embed></div>
1829
1830### See Also
1831
Cary Clark4c06f5e2017-08-04 12:48:24 -04001832<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001833
1834---
1835
1836# <a name="Color_Methods"></a> Color Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04001837<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> values used to draw a filled
Cary Clark12799e12017-07-28 15:18:29 -04001838or stroked shape in a
183932-bit value. Each component occupies 8-bits, ranging from zero: no contribution;
1840to 255: full intensity. All values in any combination are valid.
1841
Cary Clarkce101242017-09-01 15:51:02 -04001842<a href="undocumented#Color">Color</a> is not <a href="#Premultiply">Premultiplied</a>;
Cary Clark8cc16c72017-08-25 11:51:49 -04001843<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 -04001844
Cary Clark8cc16c72017-08-25 11:51:49 -04001845The bit positions of <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a> are independent of the bit positions
Cary Clark12799e12017-07-28 15:18:29 -04001846on the output device, which may have more or fewer bits, and may have a different arrangement.
1847
Cary Clark8cc16c72017-08-25 11:51:49 -04001848| 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 -04001849| --- | --- | --- | --- | --- |
1850| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1851
1852### Example
1853
1854<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1855
Cary Clark493df1f2017-08-25 13:14:33 -04001856<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001857## getColor
1858
1859<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1860SkColor getColor() const
1861</pre>
1862
Cary Clarkce101242017-09-01 15:51:02 -04001863Retrieves <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 -04001864Use 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 -04001865a color component.
1866
1867### Return Value
1868
Cary Clarkce101242017-09-01 15:51:02 -04001869<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001870
1871### Example
1872
1873<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1874
1875#### Example Output
1876
1877~~~~
1878Yellow is 100% red, 100% green, and 0% blue.
1879~~~~
1880
1881</fiddle-embed></div>
1882
1883### See Also
1884
Cary Clark4c06f5e2017-08-04 12:48:24 -04001885<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001886
1887---
1888
Cary Clark493df1f2017-08-25 13:14:33 -04001889<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001890## setColor
1891
1892<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1893void setColor(SkColor color)
1894</pre>
1895
Cary Clarkce101242017-09-01 15:51:02 -04001896Sets <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,
1897<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 -04001898
1899### Parameters
1900
Cary Clark8cc16c72017-08-25 11:51:49 -04001901<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001902<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001903 </tr>
1904</table>
1905
1906### Example
1907
1908<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1909
1910#### Example Output
1911
1912~~~~
1913green1 == green2
1914~~~~
1915
1916</fiddle-embed></div>
1917
1918### See Also
1919
Cary Clark8cc16c72017-08-25 11:51:49 -04001920<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 -04001921
1922---
1923
1924## <a name="Alpha_Methods"></a> Alpha Methods
1925
Cary Clark8cc16c72017-08-25 11:51:49 -04001926<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 -04001927
Cary Clark493df1f2017-08-25 13:14:33 -04001928<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001929## getAlpha
1930
1931<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1932uint8_t getAlpha() const
1933</pre>
1934
Cary Clarkce101242017-09-01 15:51:02 -04001935Retrieves <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 -04001936
1937### Return Value
1938
Cary Clarkce101242017-09-01 15:51:02 -04001939<a href="#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001940
1941### Example
1942
1943<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1944
1945#### Example Output
1946
1947~~~~
1948255 == paint.getAlpha()
1949~~~~
1950
1951</fiddle-embed></div>
1952
1953---
1954
Cary Clark493df1f2017-08-25 13:14:33 -04001955<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001956## setAlpha
1957
1958<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1959void setAlpha(U8CPU a)
1960</pre>
1961
Cary Clarkce101242017-09-01 15:51:02 -04001962Replaces <a href="#Alpha">Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001963unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001964build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1965<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 -04001966fully opaque.
1967
1968### Parameters
1969
Cary Clark8cc16c72017-08-25 11:51:49 -04001970<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001971<a href="#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001972 </tr>
1973</table>
1974
1975### Example
1976
1977<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1978
1979#### Example Output
1980
1981~~~~
19820x44112233 == paint.getColor()
1983~~~~
1984
1985</fiddle-embed></div>
1986
1987---
1988
Cary Clark493df1f2017-08-25 13:14:33 -04001989<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001990## setARGB
1991
1992<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1993void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
1994</pre>
1995
Cary Clark4c06f5e2017-08-04 12:48:24 -04001996Sets <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 -04001997The 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 -04001998
1999### Parameters
2000
Cary Clark8cc16c72017-08-25 11:51:49 -04002001<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2002amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2003 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2004amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2005 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2006amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2007 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2008amount 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 -04002009 </tr>
2010</table>
2011
2012### Example
2013
2014<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2015
2016#### Example Output
2017
2018~~~~
2019transRed1 == transRed2
2020~~~~
2021
2022</fiddle-embed></div>
2023
2024### See Also
2025
Cary Clark8cc16c72017-08-25 11:51:49 -04002026<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002027
2028---
2029
2030# <a name="Style"></a> Style
Cary Clark8cc16c72017-08-25 11:51:49 -04002031<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2032Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002033
Cary Clark8cc16c72017-08-25 11:51:49 -04002034Set <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 -04002035The fill covers the area inside the geometry for most shapes.
2036
Cary Clark8cc16c72017-08-25 11:51:49 -04002037Set <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 -04002038
2039## <a name="Fill"></a> Fill
2040
2041### See Also
2042
Cary Clark8cc16c72017-08-25 11:51:49 -04002043<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002044
2045## <a name="Stroke"></a> Stroke
2046
2047The stroke covers the area described by following the shape's edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002048<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>.
2049The area covered where the shape turns a corner is described by <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002050The stroke is centered on the shape; it extends equally on either side of the shape's edge.
2051
Cary Clark8cc16c72017-08-25 11:51:49 -04002052As <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
2053may 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 -04002054
2055## <a name="Hairline"></a> Hairline
2056
Cary Clark8cc16c72017-08-25 11:51:49 -04002057<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Hairline">Hairline</a>.
2058<a href="#Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
Cary Clark12799e12017-07-28 15:18:29 -04002059flow horizontally, vertically,or diagonally.
2060
Cary Clark8cc16c72017-08-25 11:51:49 -04002061<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
2062two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2063pixel. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
Cary Clark4c06f5e2017-08-04 12:48:24 -04002064<a href="undocumented#GPU_backed">GPU-backed</a> implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002065while stroking.
2066
Cary Clark8cc16c72017-08-25 11:51:49 -04002067## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002068
2069<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002070enum <a href="#SkPaint_Style">Style</a> {
2071<a href="#SkPaint_kFill_Style">kFill Style</a>,
2072<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2073<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002074};</pre>
2075
Cary Clark8cc16c72017-08-25 11:51:49 -04002076Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002077The stroke and fill
2078share all paint attributes; for instance, they are drawn with the same color.
2079
Cary Clark8cc16c72017-08-25 11:51:49 -04002080Use <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 -04002081a fill draw.
2082
2083### Constants
2084
2085<table>
2086 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002087 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clarkce101242017-09-01 15:51:02 -04002088Applies to <a href="undocumented#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>.
2089<a href="undocumented#Bitmap">Bitmap</a>, <a href="undocumented#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 -04002090<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2091The <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 -04002092and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002093<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 -04002094 </tr>
2095 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002096 <td><a name="SkPaint_kStroke_Style"> <code><strong>SkPaint::kStroke_Style </strong></code> </a></td><td>1</td><td>Set to stroke geometry.
Cary Clarkce101242017-09-01 15:51:02 -04002097Applies to <a href="undocumented#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>.
2098<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 -04002099and ignore the set <a href="#SkPaint_Style">Style</a>.
2100The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002101 </tr>
2102 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002103 <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 Clarkce101242017-09-01 15:51:02 -04002104Applies to <a href="undocumented#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 -04002105<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2106and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002107 </tr>
2108
2109</table>
2110
Cary Clark8cc16c72017-08-25 11:51:49 -04002111## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002112
2113<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
2114enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002115<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002116};</pre>
2117
2118### Constants
2119
2120<table>
2121 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002122 <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.
2123May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002124 </tr>
2125
2126</table>
2127
Cary Clark493df1f2017-08-25 13:14:33 -04002128<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002129## getStyle
2130
2131<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2132Style getStyle() const
2133</pre>
2134
2135Whether the geometry is filled, stroked, or filled and stroked.
2136
2137### Return Value
2138
Cary Clark8cc16c72017-08-25 11:51:49 -04002139one 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 -04002140
2141### Example
2142
2143<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2144
2145#### Example Output
2146
2147~~~~
2148SkPaint::kFill_Style == paint.getStyle()
2149~~~~
2150
2151</fiddle-embed></div>
2152
2153### See Also
2154
Cary Clark8cc16c72017-08-25 11:51:49 -04002155<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002156
2157---
2158
Cary Clark493df1f2017-08-25 13:14:33 -04002159<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002160## setStyle
2161
2162<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2163void setStyle(Style style)
2164</pre>
2165
2166Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002167Has 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 -04002168
2169### Parameters
2170
Cary Clark8cc16c72017-08-25 11:51:49 -04002171<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2172one 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 -04002173 </tr>
2174</table>
2175
2176### Example
2177
2178<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2179
2180### See Also
2181
Cary Clark8cc16c72017-08-25 11:51:49 -04002182<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002183
2184---
2185
2186### See Also
2187
Cary Clark8cc16c72017-08-25 11:51:49 -04002188<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 -04002189
2190# <a name="Stroke_Width"></a> Stroke Width
Cary Clark8cc16c72017-08-25 11:51:49 -04002191<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark12799e12017-07-28 15:18:29 -04002192of the stroke perpendicular to the path's direction when the paint's style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002193set 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 -04002194
2195When width is greater than zero, the stroke encompasses as many pixels partially
2196or fully as needed. When the width equals zero, the paint enables hairlines;
2197the stroke is always one pixel wide.
2198
Cary Clark8cc16c72017-08-25 11:51:49 -04002199The stroke's dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002200remains one pixel wide regardless of scaling.
2201
2202The default width for the paint is zero.
2203
2204### Example
2205
Cary Clarkce101242017-09-01 15:51:02 -04002206<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clark12799e12017-07-28 15:18:29 -04002207line and the platform's implementation.</div></fiddle-embed></div>
2208
Cary Clark493df1f2017-08-25 13:14:33 -04002209<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002210## getStrokeWidth
2211
2212<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2213SkScalar getStrokeWidth() const
2214</pre>
2215
Cary Clark8cc16c72017-08-25 11:51:49 -04002216Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002217outline the shape.
2218
2219### Return Value
2220
Cary Clark8cc16c72017-08-25 11:51:49 -04002221zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002222
2223### Example
2224
2225<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2226
2227#### Example Output
2228
2229~~~~
22300 == paint.getStrokeWidth()
2231~~~~
2232
2233</fiddle-embed></div>
2234
2235---
2236
Cary Clark493df1f2017-08-25 13:14:33 -04002237<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002238## setStrokeWidth
2239
2240<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2241void setStrokeWidth(SkScalar width)
2242</pre>
2243
2244Sets the thickness of the pen used by the paint to
2245outline the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002246Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002247
2248### Parameters
2249
Cary Clark8cc16c72017-08-25 11:51:49 -04002250<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2251zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002252 </tr>
2253</table>
2254
2255### Example
2256
2257<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2258
2259#### Example Output
2260
2261~~~~
22625 == paint.getStrokeWidth()
2263~~~~
2264
2265</fiddle-embed></div>
2266
2267---
2268
2269# <a name="Miter_Limit"></a> Miter Limit
Cary Clark8cc16c72017-08-25 11:51:49 -04002270<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002271relative to the stroke width.
2272
Cary Clark8cc16c72017-08-25 11:51:49 -04002273<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2274is 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>
2275or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002276
Cary Clark8cc16c72017-08-25 11:51:49 -04002277If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2278is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002279
Cary Clark8cc16c72017-08-25 11:51:49 -04002280<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002281
Cary Clark8cc16c72017-08-25 11:51:49 -04002282miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002283The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clarkce101242017-09-01 15:51:02 -04002284in "<a href="undocumented#SkUserConfig">SkUserConfig</a>.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002285
2286Here are some miter limits and the angles that triggers them.
2287
2288| miter limit | angle in degrees |
2289| --- | --- |
2290| 10 | 11.48 |
2291| 9 | 12.76 |
2292| 8 | 14.36 |
2293| 7 | 16.43 |
2294| 6 | 19.19 |
2295| 5 | 23.07 |
2296| 4 | 28.96 |
2297| 3 | 38.94 |
2298| 2 | 60 |
2299| 1 | 180 |
2300
2301### Example
2302
2303<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2304When the miter limit is decreased slightly, the miter join is replaced
2305by a bevel join.</div></fiddle-embed></div>
2306
Cary Clark493df1f2017-08-25 13:14:33 -04002307<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002308## getStrokeMiter
2309
2310<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2311SkScalar getStrokeMiter() const
2312</pre>
2313
2314The limit at which a sharp corner is drawn beveled.
2315
2316### Return Value
2317
Cary Clark8cc16c72017-08-25 11:51:49 -04002318zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002319
2320### Example
2321
2322<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2323
2324#### Example Output
2325
2326~~~~
2327default miter limit == 4
2328~~~~
2329
2330</fiddle-embed></div>
2331
2332### See Also
2333
Cary Clark8cc16c72017-08-25 11:51:49 -04002334<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 -04002335
2336---
2337
Cary Clark493df1f2017-08-25 13:14:33 -04002338<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002339## setStrokeMiter
2340
2341<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2342void setStrokeMiter(SkScalar miter)
2343</pre>
2344
2345The limit at which a sharp corner is drawn beveled.
2346Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002347Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002348
2349### Parameters
2350
Cary Clark8cc16c72017-08-25 11:51:49 -04002351<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2352zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002353 </tr>
2354</table>
2355
2356### Example
2357
2358<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2359
2360#### Example Output
2361
2362~~~~
2363default miter limit == 8
2364~~~~
2365
2366</fiddle-embed></div>
2367
2368### See Also
2369
Cary Clark8cc16c72017-08-25 11:51:49 -04002370<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 -04002371
2372---
2373
2374# <a name="Stroke_Cap"></a> Stroke Cap
2375
Cary Clark8cc16c72017-08-25 11:51:49 -04002376## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002377
2378<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002379enum <a href="#SkPaint_Cap">Cap</a> {
2380<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2381<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2382<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002383
Cary Clark8cc16c72017-08-25 11:51:49 -04002384<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2385<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002386};
Cary Clark8cc16c72017-08-25 11:51:49 -04002387static 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 -04002388
Cary Clark8cc16c72017-08-25 11:51:49 -04002389<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 -04002390
2391### Constants
2392
2393<table>
2394 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002395 <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 -04002396 </tr>
2397 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002398 <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 -04002399and end.</td>
2400 </tr>
2401 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002402 <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 -04002403and end. The square sides are parallel to the initial and final direction
2404of the stroke.</td>
2405 </tr>
2406 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002407 <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 -04002408 </tr>
2409 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002410 <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>.
2411<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 -04002412 </tr>
2413 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002414 <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.
2415May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002416 </tr>
2417
Cary Clark8cc16c72017-08-25 11:51:49 -04002418Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
2419follows the <a href="#Contour">Path Contour</a>, moving parallel to the contours's direction.
Cary Clark12799e12017-07-28 15:18:29 -04002420
Cary Clark8cc16c72017-08-25 11:51:49 -04002421If 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 -04002422visible beginning and end.
2423
Cary Clark8cc16c72017-08-25 11:51:49 -04002424<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 -04002425
Cary Clark8cc16c72017-08-25 11:51:49 -04002426<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> is not drawn.
2427<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 -04002428at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002429<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
2430<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002431
Cary Clark8cc16c72017-08-25 11:51:49 -04002432<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 -04002433
2434</table>
2435
2436### Example
2437
2438<div><fiddle-embed name="3d92b449b298b4ce4004cfca6b91cee7"></fiddle-embed></div>
2439
Cary Clark493df1f2017-08-25 13:14:33 -04002440<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002441## getStrokeCap
2442
2443<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2444Cap getStrokeCap() const
2445</pre>
2446
2447The geometry drawn at the beginning and end of strokes.
2448
2449### Return Value
2450
Cary Clark8cc16c72017-08-25 11:51:49 -04002451one 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 -04002452
2453### Example
2454
2455<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2456
2457#### Example Output
2458
2459~~~~
2460kButt_Cap == default stroke cap
2461~~~~
2462
2463</fiddle-embed></div>
2464
2465### See Also
2466
Cary Clark8cc16c72017-08-25 11:51:49 -04002467<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002468
2469---
2470
Cary Clark493df1f2017-08-25 13:14:33 -04002471<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002472## setStrokeCap
2473
2474<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2475void setStrokeCap(Cap cap)
2476</pre>
2477
2478The geometry drawn at the beginning and end of strokes.
2479
2480### Parameters
2481
Cary Clark8cc16c72017-08-25 11:51:49 -04002482<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2483one 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>;
2484has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002485 </tr>
2486</table>
2487
2488### Example
2489
2490<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2491
2492#### Example Output
2493
2494~~~~
2495kRound_Cap == paint.getStrokeCap()
2496~~~~
2497
2498</fiddle-embed></div>
2499
2500### See Also
2501
Cary Clark8cc16c72017-08-25 11:51:49 -04002502<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002503
2504---
2505
2506# <a name="Stroke_Join"></a> Stroke Join
Cary Clark8cc16c72017-08-25 11:51:49 -04002507<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 -04002508
Cary Clark8cc16c72017-08-25 11:51:49 -04002509Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
2510follows the <a href="#Contour">Path Contour</a>, moving parallel to the contours's direction.
Cary Clark12799e12017-07-28 15:18:29 -04002511
2512If the contour direction changes abruptly, because the tangent direction leading
2513to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002514the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002515
2516### Example
2517
2518<div><fiddle-embed name="4a4e41ed89a57d47eab5d1600c33b0e8"></fiddle-embed></div>
2519
Cary Clark8cc16c72017-08-25 11:51:49 -04002520## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002521
2522<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002523enum <a href="#SkPaint_Join">Join</a> {
2524<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2525<a href="#SkPaint_kRound_Join">kRound Join</a>,
2526<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002527
Cary Clark8cc16c72017-08-25 11:51:49 -04002528<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2529<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002530};
Cary Clark8cc16c72017-08-25 11:51:49 -04002531static 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 -04002532
Cary Clark8cc16c72017-08-25 11:51:49 -04002533<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 -04002534affects the four corners of a stroked rectangle, and the connected segments in a
2535stroked path.
2536
2537Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2538radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2539connect the thick strokes.
2540
2541The fill path constructed to describe the stroked path respects the join setting but may
2542not contain the actual join. For instance, a fill path constructed with round joins does
2543not necessarily include circles at each connected segment.
2544
2545### Constants
2546
2547<table>
2548 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002549 <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>.
2550If 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 -04002551 </tr>
2552 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002553 <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 -04002554 </tr>
2555 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002556 <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 -04002557 </tr>
2558 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002559 <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 -04002560 </tr>
2561 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002562 <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>.
2563<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 -04002564 </tr>
2565 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002566 <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.
2567May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002568 </tr>
2569</table>
2570
2571### Example
2572
2573<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2574
2575### See Also
2576
Cary Clark8cc16c72017-08-25 11:51:49 -04002577<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 -04002578
2579
2580
Cary Clark493df1f2017-08-25 13:14:33 -04002581<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002582## getStrokeJoin
2583
2584<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2585Join getStrokeJoin() const
2586</pre>
2587
2588The geometry drawn at the corners of strokes.
2589
2590### Return Value
2591
Cary Clark8cc16c72017-08-25 11:51:49 -04002592one 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 -04002593
2594### Example
2595
2596<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2597
2598#### Example Output
2599
2600~~~~
2601kMiter_Join == default stroke join
2602~~~~
2603
2604</fiddle-embed></div>
2605
2606### See Also
2607
Cary Clark8cc16c72017-08-25 11:51:49 -04002608<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002609
2610---
2611
Cary Clark493df1f2017-08-25 13:14:33 -04002612<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002613## setStrokeJoin
2614
2615<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2616void setStrokeJoin(Join join)
2617</pre>
2618
2619The geometry drawn at the corners of strokes.
2620
2621### Parameters
2622
Cary Clark8cc16c72017-08-25 11:51:49 -04002623<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2624one 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 -04002625otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002626 </tr>
2627</table>
2628
2629### Example
2630
2631<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2632
2633#### Example Output
2634
2635~~~~
2636kMiter_Join == paint.getStrokeJoin()
2637~~~~
2638
2639</fiddle-embed></div>
2640
2641### See Also
2642
Cary Clark8cc16c72017-08-25 11:51:49 -04002643<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002644
2645---
2646
2647### See Also
2648
Cary Clark8cc16c72017-08-25 11:51:49 -04002649<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002650
2651# <a name="Fill_Path"></a> Fill Path
Cary Clark8cc16c72017-08-25 11:51:49 -04002652<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 -04002653
Cary Clark8cc16c72017-08-25 11:51:49 -04002654If <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 -04002655replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2656destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002657
Cary Clark4c06f5e2017-08-04 12:48:24 -04002658Fill <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
2659the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002660
Cary Clark8cc16c72017-08-25 11:51:49 -04002661If <a href="#SkPaint_Style">Style</a> is <a href="#SkPaint_kStroke_Style">kStroke Style</a> or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
2662and <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>,
2663and <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 -04002664
Cary Clark8cc16c72017-08-25 11:51:49 -04002665Fill <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 -04002666
Cary Clark8cc16c72017-08-25 11:51:49 -04002667If 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>
2668returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002669
Cary Clark493df1f2017-08-25 13:14:33 -04002670<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002671## getFillPath
2672
2673<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2674bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect,
2675 SkScalar resScale = 1) const
2676</pre>
2677
2678The filled equivalent of the stroked path.
2679
2680### Parameters
2681
Cary Clark8cc16c72017-08-25 11:51:49 -04002682<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002683<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002684 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2685resulting <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>
2686 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002687optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002688 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002689if > 1, increase precision, else if (0 < res < 1) reduce precision
2690to favor speed and size</td>
2691 </tr>
2692</table>
2693
2694### Return Value
2695
Cary Clark8cc16c72017-08-25 11:51:49 -04002696true 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 -04002697
2698### Example
2699
Cary Clarkce101242017-09-01 15:51:02 -04002700<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.
2701At the lowest precision, the <a href="#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark12799e12017-07-28 15:18:29 -04002702At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2703
2704---
2705
2706<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2707bool getFillPath(const SkPath& src, SkPath* dst) const
2708</pre>
2709
2710The filled equivalent of the stroked path.
2711
Cary Clark8cc16c72017-08-25 11:51:49 -04002712Replaces <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>.
2713<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 -04002714
2715### Parameters
2716
Cary Clark8cc16c72017-08-25 11:51:49 -04002717<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002718<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002719 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2720resulting <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 -04002721 </tr>
2722</table>
2723
2724### Return Value
2725
Cary Clark8cc16c72017-08-25 11:51:49 -04002726true 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 -04002727
2728### Example
2729
2730<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2731
2732---
2733
2734### See Also
2735
Cary Clark8cc16c72017-08-25 11:51:49 -04002736<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 -04002737
2738# <a name="Shader_Methods"></a> Shader Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002739<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2740<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark8cc16c72017-08-25 11:51:49 -04002741If <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 -04002742
Cary Clark8cc16c72017-08-25 11:51:49 -04002743<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2744If <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 -04002745the fill.
2746
Cary Clark8cc16c72017-08-25 11:51:49 -04002747The 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 -04002748
2749### Example
2750
2751<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2752
Cary Clark8cc16c72017-08-25 11:51:49 -04002753If <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 -04002754
2755### Example
2756
2757<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2758
Cary Clark493df1f2017-08-25 13:14:33 -04002759<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002760## getShader
2761
2762<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2763SkShader* getShader() const
2764</pre>
2765
2766Optional colors used when filling a path, such as a gradient.
2767
Cary Clark4c06f5e2017-08-04 12:48:24 -04002768Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002769
2770### Return Value
2771
Cary Clark4c06f5e2017-08-04 12:48:24 -04002772<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002773
2774### Example
2775
2776<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2777
2778#### Example Output
2779
2780~~~~
2781nullptr == shader
2782nullptr != shader
2783~~~~
2784
2785</fiddle-embed></div>
2786
2787---
2788
Cary Clark493df1f2017-08-25 13:14:33 -04002789<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002790## refShader
2791
2792<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2793sk_sp<SkShader> refShader() const
2794</pre>
2795
2796Optional colors used when filling a path, such as a gradient.
2797
Cary Clark4c06f5e2017-08-04 12:48:24 -04002798Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002799
2800### Return Value
2801
Cary Clark4c06f5e2017-08-04 12:48:24 -04002802<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002803
2804### Example
2805
2806<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2807
2808#### Example Output
2809
2810~~~~
2811shader unique: true
2812shader unique: false
2813~~~~
2814
2815</fiddle-embed></div>
2816
2817---
2818
Cary Clark493df1f2017-08-25 13:14:33 -04002819<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002820## setShader
2821
2822<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2823void setShader(sk_sp<SkShader> shader)
2824</pre>
2825
2826Optional colors used when filling a path, such as a gradient.
2827
Cary Clarkd0530ba2017-09-14 11:25:39 -04002828Sets <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 Clark8cc16c72017-08-25 11:51:49 -04002829Does not alter <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002830
2831### Parameters
2832
Cary Clark8cc16c72017-08-25 11:51:49 -04002833<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002834how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002835 </tr>
2836</table>
2837
2838### Example
2839
2840<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2841
2842---
2843
2844# <a name="Color_Filter_Methods"></a> Color Filter Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002845<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2846<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 -04002847If <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 -04002848
Cary Clark8cc16c72017-08-25 11:51:49 -04002849The 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 -04002850
2851### Example
2852
2853<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2854
Cary Clark493df1f2017-08-25 13:14:33 -04002855<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002856## getColorFilter
2857
2858<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2859SkColorFilter* getColorFilter() const
2860</pre>
2861
Cary Clark4c06f5e2017-08-04 12:48:24 -04002862Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2863Does 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 -04002864
2865### Return Value
2866
Cary Clark4c06f5e2017-08-04 12:48:24 -04002867<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002868
2869### Example
2870
2871<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2872
2873#### Example Output
2874
2875~~~~
2876nullptr == color filter
2877nullptr != color filter
2878~~~~
2879
2880</fiddle-embed></div>
2881
2882---
2883
Cary Clark493df1f2017-08-25 13:14:33 -04002884<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002885## refColorFilter
2886
2887<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2888sk_sp<SkColorFilter> refColorFilter() const
2889</pre>
2890
Cary Clark4c06f5e2017-08-04 12:48:24 -04002891Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2892Increases <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 -04002893
2894### Return Value
2895
Cary Clark4c06f5e2017-08-04 12:48:24 -04002896<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002897
2898### Example
2899
2900<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2901
2902#### Example Output
2903
2904~~~~
2905color filter unique: true
2906color filter unique: false
2907~~~~
2908
2909</fiddle-embed></div>
2910
2911---
2912
Cary Clark493df1f2017-08-25 13:14:33 -04002913<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002914## setColorFilter
2915
2916<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2917void setColorFilter(sk_sp<SkColorFilter> colorFilter)
2918</pre>
2919
Cary Clarkd0530ba2017-09-14 11:25:39 -04002920Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Color_Filter">Color Filter</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002921Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2922Does not alter filter <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002923
2924### Parameters
2925
Cary Clark8cc16c72017-08-25 11:51:49 -04002926<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002927<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002928 </tr>
2929</table>
2930
2931### Example
2932
2933<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2934
2935---
2936
2937# <a name="Blend_Mode_Methods"></a> Blend Mode Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002938<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 -04002939The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002940over the destination color.
2941
2942### Example
2943
2944<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2945
2946### See Also
2947
Cary Clark4c06f5e2017-08-04 12:48:24 -04002948<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002949
Cary Clark493df1f2017-08-25 13:14:33 -04002950<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002951## getBlendMode
2952
2953<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2954SkBlendMode getBlendMode() const
2955</pre>
2956
Cary Clark4c06f5e2017-08-04 12:48:24 -04002957Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002958By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002959
2960### Return Value
2961
2962mode used to combine source color with destination color
2963
2964### Example
2965
2966<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
2967
2968#### Example Output
2969
2970~~~~
2971kSrcOver == getBlendMode
2972kSrcOver != getBlendMode
2973~~~~
2974
2975</fiddle-embed></div>
2976
2977---
2978
Cary Clark493df1f2017-08-25 13:14:33 -04002979<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002980## isSrcOver
2981
2982<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2983bool isSrcOver() const
2984</pre>
2985
Cary Clark8cc16c72017-08-25 11:51:49 -04002986Returns 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 -04002987
2988### Return Value
2989
Cary Clark8cc16c72017-08-25 11:51:49 -04002990true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04002991
2992### Example
2993
2994<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2995
2996#### Example Output
2997
2998~~~~
2999isSrcOver == true
3000isSrcOver != true
3001~~~~
3002
3003</fiddle-embed></div>
3004
3005---
3006
Cary Clark493df1f2017-08-25 13:14:33 -04003007<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003008## setBlendMode
3009
3010<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3011void setBlendMode(SkBlendMode mode)
3012</pre>
3013
Cary Clark8cc16c72017-08-25 11:51:49 -04003014Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003015Does not check for valid input.
3016
3017### Parameters
3018
Cary Clark8cc16c72017-08-25 11:51:49 -04003019<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003020<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003021 </tr>
3022</table>
3023
3024### Example
3025
3026<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3027
3028#### Example Output
3029
3030~~~~
3031isSrcOver == true
3032isSrcOver != true
3033~~~~
3034
3035</fiddle-embed></div>
3036
3037---
3038
3039# <a name="Path_Effect_Methods"></a> Path Effect Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003040<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3041<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 -04003042If <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 -04003043
3044### Example
3045
3046<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3047
3048### See Also
3049
Cary Clark4c06f5e2017-08-04 12:48:24 -04003050<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003051
Cary Clark493df1f2017-08-25 13:14:33 -04003052<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003053## getPathEffect
3054
3055<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3056SkPathEffect* getPathEffect() const
3057</pre>
3058
Cary Clark4c06f5e2017-08-04 12:48:24 -04003059Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3060Does 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 -04003061
3062### Return Value
3063
Cary Clark4c06f5e2017-08-04 12:48:24 -04003064<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003065
3066### Example
3067
3068<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3069
3070#### Example Output
3071
3072~~~~
3073nullptr == path effect
3074nullptr != path effect
3075~~~~
3076
3077</fiddle-embed></div>
3078
3079---
3080
Cary Clark493df1f2017-08-25 13:14:33 -04003081<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003082## refPathEffect
3083
3084<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3085sk_sp<SkPathEffect> refPathEffect() const
3086</pre>
3087
Cary Clark4c06f5e2017-08-04 12:48:24 -04003088Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3089Increases <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 -04003090
3091### Return Value
3092
Cary Clark4c06f5e2017-08-04 12:48:24 -04003093<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003094
3095### Example
3096
3097<div><fiddle-embed name="c55c74f8f581870bd2c18f2f99765579">
3098
3099#### Example Output
3100
3101~~~~
3102path effect unique: true
3103path effect unique: false
3104~~~~
3105
3106</fiddle-embed></div>
3107
3108---
3109
Cary Clark493df1f2017-08-25 13:14:33 -04003110<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003111## setPathEffect
3112
3113<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3114void setPathEffect(sk_sp<SkPathEffect> pathEffect)
3115</pre>
3116
Cary Clark8cc16c72017-08-25 11:51:49 -04003117Sets <a href="undocumented#Path_Effect">Path Effect</a> to <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a>,
Cary Clarkd0530ba2017-09-14 11:25:39 -04003118decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003119Pass nullptr to leave the path geometry unaltered.
Cary Clark8cc16c72017-08-25 11:51:49 -04003120Does not alter <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003121
3122### Parameters
3123
Cary Clark8cc16c72017-08-25 11:51:49 -04003124<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003125replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003126 </tr>
3127</table>
3128
3129### Example
3130
3131<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3132
3133---
3134
3135# <a name="Mask_Filter_Methods"></a> Mask Filter Methods
Cary Clarkce101242017-09-01 15:51:02 -04003136<a href="undocumented#Mask_Filter">Mask Filter</a> uses coverage of the shape drawn to create <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003137<a href="undocumented#Mask_Filter">Mask Filter</a> operates at a lower level than <a href="undocumented#Rasterizer">Rasterizer</a>; <a href="undocumented#Mask_Filter">Mask Filter</a> takes a <a href="undocumented#Mask">Mask</a>,
3138and returns a <a href="undocumented#Mask">Mask</a>.
3139<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as creating a blur effect.
3140Set <a href="undocumented#Mask_Filter">Mask Filter</a> to nullptr to prevent <a href="undocumented#Mask_Filter">Mask Filter</a> from modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003141
3142### Example
3143
3144<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3145
Cary Clark493df1f2017-08-25 13:14:33 -04003146<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003147## getMaskFilter
3148
3149<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3150SkMaskFilter* getMaskFilter() const
3151</pre>
3152
Cary Clark4c06f5e2017-08-04 12:48:24 -04003153Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3154Does 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 -04003155
3156### Return Value
3157
Cary Clark4c06f5e2017-08-04 12:48:24 -04003158<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003159
3160### Example
3161
3162<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3163
3164#### Example Output
3165
3166~~~~
3167nullptr == mask filter
3168nullptr != mask filter
3169~~~~
3170
3171</fiddle-embed></div>
3172
3173---
3174
Cary Clark493df1f2017-08-25 13:14:33 -04003175<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003176## refMaskFilter
3177
3178<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3179sk_sp<SkMaskFilter> refMaskFilter() const
3180</pre>
3181
Cary Clark4c06f5e2017-08-04 12:48:24 -04003182Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3183Increases <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 -04003184
3185### Return Value
3186
Cary Clark4c06f5e2017-08-04 12:48:24 -04003187<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003188
3189### Example
3190
3191<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3192
3193#### Example Output
3194
3195~~~~
3196mask filter unique: true
3197mask filter unique: false
3198~~~~
3199
3200</fiddle-embed></div>
3201
3202---
3203
Cary Clark493df1f2017-08-25 13:14:33 -04003204<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003205## setMaskFilter
3206
3207<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3208void setMaskFilter(sk_sp<SkMaskFilter> maskFilter)
3209</pre>
3210
Cary Clark8cc16c72017-08-25 11:51:49 -04003211Sets <a href="undocumented#Mask_Filter">Mask Filter</a> to <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a>,
Cary Clarkd0530ba2017-09-14 11:25:39 -04003212decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003213Pass nullptr to clear <a href="undocumented#Mask_Filter">Mask Filter</a> and leave <a href="undocumented#Mask_Filter">Mask Filter</a> effect on <a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3214Does not affect <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003215Does not alter <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003216
3217### Parameters
3218
Cary Clark8cc16c72017-08-25 11:51:49 -04003219<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003220modifies clipping mask generated from drawn geometry</td>
3221 </tr>
3222</table>
3223
3224### Example
3225
3226<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3227
3228---
3229
3230# <a name="Typeface_Methods"></a> Typeface Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003231<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3232<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3233The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003234implementation.
3235
3236### Example
3237
3238<div><fiddle-embed name="c18b1696b8c1649bebf7eb1f8b89e0b0"></fiddle-embed></div>
3239
Cary Clark493df1f2017-08-25 13:14:33 -04003240<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003241## getTypeface
3242
3243<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3244SkTypeface* getTypeface() const
3245</pre>
3246
Cary Clark4c06f5e2017-08-04 12:48:24 -04003247Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
3248Does not alter <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003249
3250### Return Value
3251
Cary Clark4c06f5e2017-08-04 12:48:24 -04003252<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003253
3254### Example
3255
3256<div><fiddle-embed name="4d9ffb5761b62a9e3bc9b0bca8787bce">
3257
3258#### Example Output
3259
3260~~~~
3261nullptr == typeface
3262nullptr != typeface
3263~~~~
3264
3265</fiddle-embed></div>
3266
3267---
3268
Cary Clark493df1f2017-08-25 13:14:33 -04003269<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003270## refTypeface
3271
3272<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3273sk_sp<SkTypeface> refTypeface() const
3274</pre>
3275
Cary Clark4c06f5e2017-08-04 12:48:24 -04003276Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003277
3278### Return Value
3279
Cary Clark4c06f5e2017-08-04 12:48:24 -04003280<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003281
3282### Example
3283
3284<div><fiddle-embed name="c8edce7b36a3ffda8af4fe89d7187dbc">
3285
3286#### Example Output
3287
3288~~~~
3289typeface1 != typeface2
3290typeface1 == typeface2
3291~~~~
3292
3293</fiddle-embed></div>
3294
3295---
3296
Cary Clark493df1f2017-08-25 13:14:33 -04003297<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003298## setTypeface
3299
3300<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3301void setTypeface(sk_sp<SkTypeface> typeface)
3302</pre>
3303
Cary Clark8cc16c72017-08-25 11:51:49 -04003304Sets <a href="undocumented#Typeface">Typeface</a> to <a href="#SkPaint_setTypeface_typeface">typeface</a>,
Cary Clarkd0530ba2017-09-14 11:25:39 -04003305decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Typeface">Typeface</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003306Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>.
3307Does not alter <a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003308
3309### Parameters
3310
Cary Clark8cc16c72017-08-25 11:51:49 -04003311<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003312font and style used to draw text</td>
3313 </tr>
3314</table>
3315
3316### Example
3317
3318<div><fiddle-embed name="3d2656ec4c555ed2c7ec086720124a2a"></fiddle-embed></div>
3319
3320---
3321
3322# <a name="Rasterizer_Methods"></a> Rasterizer Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003323<a href="undocumented#Rasterizer">Rasterizer</a> controls how shapes are converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
3324<a href="undocumented#Rasterizer">Rasterizer</a> operates at a higher level than <a href="undocumented#Mask_Filter">Mask Filter</a>; <a href="undocumented#Rasterizer">Rasterizer</a> takes a <a href="SkPath_Reference#Path">Path</a>,
3325and returns a <a href="undocumented#Mask">Mask</a>.
3326<a href="undocumented#Rasterizer">Rasterizer</a> may change the geometry and transparency of the shape, such as
Cary Clark8cc16c72017-08-25 11:51:49 -04003327creating a shadow effect. <a href="undocumented#Rasterizer">Rasterizer</a> forms the base of <a href="#Layer">Rasterizer Layer</a>, which
Cary Clark12799e12017-07-28 15:18:29 -04003328creates effects like embossing and outlining.
Cary Clarkce101242017-09-01 15:51:02 -04003329<a href="undocumented#Rasterizer">Rasterizer</a> applies to <a href="undocumented#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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003330<a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003331
3332### Example
3333
3334<div><fiddle-embed name="e63f8a50996699342a14c6e54d684108"></fiddle-embed></div>
3335
Cary Clark493df1f2017-08-25 13:14:33 -04003336<a name="SkPaint_getRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003337## getRasterizer
3338
3339<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3340SkRasterizer* getRasterizer() const
3341</pre>
3342
Cary Clark4c06f5e2017-08-04 12:48:24 -04003343Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3344Does not alter <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003345
3346### Return Value
3347
Cary Clark4c06f5e2017-08-04 12:48:24 -04003348<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003349
3350### Example
3351
3352<div><fiddle-embed name="0707d407c3a14388b107af8ae5873e55">
3353
3354#### Example Output
3355
3356~~~~
3357nullptr == rasterizer
3358nullptr != rasterizer
3359~~~~
3360
3361</fiddle-embed></div>
3362
3363---
3364
Cary Clark493df1f2017-08-25 13:14:33 -04003365<a name="SkPaint_refRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003366## refRasterizer
3367
3368<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3369sk_sp<SkRasterizer> refRasterizer() const
3370</pre>
3371
Cary Clark4c06f5e2017-08-04 12:48:24 -04003372Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3373Increases <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003374
3375### Return Value
3376
Cary Clark4c06f5e2017-08-04 12:48:24 -04003377<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003378
3379### Example
3380
3381<div><fiddle-embed name="c0855ce19a33cb7e5747750ef341b7b3">
3382
3383#### Example Output
3384
3385~~~~
3386rasterizer unique: true
3387rasterizer unique: false
3388~~~~
3389
3390</fiddle-embed></div>
3391
3392---
3393
Cary Clark493df1f2017-08-25 13:14:33 -04003394<a name="SkPaint_setRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003395## setRasterizer
3396
3397<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3398void setRasterizer(sk_sp<SkRasterizer> rasterizer)
3399</pre>
3400
Cary Clark8cc16c72017-08-25 11:51:49 -04003401Sets <a href="undocumented#Rasterizer">Rasterizer</a> to <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a>,
Cary Clarkd0530ba2017-09-14 11:25:39 -04003402decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003403Pass nullptr to clear <a href="undocumented#Rasterizer">Rasterizer</a> and leave <a href="undocumented#Rasterizer">Rasterizer</a> effect on <a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3404Does not affect <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003405Does not alter <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003406
3407### Parameters
3408
Cary Clark8cc16c72017-08-25 11:51:49 -04003409<table> <tr> <td><a name="SkPaint_setRasterizer_rasterizer"> <code><strong>rasterizer </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003410how geometry is converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003411 </tr>
3412</table>
3413
3414### Example
3415
3416<div><fiddle-embed name="aec8ed9296c1628073086a33039f62b7"></fiddle-embed></div>
3417
3418---
3419
3420# <a name="Image_Filter_Methods"></a> Image Filter Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04003421<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3422with <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 -04003423which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
3424<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 -04003425can 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 -04003426<a href="undocumented#Image_Filter">Image Filter</a> operates independently of and can be used in combination with
3427<a href="undocumented#Mask_Filter">Mask Filter</a> and <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003428
3429### Example
3430
3431<div><fiddle-embed name="88804938b49eb4f7c7f01ad52f4db0d8"></fiddle-embed></div>
3432
Cary Clark493df1f2017-08-25 13:14:33 -04003433<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003434## getImageFilter
3435
3436<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3437SkImageFilter* getImageFilter() const
3438</pre>
3439
Cary Clark4c06f5e2017-08-04 12:48:24 -04003440Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3441Does 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 -04003442
3443### Return Value
3444
Cary Clark4c06f5e2017-08-04 12:48:24 -04003445<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003446
3447### Example
3448
3449<div><fiddle-embed name="38788d42772641606e08c60d9dd418a2">
3450
3451#### Example Output
3452
3453~~~~
3454nullptr == image filter
3455nullptr != image filter
3456~~~~
3457
3458</fiddle-embed></div>
3459
3460---
3461
Cary Clark493df1f2017-08-25 13:14:33 -04003462<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003463## refImageFilter
3464
3465<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3466sk_sp<SkImageFilter> refImageFilter() const
3467</pre>
3468
Cary Clark4c06f5e2017-08-04 12:48:24 -04003469Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3470Increases <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 -04003471
3472### Return Value
3473
Cary Clark4c06f5e2017-08-04 12:48:24 -04003474<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003475
3476### Example
3477
3478<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3479
3480#### Example Output
3481
3482~~~~
3483image filter unique: true
3484image filter unique: false
3485~~~~
3486
3487</fiddle-embed></div>
3488
3489---
3490
Cary Clark493df1f2017-08-25 13:14:33 -04003491<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003492## setImageFilter
3493
3494<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3495void setImageFilter(sk_sp<SkImageFilter> imageFilter)
3496</pre>
3497
Cary Clark8cc16c72017-08-25 11:51:49 -04003498Sets <a href="undocumented#Image_Filter">Image Filter</a> to <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a>,
Cary Clarkd0530ba2017-09-14 11:25:39 -04003499decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Image_Filter">Image Filter</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003500Pass 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 -04003501on drawing.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003502Does not affect <a href="undocumented#Rasterizer">Rasterizer</a> or <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003503Does not alter <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003504
3505### Parameters
3506
Cary Clark8cc16c72017-08-25 11:51:49 -04003507<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003508how <a href="undocumented#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003509 </tr>
3510</table>
3511
3512### Example
3513
3514<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3515
3516---
3517
3518# <a name="Draw_Looper_Methods"></a> Draw Looper Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003519<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 -04003520to another to construct the draw.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003521<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3522<a href="undocumented#Draw_Looper">Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3523Set <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 -04003524
3525### Example
3526
3527<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3528
Cary Clark493df1f2017-08-25 13:14:33 -04003529<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003530## getDrawLooper
3531
3532<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3533SkDrawLooper* getDrawLooper() const
3534</pre>
3535
Cary Clark4c06f5e2017-08-04 12:48:24 -04003536Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3537Does 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 -04003538
3539### Return Value
3540
Cary Clark4c06f5e2017-08-04 12:48:24 -04003541<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003542
3543### Example
3544
3545<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3546
3547#### Example Output
3548
3549~~~~
3550nullptr == draw looper
3551nullptr != draw looper
3552~~~~
3553
3554</fiddle-embed></div>
3555
3556---
3557
Cary Clark493df1f2017-08-25 13:14:33 -04003558<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003559## refDrawLooper
3560
3561<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3562sk_sp<SkDrawLooper> refDrawLooper() const
3563</pre>
3564
Cary Clark4c06f5e2017-08-04 12:48:24 -04003565Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3566Increases <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 -04003567
3568### Return Value
3569
Cary Clark4c06f5e2017-08-04 12:48:24 -04003570<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003571
3572### Example
3573
3574<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3575
3576#### Example Output
3577
3578~~~~
3579draw looper unique: true
3580draw looper unique: false
3581~~~~
3582
3583</fiddle-embed></div>
3584
3585---
3586
Cary Clark493df1f2017-08-25 13:14:33 -04003587<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003588## getLooper
3589
3590<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3591SkDrawLooper* getLooper() const
3592</pre>
3593
3594Deprecated.
3595
3596(see bug.skia.org/6259)
3597
3598### Return Value
3599
Cary Clark4c06f5e2017-08-04 12:48:24 -04003600<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003601
3602---
3603
Cary Clark493df1f2017-08-25 13:14:33 -04003604<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003605## setDrawLooper
3606
3607<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3608void setDrawLooper(sk_sp<SkDrawLooper> drawLooper)
3609</pre>
3610
Cary Clark8cc16c72017-08-25 11:51:49 -04003611Sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>,
Cary Clarkd0530ba2017-09-14 11:25:39 -04003612decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003613Pass nullptr to clear <a href="undocumented#Draw_Looper">Draw Looper</a> and leave <a href="undocumented#Draw_Looper">Draw Looper</a> effect on drawing unaltered.
Cary Clark8cc16c72017-08-25 11:51:49 -04003614Does not alter <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003615
3616### Parameters
3617
Cary Clark8cc16c72017-08-25 11:51:49 -04003618<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003619iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003620 </tr>
3621</table>
3622
3623### Example
3624
3625<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3626
3627---
3628
Cary Clark493df1f2017-08-25 13:14:33 -04003629<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003630## setLooper
3631
3632<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3633void setLooper(sk_sp<SkDrawLooper> drawLooper)
3634</pre>
3635
3636Deprecated.
3637
3638(see bug.skia.org/6259)
3639
3640### Parameters
3641
Cary Clark8cc16c72017-08-25 11:51:49 -04003642<table> <tr> <td><a name="SkPaint_setLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
3643sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setLooper_drawLooper">drawLooper</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003644 </tr>
3645
3646---
3647
3648</table>
3649
3650# <a name="Text_Align"></a> Text Align
3651
Cary Clark8cc16c72017-08-25 11:51:49 -04003652## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003653
3654<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003655enum <a href="#SkPaint_Align">Align</a> {
3656<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3657<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3658<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003659};</pre>
3660
Cary Clark8cc16c72017-08-25 11:51:49 -04003661<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clarkce101242017-09-01 15:51:02 -04003662<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 Clark8cc16c72017-08-25 11:51:49 -04003663<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3664<a href="#SkCanvas_drawTextOnPathHV">SkCanvas::drawTextOnPathHV</a>, <a href="#SkCanvas_drawTextRSXform">SkCanvas::drawTextRSXform</a>, <a href="#SkCanvas_drawTextBlob">SkCanvas::drawTextBlob</a>,
3665and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
Cary Clarkce101242017-09-01 15:51:02 -04003666as 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 -04003667
3668The text position is set by the font for both horizontal and vertical text.
3669Typically, for horizontal text, the position is to the left side of the glyph on the
3670base line; and for vertical text, the position is the horizontal center of the glyph
3671at the caps height.
3672
Cary Clark8cc16c72017-08-25 11:51:49 -04003673<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 -04003674using the metrics returned by the font.
3675
Cary Clark8cc16c72017-08-25 11:51:49 -04003676<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003677
3678### Constants
3679
3680<table>
3681 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003682 <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 -04003683 </tr>
3684 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003685 <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
3686half 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 -04003687 </tr>
3688 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003689 <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,
3690and 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 -04003691 </tr>
3692
3693</table>
3694
Cary Clark8cc16c72017-08-25 11:51:49 -04003695## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003696
3697<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
3698enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003699<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003700};</pre>
3701
3702### Constants
3703
3704<table>
3705 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003706 <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 -04003707 </tr>
3708
3709</table>
3710
3711### Example
3712
3713<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3714
3715### Example
3716
Cary Clark8cc16c72017-08-25 11:51:49 -04003717<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 -04003718
Cary Clark493df1f2017-08-25 13:14:33 -04003719<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003720## getTextAlign
3721
3722<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3723Align getTextAlign() const
3724</pre>
3725
Cary Clark8cc16c72017-08-25 11:51:49 -04003726Returns <a href="#Text_Align">Text Align</a>.
3727Returns <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 -04003728
3729### Return Value
3730
3731text placement relative to position
3732
3733### Example
3734
3735<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3736
3737#### Example Output
3738
3739~~~~
3740kLeft_Align == default
3741~~~~
3742
3743</fiddle-embed></div>
3744
3745---
3746
Cary Clark493df1f2017-08-25 13:14:33 -04003747<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003748## setTextAlign
3749
3750<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3751void setTextAlign(Align align)
3752</pre>
3753
Cary Clark8cc16c72017-08-25 11:51:49 -04003754Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3755Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003756
3757### Parameters
3758
Cary Clark8cc16c72017-08-25 11:51:49 -04003759<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003760text placement relative to position</td>
3761 </tr>
3762</table>
3763
3764### Example
3765
Cary Clark4c06f5e2017-08-04 12:48:24 -04003766<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 -04003767alignment out of range has no effect.</div></fiddle-embed></div>
3768
3769---
3770
3771# <a name="Text_Size"></a> Text Size
Cary Clark8cc16c72017-08-25 11:51:49 -04003772<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3773<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3774<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003775Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003776
3777### Example
3778
3779<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3780
Cary Clark493df1f2017-08-25 13:14:33 -04003781<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003782## getTextSize
3783
3784<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3785SkScalar getTextSize() const
3786</pre>
3787
Cary Clark8cc16c72017-08-25 11:51:49 -04003788Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003789
3790### Return Value
3791
3792typographic height of text
3793
3794### Example
3795
3796<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3797
3798---
3799
Cary Clark493df1f2017-08-25 13:14:33 -04003800<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003801## setTextSize
3802
3803<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3804void setTextSize(SkScalar textSize)
3805</pre>
3806
Cary Clark8cc16c72017-08-25 11:51:49 -04003807Sets <a href="#Text_Size">Text Size</a> in points.
3808Has 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 -04003809
3810### Parameters
3811
Cary Clark8cc16c72017-08-25 11:51:49 -04003812<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003813typographic height of text</td>
3814 </tr>
3815</table>
3816
3817### Example
3818
3819<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3820
3821---
3822
3823# <a name="Text_Scale_X"></a> Text Scale X
Cary Clark8cc16c72017-08-25 11:51:49 -04003824<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003825<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003826is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003827<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3828<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003829
3830### Example
3831
3832<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3833
Cary Clark493df1f2017-08-25 13:14:33 -04003834<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003835## getTextScaleX
3836
3837<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3838SkScalar getTextScaleX() const
3839</pre>
3840
Cary Clark8cc16c72017-08-25 11:51:49 -04003841Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003842Default value is 1.
3843
3844### Return Value
3845
3846text horizontal scale
3847
3848### Example
3849
3850<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3851
3852---
3853
Cary Clark493df1f2017-08-25 13:14:33 -04003854<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003855## setTextScaleX
3856
3857<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3858void setTextScaleX(SkScalar scaleX)
3859</pre>
3860
Cary Clark8cc16c72017-08-25 11:51:49 -04003861Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003862Default value is 1.
3863
3864### Parameters
3865
Cary Clark8cc16c72017-08-25 11:51:49 -04003866<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003867text horizontal scale</td>
3868 </tr>
3869</table>
3870
3871### Example
3872
3873<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3874
3875---
3876
3877# <a name="Text_Skew_X"></a> Text Skew X
Cary Clark8cc16c72017-08-25 11:51:49 -04003878<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003879<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003880is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003881<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3882<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003883
3884### Example
3885
3886<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3887
Cary Clark493df1f2017-08-25 13:14:33 -04003888<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003889## getTextSkewX
3890
3891<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3892SkScalar getTextSkewX() const
3893</pre>
3894
Cary Clark8cc16c72017-08-25 11:51:49 -04003895Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003896Default value is zero.
3897
3898### Return Value
3899
3900additional shear in x-axis relative to y-axis
3901
3902### Example
3903
3904<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3905
3906---
3907
Cary Clark493df1f2017-08-25 13:14:33 -04003908<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003909## setTextSkewX
3910
3911<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3912void setTextSkewX(SkScalar skewX)
3913</pre>
3914
Cary Clark8cc16c72017-08-25 11:51:49 -04003915Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003916Default value is zero.
3917
3918### Parameters
3919
Cary Clark8cc16c72017-08-25 11:51:49 -04003920<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003921additional shear in x-axis relative to y-axis</td>
3922 </tr>
3923</table>
3924
3925### Example
3926
3927<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3928
3929---
3930
3931# <a name="Text_Encoding"></a> Text Encoding
3932
Cary Clark8cc16c72017-08-25 11:51:49 -04003933## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003934
3935<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003936enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3937<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3938<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3939<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3940<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003941};</pre>
3942
Cary Clark8cc16c72017-08-25 11:51:49 -04003943<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded size,
Cary Clarkce101242017-09-01 15:51:02 -04003944or glyph indices. Character codes use the encoding specified by the<a href="undocumented#Unicode">Unicode</a> standard.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003945Character codes encoded size are specified by <a href="undocumented#UTF_8">UTF-8</a>, <a href="undocumented#UTF_16">UTF-16</a>, or <a href="undocumented#UTF_32">UTF-32</a>.
3946All character encoding are able to represent all of <a href="undocumented#Unicode">Unicode</a>, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003947in the total storage required.
3948
Cary Clarkce101242017-09-01 15:51:02 -04003949<a href="undocumented#UTF_8">UTF-8</a> (<a href="undocumented#RFC">RFC</a> 3629)is made up of 8-bit bytes,
Cary Clarkd0530ba2017-09-14 11:25:39 -04003950and encodes <a href="undocumented#ASCII">ASCII</a> in one byte, and all valid code points in <a href="undocumented#Unicode">Unicode</a> in multiple bytes.
3951<a href="undocumented#UTF_16">UTF-16</a> (<a href="undocumented#RFC">RFC</a> 2781)uses one or two 16-bit words,
3952and encodes <a href="undocumented#Unicode">Unicode</a> ranges 0x0000 to 0xD7FF and 0xE000 to 0xFFFF in one word.
3953<a href="undocumented#UTF_32">UTF-32</a>describes
3954a 32-bit word, which encodes all code points in <a href="undocumented#Unicode">Unicode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003955
Cary Clark4c06f5e2017-08-04 12:48:24 -04003956<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 -04003957A glyph index is a 16-bit word.
3958
Cary Clark8cc16c72017-08-25 11:51:49 -04003959<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 -04003960
3961### Constants
3962
3963<table>
3964 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003965 <td><a name="SkPaint_kUTF8_TextEncoding"> <code><strong>SkPaint::kUTF8_TextEncoding </strong></code> </a></td><td>0</td><td>Uses bytes to represent <a href="undocumented#UTF_8">UTF-8</a> or <a href="undocumented#ASCII">ASCII</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003966 </tr>
3967 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003968 <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 <a href="undocumented#Unicode">Unicode</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003969 </tr>
3970 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003971 <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 <a href="undocumented#Unicode">Unicode</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003972 </tr>
3973 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003974 <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 -04003975 </tr>
3976
3977</table>
3978
3979### Example
3980
Cary Clark4c06f5e2017-08-04 12:48:24 -04003981<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line has <a href="undocumented#UTF_8">UTF-8</a> encoding.
3982Second line has <a href="undocumented#UTF_16">UTF-16</a> encoding.
3983Third line has <a href="undocumented#UTF_32">UTF-32</a> encoding.
Cary Clark12799e12017-07-28 15:18:29 -04003984Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
3985
Cary Clark493df1f2017-08-25 13:14:33 -04003986<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003987## getTextEncoding
3988
3989<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3990TextEncoding getTextEncoding() const
3991</pre>
3992
Cary Clark8cc16c72017-08-25 11:51:49 -04003993Returns <a href="#Text_Encoding">Text Encoding</a>.
3994<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 -04003995
3996### Return Value
3997
Cary Clark8cc16c72017-08-25 11:51:49 -04003998one 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
3999<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004000
4001### Example
4002
4003<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
4004
4005#### Example Output
4006
4007~~~~
4008kUTF8_TextEncoding == text encoding
4009kGlyphID_TextEncoding == text encoding
4010~~~~
4011
4012</fiddle-embed></div>
4013
4014---
4015
Cary Clark493df1f2017-08-25 13:14:33 -04004016<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004017## setTextEncoding
4018
4019<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4020void setTextEncoding(TextEncoding encoding)
4021</pre>
4022
Cary Clark8cc16c72017-08-25 11:51:49 -04004023Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
4024<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
4025Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004026
4027### Parameters
4028
Cary Clark8cc16c72017-08-25 11:51:49 -04004029<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
4030one 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
4031<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004032 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004033#
4034
Cary Clark12799e12017-07-28 15:18:29 -04004035</table>
4036
4037### Example
4038
4039<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
4040
4041#### Example Output
4042
4043~~~~
40444 != text encoding
4045~~~~
4046
4047</fiddle-embed></div>
4048
4049---
4050
4051# <a name="Font_Metrics"></a> Font Metrics
Cary Clarkce101242017-09-01 15:51:02 -04004052<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 Clark4c06f5e2017-08-04 12:48:24 -04004053The 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 -04004054<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004055
Cary Clark4c06f5e2017-08-04 12:48:24 -04004056<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 -04004057X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4058are positive.
4059Y-axis values above the baseline are negative, and below the baseline are positive.
4060
4061### Example
4062
4063<div><fiddle-embed name="b5b76e0a15da0c3530071186a9006498"></fiddle-embed></div>
4064
Cary Clark8cc16c72017-08-25 11:51:49 -04004065# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clark12799e12017-07-28 15:18:29 -04004066
4067<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004068struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4069enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4070<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4071<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4072<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4073<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004074};
4075
Cary Clark8cc16c72017-08-25 11:51:49 -04004076uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4077<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4078<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4079<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4080<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4081<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4082<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4083<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4084<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4085<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4086<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4087<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4088<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4089<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4090<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4091<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004092
Cary Clark8cc16c72017-08-25 11:51:49 -04004093bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4094bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4095bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4096bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004097};</pre>
4098
Cary Clark8cc16c72017-08-25 11:51:49 -04004099<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
Cary Clark4c06f5e2017-08-04 12:48:24 -04004100computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
Cary Clarkce101242017-09-01 15:51:02 -04004101not available.
Cary Clark12799e12017-07-28 15:18:29 -04004102
Cary Clark8cc16c72017-08-25 11:51:49 -04004103<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
Cary Clark12799e12017-07-28 15:18:29 -04004104are valid, since their value may be zero.
Cary Clark8cc16c72017-08-25 11:51:49 -04004105<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
Cary Clark12799e12017-07-28 15:18:29 -04004106are valid, since their value may be zero.
4107
Cary Clark8cc16c72017-08-25 11:51:49 -04004108## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004109
4110<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004111enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4112<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4113<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4114<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4115<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004116};</pre>
4117
Cary Clark8cc16c72017-08-25 11:51:49 -04004118<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
Cary Clark12799e12017-07-28 15:18:29 -04004119the underline or strikeout metric may be valid and zero.
4120Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4121
4122### Constants
4123
4124<table>
4125 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004126 <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 -04004127 </tr>
4128 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004129 <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 -04004130 </tr>
4131 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004132 <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 -04004133 </tr>
4134 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004135 <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 -04004136 </tr>
4137
4138</table>
4139
Cary Clark8cc16c72017-08-25 11:51:49 -04004140<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004141
Cary Clark8cc16c72017-08-25 11:51:49 -04004142<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004143
Cary Clark8cc16c72017-08-25 11:51:49 -04004144<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004145
4146Largest height for any glyph.
4147A measure from the baseline, and is less than or equal to zero.
4148
Cary Clark8cc16c72017-08-25 11:51:49 -04004149<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004150
4151Recommended distance above the baseline to reserve for a line of text.
4152A measure from the baseline, and is less than or equal to zero.
4153
Cary Clark8cc16c72017-08-25 11:51:49 -04004154<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004155
4156Recommended distance below the baseline to reserve for a line of text.
4157A measure from the baseline, and is greater than or equal to zero.
4158
Cary Clark8cc16c72017-08-25 11:51:49 -04004159<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004160
4161Greatest extent below the baseline for any glyph.
4162A measure from the baseline, and is greater than or equal to zero.
4163
Cary Clark8cc16c72017-08-25 11:51:49 -04004164<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004165
4166Recommended distance to add between lines of text.
4167Greater than or equal to zero.
4168
Cary Clark8cc16c72017-08-25 11:51:49 -04004169<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004170
4171Average character width, if it is available.
4172Zero if no average width is stored in the font.
4173
Cary Clark8cc16c72017-08-25 11:51:49 -04004174<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004175
4176Maximum character width.
4177
Cary Clark8cc16c72017-08-25 11:51:49 -04004178<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004179
Cary Clarkce101242017-09-01 15:51:02 -04004180Minimum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004181Typically less than zero.
4182
Cary Clark8cc16c72017-08-25 11:51:49 -04004183<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004184
Cary Clarkce101242017-09-01 15:51:02 -04004185Maximum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004186Typically greater than zero.
4187
Cary Clark8cc16c72017-08-25 11:51:49 -04004188<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004189
4190Height of a lower-case 'x'.
4191May be zero if no lower-case height is stored in the font.
4192
Cary Clark8cc16c72017-08-25 11:51:49 -04004193<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004194
4195Height of an upper-case letter.
4196May be zero if no upper-case height is stored in the font.
4197
Cary Clark8cc16c72017-08-25 11:51:49 -04004198<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004199
4200Underline thickness. If the metric
Cary Clark8cc16c72017-08-25 11:51:49 -04004201is valid, the <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4202If <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 -04004203
Cary Clark8cc16c72017-08-25 11:51:49 -04004204<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004205
4206Underline position relative to the baseline.
4207It may be negative, to draw the underline above the baseline, zero
4208to draw the underline on the baseline, or positive to draw the underline
4209below the baseline.
4210
Cary Clark8cc16c72017-08-25 11:51:49 -04004211If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4212If <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 -04004213
Cary Clark8cc16c72017-08-25 11:51:49 -04004214<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004215
4216Strikeout thickness. If the metric
Cary Clark8cc16c72017-08-25 11:51:49 -04004217is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4218If <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 -04004219
Cary Clark8cc16c72017-08-25 11:51:49 -04004220<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004221
4222Strikeout position relative to the baseline.
4223It may be negative, to draw the strikeout above the baseline, zero
4224to draw the strikeout on the baseline, or positive to draw the strikeout
4225below the baseline.
4226
Cary Clark8cc16c72017-08-25 11:51:49 -04004227If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4228If <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 -04004229
Cary Clark493df1f2017-08-25 13:14:33 -04004230<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004231## hasUnderlineThickness
4232
4233<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4234bool hasUnderlineThickness(SkScalar* thickness) const
4235</pre>
4236
Cary Clark8cc16c72017-08-25 11:51:49 -04004237If <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 -04004238<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,
4239return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004240
4241### Parameters
4242
Cary Clark8cc16c72017-08-25 11:51:49 -04004243<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004244storage for underline width</td>
4245 </tr>
4246</table>
4247
4248### Return Value
4249
4250true if font specifies underline width
4251
4252---
4253
Cary Clark493df1f2017-08-25 13:14:33 -04004254<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004255## hasUnderlinePosition
4256
4257<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4258bool hasUnderlinePosition(SkScalar* position) const
4259</pre>
4260
Cary Clark8cc16c72017-08-25 11:51:49 -04004261If <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 -04004262<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,
4263return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004264
4265### Parameters
4266
Cary Clark8cc16c72017-08-25 11:51:49 -04004267<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4268storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004269 </tr>
4270</table>
4271
4272### Return Value
4273
Cary Clark8cc16c72017-08-25 11:51:49 -04004274true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004275
4276---
4277
Cary Clark493df1f2017-08-25 13:14:33 -04004278<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004279## hasStrikeoutThickness
4280
4281<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4282bool hasStrikeoutThickness(SkScalar* thickness) const
4283</pre>
4284
Cary Clark8cc16c72017-08-25 11:51:49 -04004285If <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 -04004286<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,
4287return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004288
4289### Parameters
4290
Cary Clark8cc16c72017-08-25 11:51:49 -04004291<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004292storage for strikeout width</td>
4293 </tr>
4294</table>
4295
4296### Return Value
4297
4298true if font specifies strikeout width
4299
4300---
4301
Cary Clark493df1f2017-08-25 13:14:33 -04004302<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004303## hasStrikeoutPosition
4304
4305<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4306bool hasStrikeoutPosition(SkScalar* position) const
4307</pre>
4308
Cary Clark8cc16c72017-08-25 11:51:49 -04004309If <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 -04004310<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,
4311return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004312
4313### Parameters
4314
Cary Clark8cc16c72017-08-25 11:51:49 -04004315<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4316storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004317 </tr>
4318</table>
4319
4320### Return Value
4321
Cary Clark8cc16c72017-08-25 11:51:49 -04004322true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004323
4324---
4325
Cary Clark493df1f2017-08-25 13:14:33 -04004326<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004327## getFontMetrics
4328
4329<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4330SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4331</pre>
4332
Cary Clark8cc16c72017-08-25 11:51:49 -04004333Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4334The 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 -04004335descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004336If <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>.
4337Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4338dimensions 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>,
4339<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4340Results 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 -04004341is ignored.
4342
4343### Parameters
4344
Cary Clark8cc16c72017-08-25 11:51:49 -04004345<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4346storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4347 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004348additional multiplier for returned values</td>
4349 </tr>
4350</table>
4351
4352### Return Value
4353
4354recommended spacing between lines
4355
4356### Example
4357
4358<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4359
4360### See Also
4361
Cary Clark8cc16c72017-08-25 11:51:49 -04004362<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 -04004363
4364---
4365
Cary Clark493df1f2017-08-25 13:14:33 -04004366<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004367## getFontSpacing
4368
4369<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4370SkScalar getFontSpacing() const
4371</pre>
4372
4373Returns the recommended spacing between lines: the sum of metrics
4374descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004375Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004376dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004377Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004378
4379### Return Value
4380
4381recommended spacing between lines
4382
4383### Example
4384
4385<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4386
4387#### Example Output
4388
4389~~~~
4390textSize: 12 fontSpacing: 13.9688
4391textSize: 18 fontSpacing: 20.9531
4392textSize: 24 fontSpacing: 27.9375
4393textSize: 32 fontSpacing: 37.25
4394~~~~
4395
4396</fiddle-embed></div>
4397
4398---
4399
Cary Clark493df1f2017-08-25 13:14:33 -04004400<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004401## getFontBounds
4402
4403<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4404SkRect getFontBounds() const
4405</pre>
4406
Cary Clarkce101242017-09-01 15:51:02 -04004407Returns the union of bounds of all <a href="#Glyph">Glyphs</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004408Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004409ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4410and <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 -04004411
Cary Clark8cc16c72017-08-25 11:51:49 -04004412If <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,
4413returns the same bounds as <a href="#Font_Metrics">Font Metrics</a> { <a href="#SkPaint_FontMetrics_fXMin">FontMetrics::fXMin</a>,
4414<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 -04004415
4416### Return Value
4417
Cary Clarkce101242017-09-01 15:51:02 -04004418union of bounds of all <a href="#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004419
4420### Example
4421
4422<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4423
4424#### Example Output
4425
4426~~~~
4427metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4428font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4429~~~~
4430
4431</fiddle-embed></div>
4432
4433---
4434
Cary Clark493df1f2017-08-25 13:14:33 -04004435<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004436## textToGlyphs
4437
4438<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4439int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4440</pre>
4441
Cary Clark8cc16c72017-08-25 11:51:49 -04004442Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4443Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4444<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>.
4445<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004446
Cary Clark8cc16c72017-08-25 11:51:49 -04004447Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character encoding or valid
Cary Clark12799e12017-07-28 15:18:29 -04004448glyph indices.
4449
Cary Clark8cc16c72017-08-25 11:51:49 -04004450If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4451If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004452
Cary Clark8cc16c72017-08-25 11:51:49 -04004453If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
4454<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid <a href="undocumented#UTF_8">UTF-8</a> sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004455
4456### Parameters
4457
Cary Clark8cc16c72017-08-25 11:51:49 -04004458<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004459character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004460 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004461length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004462 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004463storage for glyph indices; may be nullptr</td>
4464 </tr>
4465</table>
4466
4467### Return Value
4468
Cary Clark8cc16c72017-08-25 11:51:49 -04004469number 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 -04004470
4471### Example
4472
4473<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4474
4475---
4476
Cary Clark493df1f2017-08-25 13:14:33 -04004477<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004478## countText
4479
4480<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4481int countText(const void* text, size_t byteLength) const
4482</pre>
4483
Cary Clarkce101242017-09-01 15:51:02 -04004484Returns the number of <a href="#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4485Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004486Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004487
4488### Parameters
4489
Cary Clark8cc16c72017-08-25 11:51:49 -04004490<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004491character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004492 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004493length of character storage in bytes</td>
4494 </tr>
4495</table>
4496
4497### Return Value
4498
Cary Clarkce101242017-09-01 15:51:02 -04004499number 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 -04004500
4501### Example
4502
4503<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4504
4505#### Example Output
4506
4507~~~~
4508count = 5
4509~~~~
4510
4511</fiddle-embed></div>
4512
4513---
4514
Cary Clark493df1f2017-08-25 13:14:33 -04004515<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004516## containsText
4517
4518<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4519bool containsText(const void* text, size_t byteLength) const
4520</pre>
4521
Cary Clark8cc16c72017-08-25 11:51:49 -04004522Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
4523Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004524<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004525
Cary Clark8cc16c72017-08-25 11:51:49 -04004526If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4527returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4528does 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 -04004529
Cary Clarkce101242017-09-01 15:51:02 -04004530Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004531
4532### Parameters
4533
Cary Clark8cc16c72017-08-25 11:51:49 -04004534<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004535array of characters or <a href="#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004536 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4537number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004538 </tr>
4539</table>
4540
4541### Return Value
4542
Cary Clark8cc16c72017-08-25 11:51:49 -04004543true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004544
4545### Example
4546
Cary Clark8cc16c72017-08-25 11:51:49 -04004547<div><fiddle-embed name="9202369019552f09cd4bec7f3046fee4"><div><a href="#SkPaint_containsText">containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark4c06f5e2017-08-04 12:48:24 -04004548corresponding to the <a href="undocumented#Unicode">Unicode</a> surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004549
4550#### Example Output
4551
4552~~~~
45530x00b0 == has char
45540xd800 != has char
4555~~~~
4556
4557</fiddle-embed></div>
4558
4559### Example
4560
Cary Clark8cc16c72017-08-25 11:51:49 -04004561<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 -04004562that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004563
4564#### Example Output
4565
4566~~~~
45670x01ff == has glyph
45680x0000 != has glyph
45690xffff == has glyph
4570~~~~
4571
4572</fiddle-embed></div>
4573
4574### See Also
4575
Cary Clark8cc16c72017-08-25 11:51:49 -04004576<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004577
4578---
4579
Cary Clark493df1f2017-08-25 13:14:33 -04004580<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004581## glyphsToUnichars
4582
4583<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4584void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4585</pre>
4586
Cary Clark8cc16c72017-08-25 11:51:49 -04004587Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004588<a href="undocumented#Glyph">Glyph</a> values without direct <a href="undocumented#Unicode">Unicode</a> equivalents are mapped to zero.
4589Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004590by <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 -04004591
Cary Clark8cc16c72017-08-25 11:51:49 -04004592Only supported on platforms that use <a href="undocumented#FreeType">FreeType</a> as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004593
4594### Parameters
4595
Cary Clark8cc16c72017-08-25 11:51:49 -04004596<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004597array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004598 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004599length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004600 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004601storage for character codes, one per glyph</td>
4602 </tr>
4603</table>
4604
4605### Example
4606
Cary Clark8cc16c72017-08-25 11:51:49 -04004607<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert <a href="undocumented#UTF_8">UTF-8</a> <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 <a href="undocumented#Unichar">Unichar</a> code points.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004608
4609---
4610
4611# <a name="Measure_Text"></a> Measure Text
4612
Cary Clark493df1f2017-08-25 13:14:33 -04004613<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004614## measureText
4615
4616<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4617SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4618</pre>
4619
Cary Clark8cc16c72017-08-25 11:51:49 -04004620Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4621and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4622The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4623Uses <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,
4624and <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
4625<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4626Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4627The 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 -04004628
4629### Parameters
4630
Cary Clark8cc16c72017-08-25 11:51:49 -04004631<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004632character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004633 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4634number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4635 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004636returns bounding box relative to (0, 0) if not nullptr</td>
4637 </tr>
4638</table>
4639
4640### Return Value
4641
4642advance width or height
4643
4644### Example
4645
4646<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4647
4648---
4649
4650<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4651SkScalar measureText(const void* text, size_t length) const
4652</pre>
4653
Cary Clark8cc16c72017-08-25 11:51:49 -04004654Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4655and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4656The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4657Uses <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,
4658and <a href="#Text_Size">Text Size</a> to scale the metrics.
4659Does 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 -04004660
4661### Parameters
4662
Cary Clark8cc16c72017-08-25 11:51:49 -04004663<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004664character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004665 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4666number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004667 </tr>
4668</table>
4669
4670### Return Value
4671
4672advance width or height
4673
4674### Example
4675
4676<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4677
4678#### Example Output
4679
4680~~~~
4681default width = 5
4682double width = 10
4683~~~~
4684
4685</fiddle-embed></div>
4686
4687---
4688
Cary Clark493df1f2017-08-25 13:14:33 -04004689<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004690## breakText
4691
4692<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4693size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004694 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004695</pre>
4696
Cary Clark8cc16c72017-08-25 11:51:49 -04004697Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4698If <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
4699equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4700If <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
4701equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4702Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4703Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4704Uses <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,
4705and <a href="#Text_Size">Text Size</a> to scale the metrics.
4706Does 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 -04004707
4708### Parameters
4709
Cary Clark8cc16c72017-08-25 11:51:49 -04004710<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004711character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004712 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4713number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4714 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4715advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4716 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4717returns 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 -04004718 </tr>
4719</table>
4720
4721### Return Value
4722
Cary Clark8cc16c72017-08-25 11:51:49 -04004723bytes 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 -04004724
4725### Example
4726
Cary Clark4c06f5e2017-08-04 12:48:24 -04004727<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 -04004728<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 -04004729
4730---
4731
Cary Clark493df1f2017-08-25 13:14:33 -04004732<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004733## getTextWidths
4734
4735<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4736int getTextWidths(const void* text, size_t byteLength, SkScalar widths[],
Cary Clark73fa9722017-08-29 17:36:51 -04004737 SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004738</pre>
4739
Cary Clark8cc16c72017-08-25 11:51:49 -04004740Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4741the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4742Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4743If <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.
4744if <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.
4745If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4746If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4747Uses <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,
4748and <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>.
4749Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4750Does 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 -04004751
4752### Parameters
4753
Cary Clark8cc16c72017-08-25 11:51:49 -04004754<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004755character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004756 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4757number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4758 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4759returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4760 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4761returns <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 -04004762 </tr>
4763</table>
4764
4765### Return Value
4766
Cary Clark8cc16c72017-08-25 11:51:49 -04004767glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004768
4769### Example
4770
Cary Clarkce101242017-09-01 15:51:02 -04004771<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 -04004772The 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 -04004773
4774---
4775
4776# <a name="Text_Path"></a> Text Path
Cary Clarkce101242017-09-01 15:51:02 -04004777<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 -04004778
Cary Clark493df1f2017-08-25 13:14:33 -04004779<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004780## getTextPath
4781
4782<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4783void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y,
4784 SkPath* path) const
4785</pre>
4786
Cary Clark8cc16c72017-08-25 11:51:49 -04004787Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4788Uses <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,
4789and <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.
4790All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4791Uses <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 -04004792
4793### Parameters
4794
Cary Clark8cc16c72017-08-25 11:51:49 -04004795<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004796character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004797 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4798number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4799 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
4800x-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
4801 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
4802y-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
4803 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004804geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004805 </tr>
4806</table>
4807
4808### Example
4809
Cary Clark4c06f5e2017-08-04 12:48:24 -04004810<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 -04004811the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4812
4813---
4814
Cary Clark493df1f2017-08-25 13:14:33 -04004815<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004816## getPosTextPath
4817
4818<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4819void getPosTextPath(const void* text, size_t length, const SkPoint pos[],
4820 SkPath* path) const
4821</pre>
4822
Cary Clark8cc16c72017-08-25 11:51:49 -04004823Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4824Uses <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,
4825and <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.
4826All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4827Uses <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>.
4828<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004829
4830### Parameters
4831
Cary Clark8cc16c72017-08-25 11:51:49 -04004832<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004833character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004834 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4835number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4836 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004837positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004838 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004839geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004840 </tr>
4841</table>
4842
4843### Example
4844
Cary Clarkce101242017-09-01 15:51:02 -04004845<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 -04004846
4847---
4848
4849# <a name="Text_Intercepts"></a> Text Intercepts
Cary Clarkce101242017-09-01 15:51:02 -04004850<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 -04004851of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clarkce101242017-09-01 15:51:02 -04004852underline that skips <a href="undocumented#Descenders">Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004853
Cary Clark493df1f2017-08-25 13:14:33 -04004854<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004855## getTextIntercepts
4856
4857<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4858int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4859 const SkScalar bounds[2], SkScalar* intervals) const
4860</pre>
4861
Cary Clark8cc16c72017-08-25 11:51:49 -04004862Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4863<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 -04004864The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark12799e12017-07-28 15:18:29 -04004865the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004866Uses <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,
4867and <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.
4868Uses <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>.
4869Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4870<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004871
4872### Parameters
4873
Cary Clark8cc16c72017-08-25 11:51:49 -04004874<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004875character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004876 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4877number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4878 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
4879x-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4880 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
4881y-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4882 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004883lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004884 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004885returned intersections; may be nullptr</td>
4886 </tr>
4887</table>
4888
4889### Return Value
4890
4891number of intersections; may be zero
4892
4893### Example
4894
Cary Clarkce101242017-09-01 15:51:02 -04004895<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 -04004896
4897---
4898
Cary Clark493df1f2017-08-25 13:14:33 -04004899<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004900## getPosTextIntercepts
4901
4902<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4903int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4904 const SkScalar bounds[2], SkScalar* intervals) const
4905</pre>
4906
Cary Clark8cc16c72017-08-25 11:51:49 -04004907Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4908<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 -04004909The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark12799e12017-07-28 15:18:29 -04004910the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004911Uses <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,
4912and <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.
4913Uses <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>.
4914Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4915<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004916
4917### Parameters
4918
Cary Clark8cc16c72017-08-25 11:51:49 -04004919<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004920character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004921 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4922number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4923 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004924positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004925 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004926lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004927 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004928returned intersections; may be nullptr</td>
4929 </tr>
4930</table>
4931
4932### Return Value
4933
Cary Clarka523d2d2017-08-30 08:58:10 -04004934number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004935
4936### Example
4937
Cary Clarkce101242017-09-01 15:51:02 -04004938<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 -04004939
4940---
4941
Cary Clark493df1f2017-08-25 13:14:33 -04004942<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004943## getPosTextHIntercepts
4944
4945<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4946int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[],
4947 SkScalar constY, const SkScalar bounds[2],
4948 SkScalar* intervals) const
4949</pre>
4950
Cary Clark8cc16c72017-08-25 11:51:49 -04004951Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4952<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 -04004953The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark12799e12017-07-28 15:18:29 -04004954the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004955Uses <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,
4956and <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.
4957Uses <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>.
4958Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4959<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004960
4961### Parameters
4962
Cary Clark8cc16c72017-08-25 11:51:49 -04004963<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004964character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004965 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4966number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4967 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004968positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004969 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004970position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004971 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004972lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004973 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004974returned intersections; may be nullptr</td>
4975 </tr>
4976</table>
4977
4978### Return Value
4979
4980number of intersections; may be zero
4981
4982### Example
4983
Cary Clark4c06f5e2017-08-04 12:48:24 -04004984<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 -04004985
4986---
4987
Cary Clark493df1f2017-08-25 13:14:33 -04004988<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004989## getTextBlobIntercepts
4990
4991<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4992int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2],
4993 SkScalar* intervals) const
4994</pre>
4995
Cary Clark8cc16c72017-08-25 11:51:49 -04004996Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4997<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clarkce101242017-09-01 15:51:02 -04004998The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark12799e12017-07-28 15:18:29 -04004999the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04005000Uses <a href="#Text_Encoding">Text Encoding</a> to decode text, <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
5001and <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 -04005002Uses run array and <a href="#Text_Align">Text Align</a> to position <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04005003Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
5004<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005005
5006### Parameters
5007
Cary Clark8cc16c72017-08-25 11:51:49 -04005008<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005009<a href="#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005010 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005011lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005012 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005013returned intersections; may be nullptr</td>
5014 </tr>
5015</table>
5016
5017### Return Value
5018
5019number of intersections; may be zero
5020
5021### Example
5022
5023<div><fiddle-embed name="4961b05f4f26cf270ab4948a57876341"></fiddle-embed></div>
5024
5025---
5026
Cary Clark493df1f2017-08-25 13:14:33 -04005027<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005028## nothingToDraw
5029
5030<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5031bool nothingToDraw() const
5032</pre>
5033
Cary Clark8cc16c72017-08-25 11:51:49 -04005034Returns true if <a href="#Paint">Paint</a> prevents all drawing;
5035otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005036
Cary Clarkce101242017-09-01 15:51:02 -04005037Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="#Alpha">Color Alpha</a> computes a
5038new <a href="#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005039
5040### Return Value
5041
Cary Clark8cc16c72017-08-25 11:51:49 -04005042true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005043
5044### Example
5045
5046<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
5047
5048#### Example Output
5049
5050~~~~
5051initial nothing to draw: false
5052blend dst nothing to draw: true
5053blend src over nothing to draw: false
5054alpha 0 nothing to draw: true
5055~~~~
5056
5057</fiddle-embed></div>
5058
5059---
5060
5061# <a name="Fast_Bounds"></a> Fast Bounds
Cary Clark8cc16c72017-08-25 11:51:49 -04005062<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5063<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005064
Cary Clark493df1f2017-08-25 13:14:33 -04005065<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005066## canComputeFastBounds
5067
5068<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5069bool canComputeFastBounds() const
5070</pre>
5071
Cary Clark8cc16c72017-08-25 11:51:49 -04005072Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5073to 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 -04005074always returns false.
5075
5076### Return Value
5077
Cary Clark8cc16c72017-08-25 11:51:49 -04005078true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005079
5080---
5081
Cary Clark493df1f2017-08-25 13:14:33 -04005082<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005083## computeFastBounds
5084
5085<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5086const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5087</pre>
5088
Cary Clark8cc16c72017-08-25 11:51:49 -04005089Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005090raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005091effects 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 -04005092parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005093for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005094
Cary Clarkce101242017-09-01 15:51:02 -04005095The returned <a href="undocumented#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 -04005096should 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 -04005097use 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
5098<a href="undocumented#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005099
5100### Parameters
5101
Cary Clark8cc16c72017-08-25 11:51:49 -04005102<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5103geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5104 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005105computed bounds of geometry; may not be nullptr</td>
5106 </tr>
5107</table>
5108
5109### Return Value
5110
5111fast computed bounds
5112
5113---
5114
Cary Clark493df1f2017-08-25 13:14:33 -04005115<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005116## computeFastStrokeBounds
5117
5118<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5119const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5120</pre>
5121
5122### Parameters
5123
Cary Clark8cc16c72017-08-25 11:51:49 -04005124<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5125geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5126 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005127computed bounds of geometry</td>
5128 </tr>
5129</table>
5130
5131### Return Value
5132
5133fast computed bounds
5134
5135---
5136
Cary Clark493df1f2017-08-25 13:14:33 -04005137<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005138## doComputeFastBounds
5139
5140<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5141const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage,
5142 Style style) const
5143</pre>
5144
Cary Clarkce101242017-09-01 15:51:02 -04005145Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5146account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5147altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005148
5149### Parameters
5150
Cary Clark8cc16c72017-08-25 11:51:49 -04005151<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5152geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5153 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005154computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005155 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5156overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005157 </tr>
5158</table>
5159
5160### Return Value
5161
5162fast computed bounds
5163
5164---
5165
Cary Clark493df1f2017-08-25 13:14:33 -04005166<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005167## toString
5168
5169<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5170void toString(SkString* str) const;
5171</pre>
5172
Cary Clarkce101242017-09-01 15:51:02 -04005173Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5174internal debugging tools. The interface and implementation may be
5175suppressed by defining <a href="undocumented#SK_IGNORE_TO_STRING">SK IGNORE TO STRING</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005176
5177### Parameters
5178
Cary Clark8cc16c72017-08-25 11:51:49 -04005179<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005180storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005181 </tr>
5182</table>
5183
5184### Example
5185
5186<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5187
5188#### Example Output
5189
5190~~~~
5191text size = 12
5192~~~~
5193
5194</fiddle-embed></div>
5195
5196---
5197