blob: 0442705bc100072e0f998e55cf27221771879837 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
4# <a name="Paint"></a> Paint
Cary Clarke4aa3712017-09-15 02:56:12 -04005
6# <a name="SkPaint"></a> Class SkPaint
Cary Clark8cc16c72017-08-25 11:51:49 -04007<a href="#Paint">Paint</a> controls options applied when drawing and measuring. <a href="#Paint">Paint</a> collects all
8options outside of the <a href="#Clip">Canvas Clip</a> and <a href="#Matrix">Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -04009
10Various options apply to text, strokes and fills, and images.
11
12Some options may not be implemented on all platforms; in these cases, setting
Cary Clark4c06f5e2017-08-04 12:48:24 -040013the option has no effect. Some options are conveniences that duplicate <a href="SkCanvas_Reference#Canvas">Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -040014functionality; for instance, text size is identical to matrix scale.
15
Cary Clark8cc16c72017-08-25 11:51:49 -040016<a href="#Paint">Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
17pipeline and multiple pipeline stages may be affected by a single <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040018
Cary Clark8cc16c72017-08-25 11:51:49 -040019<a href="#Paint">Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040020algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark8cc16c72017-08-25 11:51:49 -040021<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 -040022
Cary Clark8cc16c72017-08-25 11:51:49 -040023The 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 -040024to affect it. The implementation is free to defer computations associated with the
Cary Clark8cc16c72017-08-25 11:51:49 -040025<a href="#Paint">Paint</a>, or ignore them altogether. For instance, some <a href="undocumented#GPU">GPU</a> implementations draw all
Cary Clarka560c472017-11-27 10:44:06 -050026<a href="SkPath_Reference#Path">Path</a> geometries with Anti-aliasing, regardless of how <a href="#SkPaint_kAntiAlias_Flag">SkPaint::kAntiAlias Flag</a>
Cary Clark8cc16c72017-08-25 11:51:49 -040027is set in <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040028
Cary Clark8cc16c72017-08-25 11:51:49 -040029<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 -040030Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark8cc16c72017-08-25 11:51:49 -040031<a href="undocumented#Shader">Shader</a> attached to <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040032
Cary Clark12799e12017-07-28 15:18:29 -040033# <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 Clarka560c472017-11-27 10:44:06 -050044| Anti-alias | 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. |
Cary Clarkbc5697d2017-10-04 14:31:33 -040091| <a href="#SkPaint_TextEncoding">TextEncoding</a> | Character or glyph encoded 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 Clarka560c472017-11-27 10:44:06 -0500112| <a href="#SkPaint_copy_operator">operator=(const SkPaint& paint)</a> | Makes a shallow copy. |
113| <a href="#SkPaint_move_operator">operator=(SkPaint&& paint)</a> | Moves paint without copying it. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400114| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | Compares paints for equality. |
Cary Clarka560c472017-11-27 10:44:06 -0500115| <a href="#SkPaint_notequal_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. |
Cary Clarkbc5697d2017-10-04 14:31:33 -0400157| <a href="#SkPaint_getTextEncoding">getTextEncoding</a> | Returns character or glyph encoded size. b |
Cary Clark8cc16c72017-08-25 11:51:49 -0400158| <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 Clarka560c472017-11-27 10:44:06 -0500166| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | Returns true if Anti-alias 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. |
Cary Clarka560c472017-11-27 10:44:06 -0500188| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | Sets or clears Anti-alias. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400189| <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. |
Cary Clarkbc5697d2017-10-04 14:31:33 -0400215| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | Sets character or glyph encoded size. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400216| <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
Cary Clarka560c472017-11-27 10:44:06 -0500230<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400231SkPaint()
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 Clarka560c472017-11-27 10:44:06 -0500238| Anti-alias | 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
Cary Clarka560c472017-11-27 10:44:06 -0500289<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400290SkPaint(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
Cary Clarka560c472017-11-27 10:44:06 -0500331<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400332SkPaint(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
Cary Clarka560c472017-11-27 10:44:06 -0500368<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400369void reset()
370</pre>
371
Cary Clarkbc5697d2017-10-04 14:31:33 -0400372Sets all <a href="#Paint">Paint</a> contents to their initial values. This is equivalent to replacing
373<a href="#Paint">Paint</a> 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
Cary Clarka560c472017-11-27 10:44:06 -0500394<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400395~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 Clarka560c472017-11-27 10:44:06 -0500406<a name="SkPaint_copy_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400407## operator=
408
Cary Clarka560c472017-11-27 10:44:06 -0500409<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400410SkPaint& 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 Clarka560c472017-11-27 10:44:06 -0500415between the original <a href="#SkPaint_copy_operator_paint">paint</a> and the copy. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clark12799e12017-07-28 15:18:29 -0400416prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clarka560c472017-11-27 10:44:06 -0500417resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_operator_paint">paint</a>
418are increased by one. <a href="#SkPaint_copy_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400419
420### Parameters
421
Cary Clarka560c472017-11-27 10:44:06 -0500422<table> <tr> <td><a name="SkPaint_copy_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 Clarka560c472017-11-27 10:44:06 -0500429content of <a href="#SkPaint_copy_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 Clarka560c472017-11-27 10:44:06 -0500446<a name="SkPaint_move_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400447## operator=
448
Cary Clarka560c472017-11-27 10:44:06 -0500449<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400450SkPaint& operator=(SkPaint&& paint)
451</pre>
452
Cary Clarka560c472017-11-27 10:44:06 -0500453Moves the <a href="#SkPaint_move_operator_paint">paint</a> to avoid increasing the reference counts
454of objects referenced by the <a href="#SkPaint_move_operator_paint">paint</a> parameter. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -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 Clarka560c472017-11-27 10:44:06 -0500458After the call, <a href="#SkPaint_move_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400459
460### Parameters
461
Cary Clarka560c472017-11-27 10:44:06 -0500462<table> <tr> <td><a name="SkPaint_move_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 Clarka560c472017-11-27 10:44:06 -0500469content of <a href="#SkPaint_move_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
Cary Clarka560c472017-11-27 10:44:06 -0500488<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400489bool 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 Clarka560c472017-11-27 10:44:06 -0500524<a name="SkPaint_notequal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400525## operator!=
526
Cary Clarka560c472017-11-27 10:44:06 -0500527<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400528bool operator!=(const SkPaint& a, const SkPaint& b)
529</pre>
530
Cary Clarka560c472017-11-27 10:44:06 -0500531Compares <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a>, and returns true if <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a> are not equivalent. May return true
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 Clarka560c472017-11-27 10:44:06 -0500537<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400538<a href="#Paint">Paint</a> to compare</td>
Cary Clarka560c472017-11-27 10:44:06 -0500539 </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400540<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
Cary Clarka560c472017-11-27 10:44:06 -0500566<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400567uint32_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
Cary Clarka560c472017-11-27 10:44:06 -0500602<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400603void 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
Cary Clarka560c472017-11-27 10:44:06 -0500633<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400634void 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
Cary Clark2ade9972017-11-02 17:49:34 -0400650### See Also
651
652<a href="undocumented#SkReadBuffer">SkReadBuffer</a>
653
Cary Clark12799e12017-07-28 15:18:29 -0400654---
655
656# <a name="Hinting"></a> Hinting
657
Cary Clark8cc16c72017-08-25 11:51:49 -0400658## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400659
Cary Clarka560c472017-11-27 10:44:06 -0500660<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400661enum <a href="#Hinting">Hinting</a> {
662<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
663<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
664<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
665<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400666};</pre>
667
Cary Clark8cc16c72017-08-25 11:51:49 -0400668<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
669look 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 -0400670muted effect or no effect at all depending on the platform.
671
Cary Clark4c06f5e2017-08-04 12:48:24 -0400672The four levels roughly control corresponding features on platforms that use <a href="undocumented#FreeType">FreeType</a>
Cary Clark8cc16c72017-08-25 11:51:49 -0400673as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400674
675### Constants
676
677<table>
678 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400679 <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 -0400680With <a href="undocumented#FreeType">FreeType</a>, this is equivalent to the <a href="undocumented#FT_LOAD_NO_HINTING">FT LOAD NO HINTING</a>
681bit-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 -0400682outline being loaded should not be fitted to the pixel grid but simply scaled
683to 26.6 fractional pixels.</td>
684 </tr>
685 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400686 <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 -0400687With <a href="undocumented#FreeType">FreeType</a>, this is equivalent in spirit to the
688<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 -0400689lighter hinting algorithm for non-monochrome modes.
Cary Clarkce101242017-09-01 15:51:02 -0400690Generated <a href="#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400691 </tr>
692 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400693 <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 -0400694With <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 -0400695choosing the default hinting algorithm, which is optimized for standard
696gray-level rendering.</td>
697 </tr>
698 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400699 <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
700<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 -0400701<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
702horizontally decimated <a href="undocumented#LCD">LCD</a> displays; <a href="undocumented#FT_LOAD_TARGET_LCD_V">FT LOAD TARGET LCD V</a> is a
703variant 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 -0400704 </tr>
705</table>
706
Cary Clark8cc16c72017-08-25 11:51:49 -0400707On <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 -0400708
Cary Clark8cc16c72017-08-25 11:51:49 -0400709<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400710Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400711
712
713
Cary Clark493df1f2017-08-25 13:14:33 -0400714<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400715## getHinting
716
Cary Clarka560c472017-11-27 10:44:06 -0500717<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400718Hinting getHinting() const
719</pre>
720
721Returns level of glyph outline adjustment.
722
723### Return Value
724
Cary Clark8cc16c72017-08-25 11:51:49 -0400725one 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 -0400726
727### Example
728
729<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
730
731#### Example Output
732
733~~~~
734SkPaint::kNormal_Hinting == paint.getHinting()
735~~~~
736
737</fiddle-embed></div>
738
739---
740
Cary Clark493df1f2017-08-25 13:14:33 -0400741<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400742## setHinting
743
Cary Clarka560c472017-11-27 10:44:06 -0500744<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400745void setHinting(Hinting hintingLevel)
746</pre>
747
748Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400749Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400750
Cary Clark8cc16c72017-08-25 11:51:49 -0400751| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400752| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400753| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400754| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
755| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
756| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400757
758### Parameters
759
Cary Clark8cc16c72017-08-25 11:51:49 -0400760<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
761one 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 -0400762 </tr>
763</table>
764
765### Example
766
767<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
768
769#### Example Output
770
771~~~~
772paint1 == paint2
773~~~~
774
775</fiddle-embed></div>
776
777---
778
779# <a name="Flags"></a> Flags
780
Cary Clark8cc16c72017-08-25 11:51:49 -0400781## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400782
Cary Clarka560c472017-11-27 10:44:06 -0500783<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400784enum <a href="#Flags">Flags</a> {
785<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
786<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
787<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
788<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
789<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
790<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
791<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
792<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
793<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
794<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
795<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400796
Cary Clark8cc16c72017-08-25 11:51:49 -0400797<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400798};
799</pre>
800
Cary Clark8cc16c72017-08-25 11:51:49 -0400801The bit values stored in <a href="#Flags">Flags</a>.
802The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400803with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400804All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400805multiple settings at once.
806
807### Constants
808
809<table>
810 <tr>
Cary Clarka560c472017-11-27 10:44:06 -0500811 <td><a name="SkPaint_kAntiAlias_Flag"> <code><strong>SkPaint::kAntiAlias_Flag </strong></code> </a></td><td>0x0001 </td><td>mask for setting Anti-alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400812 </tr>
813 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400814 <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 -0400815 </tr>
816 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400817 <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 -0400818 </tr>
819 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400820 <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 -0400821 </tr>
822 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400823 <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 -0400824 </tr>
825 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400826 <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 -0400827 </tr>
828 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400829 <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 -0400830 </tr>
831 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400832 <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 -0400833 </tr>
834 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400835 <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 -0400836 </tr>
837 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400838 <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 -0400839 </tr>
840 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400841 <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 -0400842 </tr>
843 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400844 <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 -0400845 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400846<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400847
848</table>
849
Cary Clark8cc16c72017-08-25 11:51:49 -0400850## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400851
Cary Clarka560c472017-11-27 10:44:06 -0500852<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400853enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
854<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
855<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400856};</pre>
857
858### Constants
859
860<table>
861 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400862 <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 -0400863 </tr>
864 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400865 <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 -0400866 </tr>
867</table>
868
Cary Clark2ade9972017-11-02 17:49:34 -0400869### See Also
870
871<a href="#Flags">Flags</a> <a href="#SkPaint_getFlags">getFlags</a>
872
Cary Clark12799e12017-07-28 15:18:29 -0400873
874
Cary Clark493df1f2017-08-25 13:14:33 -0400875<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400876## getFlags
877
Cary Clarka560c472017-11-27 10:44:06 -0500878<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400879uint32_t getFlags() const
880</pre>
881
Cary Clark8cc16c72017-08-25 11:51:49 -0400882Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
883bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400884
885### Return Value
886
Cary Clark8cc16c72017-08-25 11:51:49 -0400887zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400888
889### Example
890
891<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
892
893#### Example Output
894
895~~~~
896(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
897~~~~
898
899</fiddle-embed></div>
900
901---
902
Cary Clark493df1f2017-08-25 13:14:33 -0400903<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400904## setFlags
905
Cary Clarka560c472017-11-27 10:44:06 -0500906<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400907void setFlags(uint32_t flags)
908</pre>
909
Cary Clark8cc16c72017-08-25 11:51:49 -0400910Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
911All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400912
913### Parameters
914
Cary Clark8cc16c72017-08-25 11:51:49 -0400915<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
916union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400917 </tr>
918</table>
919
920### Example
921
922<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
923
924#### Example Output
925
926~~~~
927paint.isAntiAlias()
928paint.isDither()
929~~~~
930
931</fiddle-embed></div>
932
933---
934
935# <a name="Anti-alias"></a> Anti-alias
Cary Clarka560c472017-11-27 10:44:06 -0500936Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400937If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
938If <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 -0400939
Cary Clarkce101242017-09-01 15:51:02 -0400940The rule for <a href="#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400941passing through the pixel center may, but is not required to, draw the pixel.
942
Cary Clarkce101242017-09-01 15:51:02 -0400943<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 -0400944active <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 -0400945
Cary Clarka560c472017-11-27 10:44:06 -0500946A platform may only support Anti-aliased drawing. Some <a href="undocumented#GPU">GPU</a>-backed platforms use
947<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400948<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400949
Cary Clarka560c472017-11-27 10:44:06 -0500950The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400951
Cary Clarka560c472017-11-27 10:44:06 -0500952Anti-alias is disabled by default.
953Anti-alias can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -0400954at compile time.
955
956### Example
957
958<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
959A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400960The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clarkce101242017-09-01 15:51:02 -0400961<a href="#Alias">Aliasing</a> easier to see.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400962
Cary Clark493df1f2017-08-25 13:14:33 -0400963<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400964## isAntiAlias
965
Cary Clarka560c472017-11-27 10:44:06 -0500966<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400967bool isAntiAlias() const
968</pre>
969
Cary Clark4c06f5e2017-08-04 12:48:24 -0400970If 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 -0400971
Cary Clark8cc16c72017-08-25 11:51:49 -0400972Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400973
974### Return Value
975
Cary Clark8cc16c72017-08-25 11:51:49 -0400976<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400977
978### Example
979
980<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
981
982#### Example Output
983
984~~~~
985paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
986paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
987~~~~
988
989</fiddle-embed></div>
990
991---
992
Cary Clark493df1f2017-08-25 13:14:33 -0400993<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400994## setAntiAlias
995
Cary Clarka560c472017-11-27 10:44:06 -0500996<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400997void setAntiAlias(bool aa)
998</pre>
999
Cary Clark4c06f5e2017-08-04 12:48:24 -04001000Requests, 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 -04001001partial transparency.
1002
Cary Clark8cc16c72017-08-25 11:51:49 -04001003Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
1004Clears <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 -04001005
1006### Parameters
1007
Cary Clark8cc16c72017-08-25 11:51:49 -04001008<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
1009setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001010 </tr>
1011</table>
1012
1013### Example
1014
1015<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1016
1017#### Example Output
1018
1019~~~~
1020paint1 == paint2
1021~~~~
1022
1023</fiddle-embed></div>
1024
1025---
1026
1027# <a name="Dither"></a> Dither
Cary Clarkce101242017-09-01 15:51:02 -04001028<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001029This can help to smooth color transitions and reducing banding in gradients.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001030Dithering lessens visible banding from <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
1031and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> gradients,
Cary Clarka560c472017-11-27 10:44:06 -05001032and improves rendering into a <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001033
1034Dithering is always enabled for linear gradients drawing into
Cary Clarka560c472017-11-27 10:44:06 -05001035<a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
1036<a href="#Dither">Dither</a> cannot be enabled for <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and
1037<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001038
Cary Clark8cc16c72017-08-25 11:51:49 -04001039<a href="#Dither">Dither</a> is disabled by default.
1040<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 -04001041at compile time.
1042
Cary Clark8cc16c72017-08-25 11:51:49 -04001043Some 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 -04001044
1045### Example
1046
1047<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1048alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1049
1050### Example
1051
1052<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001053Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001054dither, making it easier to see.</div></fiddle-embed></div>
1055
Cary Clark493df1f2017-08-25 13:14:33 -04001056<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001057## isDither
1058
Cary Clarka560c472017-11-27 10:44:06 -05001059<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001060bool isDither() const
1061</pre>
1062
1063If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001064Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001065
1066### Return Value
1067
Cary Clark8cc16c72017-08-25 11:51:49 -04001068<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001069
1070### Example
1071
1072<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1073
1074#### Example Output
1075
1076~~~~
1077paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1078paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1079~~~~
1080
1081</fiddle-embed></div>
1082
1083---
1084
Cary Clark493df1f2017-08-25 13:14:33 -04001085<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001086## setDither
1087
Cary Clarka560c472017-11-27 10:44:06 -05001088<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001089void setDither(bool dither)
1090</pre>
1091
1092Requests, but does not require, to distribute color error.
1093
Cary Clark8cc16c72017-08-25 11:51:49 -04001094Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1095Clears <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 -04001096
1097### Parameters
1098
Cary Clark8cc16c72017-08-25 11:51:49 -04001099<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1100setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001101 </tr>
1102</table>
1103
1104### Example
1105
1106<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1107
1108#### Example Output
1109
1110~~~~
1111paint1 == paint2
1112~~~~
1113
1114</fiddle-embed></div>
1115
1116### See Also
1117
Cary Clark4c06f5e2017-08-04 12:48:24 -04001118<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001119
1120---
1121
1122### See Also
1123
Cary Clarka560c472017-11-27 10:44:06 -05001124Gradient <a href="#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001125
1126# <a name="Device_Text"></a> Device Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001127<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 -04001128
Cary Clark8cc16c72017-08-25 11:51:49 -04001129When 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 -04001130create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001131on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001132<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 -04001133the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001134
Cary Clark8cc16c72017-08-25 11:51:49 -04001135<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 -04001136As the opaqueness
1137of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1138
1139Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001140<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 -04001141<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 -04001142<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 -04001143
1144### Example
1145
Cary Clark4c06f5e2017-08-04 12:48:24 -04001146<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 -04001147When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="#Glyph">Glyphs</a> are identical, but not evenly spaced.
1148When <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 -04001149
1150## <a name="Linear_Text"></a> Linear Text
1151
Cary Clark4c06f5e2017-08-04 12:48:24 -04001152<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 -04001153If <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 -04001154If <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 -04001155
Cary Clark493df1f2017-08-25 13:14:33 -04001156<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001157## isLinearText
1158
Cary Clarka560c472017-11-27 10:44:06 -05001159<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001160bool isLinearText() const
1161</pre>
1162
Cary Clark4c06f5e2017-08-04 12:48:24 -04001163If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001164
Cary Clark8cc16c72017-08-25 11:51:49 -04001165Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001166
1167### Return Value
1168
Cary Clark8cc16c72017-08-25 11:51:49 -04001169<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001170
1171### Example
1172
1173<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1174
1175### See Also
1176
Cary Clark8cc16c72017-08-25 11:51:49 -04001177<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001178
1179---
1180
Cary Clark493df1f2017-08-25 13:14:33 -04001181<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001182## setLinearText
1183
Cary Clarka560c472017-11-27 10:44:06 -05001184<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001185void setLinearText(bool linearText)
1186</pre>
1187
Cary Clark4c06f5e2017-08-04 12:48:24 -04001188If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001189By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001190
Cary Clark8cc16c72017-08-25 11:51:49 -04001191Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1192Clears <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 -04001193
1194### Parameters
1195
Cary Clark8cc16c72017-08-25 11:51:49 -04001196<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1197setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001198 </tr>
1199</table>
1200
1201### Example
1202
1203<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1204
1205### See Also
1206
Cary Clark8cc16c72017-08-25 11:51:49 -04001207<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001208
1209---
1210
1211## <a name="Subpixel_Text"></a> Subpixel Text
1212
Cary Clark8cc16c72017-08-25 11:51:49 -04001213<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 -04001214As the opaqueness
1215of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1216
Cary Clark493df1f2017-08-25 13:14:33 -04001217<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001218## isSubpixelText
1219
Cary Clarka560c472017-11-27 10:44:06 -05001220<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001221bool isSubpixelText() const
1222</pre>
1223
Cary Clarkce101242017-09-01 15:51:02 -04001224If true, <a href="#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001225
Cary Clark8cc16c72017-08-25 11:51:49 -04001226Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001227
1228### Return Value
1229
Cary Clark8cc16c72017-08-25 11:51:49 -04001230<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001231
1232### Example
1233
1234<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1235
1236#### Example Output
1237
1238~~~~
1239paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1240paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1241~~~~
1242
1243</fiddle-embed></div>
1244
1245---
1246
Cary Clark493df1f2017-08-25 13:14:33 -04001247<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001248## setSubpixelText
1249
Cary Clarka560c472017-11-27 10:44:06 -05001250<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001251void setSubpixelText(bool subpixelText)
1252</pre>
1253
Cary Clarkce101242017-09-01 15:51:02 -04001254Requests, but does not require, that <a href="#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001255
Cary Clark8cc16c72017-08-25 11:51:49 -04001256Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1257Clears <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 -04001258
1259### Parameters
1260
Cary Clark8cc16c72017-08-25 11:51:49 -04001261<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1262setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001263 </tr>
1264</table>
1265
1266### Example
1267
1268<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1269
1270#### Example Output
1271
1272~~~~
1273paint1 == paint2
1274~~~~
1275
1276</fiddle-embed></div>
1277
1278---
1279
1280## <a name="LCD_Text"></a> LCD Text
1281
Cary Clark8cc16c72017-08-25 11:51:49 -04001282When 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 -04001283create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001284on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001285<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 -04001286the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001287
Cary Clark493df1f2017-08-25 13:14:33 -04001288<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001289## isLCDRenderText
1290
Cary Clarka560c472017-11-27 10:44:06 -05001291<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001292bool isLCDRenderText() const
1293</pre>
1294
Cary Clarkce101242017-09-01 15:51:02 -04001295If 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 -04001296
Cary Clark8cc16c72017-08-25 11:51:49 -04001297Returns 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 -04001298
1299### Return Value
1300
Cary Clark8cc16c72017-08-25 11:51:49 -04001301<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001302
1303### Example
1304
1305<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1306
1307#### Example Output
1308
1309~~~~
1310paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1311paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1312~~~~
1313
1314</fiddle-embed></div>
1315
1316---
1317
Cary Clark493df1f2017-08-25 13:14:33 -04001318<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001319## setLCDRenderText
1320
Cary Clarka560c472017-11-27 10:44:06 -05001321<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001322void setLCDRenderText(bool lcdText)
1323</pre>
1324
Cary Clarkce101242017-09-01 15:51:02 -04001325Requests, 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 -04001326
Cary Clark8cc16c72017-08-25 11:51:49 -04001327Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1328Clears <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 -04001329
1330### Parameters
1331
Cary Clark8cc16c72017-08-25 11:51:49 -04001332<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1333setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001334 </tr>
1335</table>
1336
1337### Example
1338
1339<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1340
1341#### Example Output
1342
1343~~~~
1344paint1 == paint2
1345~~~~
1346
1347</fiddle-embed></div>
1348
1349---
1350
1351# <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
Cary Clarkce101242017-09-01 15:51:02 -04001352<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 -04001353<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 -04001354in a font if the platform supports this option.
1355
Cary Clark8cc16c72017-08-25 11:51:49 -04001356<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
1357the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001358<a href="undocumented#Windows">Windows</a> may select the bitmap glyph but is not required to do so.
1359<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 -04001360
Cary Clark4c06f5e2017-08-04 12:48:24 -04001361<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1362<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 -04001363<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001364
1365### Example
1366
Cary Clarka560c472017-11-27 10:44:06 -05001367<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
1368void draw(SkCanvas* canvas) {<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
1369 includes an embedded bitmap Glyph at odd font sizes. This example works
1370 on platforms that use FreeType as their Font_Engine.
1371 Windows may, but is not required to, return a bitmap glyph if
1372 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1373 bitmap.allocN32Pixels(30, 15);
1374 bitmap.eraseColor(0);
1375 SkCanvas offscreen(bitmap);
1376 SkPaint paint;
1377 paint.setAntiAlias(true);
1378 paint.setTextSize(13);
1379 paint.setTypeface(MakeResourceAsTypeface("/fonts/hintgasp.ttf"));
1380 for (bool embedded : { false, true}) {
1381 paint.setEmbeddedBitmapText(embedded);
1382 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1383 }
1384 canvas->drawBitmap(bitmap, 0, 0);
1385 canvas->scale(10, 10);
1386 canvas->drawBitmap(bitmap, -2, 1);
1387}
1388</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001389
Cary Clark493df1f2017-08-25 13:14:33 -04001390<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001391## isEmbeddedBitmapText
1392
Cary Clarka560c472017-11-27 10:44:06 -05001393<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001394bool isEmbeddedBitmapText() const
1395</pre>
1396
Cary Clarkce101242017-09-01 15:51:02 -04001397If 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 -04001398
Cary Clark8cc16c72017-08-25 11:51:49 -04001399Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001400
1401### Return Value
1402
Cary Clark8cc16c72017-08-25 11:51:49 -04001403<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001404
1405### Example
1406
1407<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1408
1409#### Example Output
1410
1411~~~~
1412paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1413paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1414~~~~
1415
1416</fiddle-embed></div>
1417
1418---
1419
Cary Clark493df1f2017-08-25 13:14:33 -04001420<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001421## setEmbeddedBitmapText
1422
Cary Clarka560c472017-11-27 10:44:06 -05001423<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001424void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1425</pre>
1426
1427Requests, but does not require, to use bitmaps in fonts instead of outlines.
1428
Cary Clark8cc16c72017-08-25 11:51:49 -04001429Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1430Clears <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 -04001431
1432### Parameters
1433
Cary Clark8cc16c72017-08-25 11:51:49 -04001434<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1435setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001436 </tr>
1437</table>
1438
1439### Example
1440
1441<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1442
1443#### Example Output
1444
1445~~~~
1446paint1 == paint2
1447~~~~
1448
1449</fiddle-embed></div>
1450
1451---
1452
1453# <a name="Automatic_Hinting"></a> Automatic Hinting
Cary Clark8cc16c72017-08-25 11:51:49 -04001454If <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 -04001455instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001456<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
1457<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001458
Cary Clark8cc16c72017-08-25 11:51:49 -04001459<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 -04001460
Cary Clark493df1f2017-08-25 13:14:33 -04001461<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001462## isAutohinted
1463
Cary Clarka560c472017-11-27 10:44:06 -05001464<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001465bool isAutohinted() const
1466</pre>
1467
Cary Clark8cc16c72017-08-25 11:51:49 -04001468If 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 -04001469platform 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 -04001470<a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001471
Cary Clark8cc16c72017-08-25 11:51:49 -04001472Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001473
1474### Return Value
1475
Cary Clark8cc16c72017-08-25 11:51:49 -04001476<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001477
1478### Example
1479
1480<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1481
1482#### Example Output
1483
1484~~~~
1485paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1486paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1487~~~~
1488
1489</fiddle-embed></div>
1490
1491### See Also
1492
Cary Clark8cc16c72017-08-25 11:51:49 -04001493<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001494
1495---
1496
Cary Clark493df1f2017-08-25 13:14:33 -04001497<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001498## setAutohinted
1499
Cary Clarka560c472017-11-27 10:44:06 -05001500<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001501void setAutohinted(bool useAutohinter)
1502</pre>
1503
Cary Clark8cc16c72017-08-25 11:51:49 -04001504If <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 -04001505instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001506<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
1507<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001508
Cary Clark4c06f5e2017-08-04 12:48:24 -04001509Only 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 -04001510
Cary Clark8cc16c72017-08-25 11:51:49 -04001511Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1512Clears <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 -04001513
1514### Parameters
1515
Cary Clark8cc16c72017-08-25 11:51:49 -04001516<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1517setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001518 </tr>
1519</table>
1520
1521### Example
1522
1523<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1524
1525### See Also
1526
Cary Clark8cc16c72017-08-25 11:51:49 -04001527<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001528
1529---
1530
1531# <a name="Vertical_Text"></a> Vertical Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001532<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 -04001533using <a href="#Advance">Font Advance</a> to position subsequent <a href="#Glyph">Glyphs</a>. By default, each successive glyph
1534is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
1535<a href="#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001536
Cary Clarkce101242017-09-01 15:51:02 -04001537<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 -04001538font substitution,
Cary Clarkce101242017-09-01 15:51:02 -04001539textual substitution, line layout, or contextual spacing like <a href="undocumented#Kerning">Kerning</a> pairs. Use
1540a text shaping engine likeHarfBuzzto translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001541into glyph series.
1542
Cary Clark8cc16c72017-08-25 11:51:49 -04001543<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 -04001544
Cary Clark8cc16c72017-08-25 11:51:49 -04001545<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1546<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 -04001547
Cary Clark8cc16c72017-08-25 11:51:49 -04001548<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1549<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1550<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001551
1552### Example
1553
1554<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1555
Cary Clark493df1f2017-08-25 13:14:33 -04001556<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001557## isVerticalText
1558
Cary Clarka560c472017-11-27 10:44:06 -05001559<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001560bool isVerticalText() const
1561</pre>
1562
Cary Clarkce101242017-09-01 15:51:02 -04001563If true, <a href="#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001564
Cary Clark8cc16c72017-08-25 11:51:49 -04001565Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001566
1567### Return Value
1568
Cary Clark8cc16c72017-08-25 11:51:49 -04001569<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001570
1571### Example
1572
1573<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1574
1575#### Example Output
1576
1577~~~~
1578paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1579paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1580~~~~
1581
1582</fiddle-embed></div>
1583
1584---
1585
Cary Clark493df1f2017-08-25 13:14:33 -04001586<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001587## setVerticalText
1588
Cary Clarka560c472017-11-27 10:44:06 -05001589<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001590void setVerticalText(bool verticalText)
1591</pre>
1592
1593If true, text advance positions the next glyph below the previous glyph instead of to the
1594right of previous glyph.
1595
Cary Clark8cc16c72017-08-25 11:51:49 -04001596Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1597Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001598
1599### Parameters
1600
Cary Clark8cc16c72017-08-25 11:51:49 -04001601<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1602setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001603 </tr>
1604</table>
1605
1606### Example
1607
1608<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1609
1610#### Example Output
1611
1612~~~~
1613paint1 == paint2
1614~~~~
1615
1616</fiddle-embed></div>
1617
1618---
1619
1620# <a name="Fake_Bold"></a> Fake Bold
Cary Clark8cc16c72017-08-25 11:51:49 -04001621<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 -04001622is not available. <a href="undocumented#Skia">Skia</a> does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001623bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001624
Cary Clark8cc16c72017-08-25 11:51:49 -04001625Use <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 -04001626is not available.
1627
Cary Clarkce101242017-09-01 15:51:02 -04001628A <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
1629the font engine to create the bold <a href="#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark8cc16c72017-08-25 11:51:49 -04001630by 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 -04001631
Cary Clark8cc16c72017-08-25 11:51:49 -04001632<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001633
1634### Example
1635
1636<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1637
Cary Clark493df1f2017-08-25 13:14:33 -04001638<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001639## isFakeBoldText
1640
Cary Clarka560c472017-11-27 10:44:06 -05001641<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001642bool isFakeBoldText() const
1643</pre>
1644
1645If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1646from outlines.
1647
Cary Clark8cc16c72017-08-25 11:51:49 -04001648Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001649
1650### Return Value
1651
Cary Clark8cc16c72017-08-25 11:51:49 -04001652<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001653
1654### Example
1655
1656<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1657
1658#### Example Output
1659
1660~~~~
1661paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1662paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1663~~~~
1664
1665</fiddle-embed></div>
1666
1667---
1668
Cary Clark493df1f2017-08-25 13:14:33 -04001669<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001670## setFakeBoldText
1671
Cary Clarka560c472017-11-27 10:44:06 -05001672<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001673void setFakeBoldText(bool fakeBoldText)
1674</pre>
1675
Cary Clarkce101242017-09-01 15:51:02 -04001676Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001677
Cary Clark8cc16c72017-08-25 11:51:49 -04001678Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1679Clears <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 -04001680
1681### Parameters
1682
Cary Clark8cc16c72017-08-25 11:51:49 -04001683<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1684setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001685 </tr>
1686</table>
1687
1688### Example
1689
1690<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1691
1692#### Example Output
1693
1694~~~~
1695paint1 == paint2
1696~~~~
1697
1698</fiddle-embed></div>
1699
1700---
1701
1702# <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
Cary Clarkce101242017-09-01 15:51:02 -04001703if <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
1704spacing by the difference of the hinted and <a href="undocumented#Unhinted">Unhinted</a> <a href="undocumented#Left_Side_Bearing">Left Side Bearing</a> and
1705<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
1706<a href="undocumented#FreeType">FreeType</a> as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001707
Cary Clarkce101242017-09-01 15:51:02 -04001708<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
Cary Clarkbc5697d2017-10-04 14:31:33 -04001709a specific pair of characters is adjusted using data in the font <a href="undocumented#Kerning">Kerning</a> tables.
Cary Clark12799e12017-07-28 15:18:29 -04001710
Cary Clark493df1f2017-08-25 13:14:33 -04001711<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001712## isDevKernText
1713
Cary Clarka560c472017-11-27 10:44:06 -05001714<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001715bool isDevKernText() const
1716</pre>
1717
1718Returns if character spacing may be adjusted by the hinting difference.
1719
Cary Clark8cc16c72017-08-25 11:51:49 -04001720Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001721
1722### Return Value
1723
Cary Clark8cc16c72017-08-25 11:51:49 -04001724<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001725
1726### Example
1727
1728<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1729
1730---
1731
Cary Clark493df1f2017-08-25 13:14:33 -04001732<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001733## setDevKernText
1734
Cary Clarka560c472017-11-27 10:44:06 -05001735<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001736void setDevKernText(bool devKernText)
1737</pre>
1738
1739Requests, but does not require, to use hinting to adjust glyph spacing.
1740
Cary Clark8cc16c72017-08-25 11:51:49 -04001741Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1742Clears <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 -04001743
1744### Parameters
1745
Cary Clark8cc16c72017-08-25 11:51:49 -04001746<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1747setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001748 </tr>
1749</table>
1750
1751### Example
1752
1753<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1754
1755#### Example Output
1756
1757~~~~
1758paint1 == paint2
1759~~~~
1760
1761</fiddle-embed></div>
1762
1763---
1764
1765# <a name="Filter_Quality_Methods"></a> Filter Quality Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04001766<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1767A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1768A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001769If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1770in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001771
Cary Clark8cc16c72017-08-25 11:51:49 -04001772<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 -04001773
1774<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001775 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1776 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1777 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1778 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001779</table>
1780
Cary Clarka560c472017-11-27 10:44:06 -05001781and when <a href="#Paint">Paint</a> has a <a href="undocumented#Shader">Shader</a> specialization that uses <a href="SkImage_Reference#Image">Image</a> or <a href="SkBitmap_Reference#Bitmap">Bitmap</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001782
Cary Clark4c06f5e2017-08-04 12:48:24 -04001783<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 -04001784
1785### Example
1786
1787<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1788
Cary Clark493df1f2017-08-25 13:14:33 -04001789<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001790## getFilterQuality
1791
Cary Clarka560c472017-11-27 10:44:06 -05001792<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001793SkFilterQuality getFilterQuality() const
1794</pre>
1795
Cary Clark4c06f5e2017-08-04 12:48:24 -04001796Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001797draws faster; a higher setting looks better when the image is scaled.
1798
1799### Return Value
1800
Cary Clark4c06f5e2017-08-04 12:48:24 -04001801one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1802<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001803
1804### Example
1805
1806<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1807
1808#### Example Output
1809
1810~~~~
1811kNone_SkFilterQuality == paint.getFilterQuality()
1812~~~~
1813
1814</fiddle-embed></div>
1815
1816---
1817
Cary Clark493df1f2017-08-25 13:14:33 -04001818<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001819## setFilterQuality
1820
Cary Clarka560c472017-11-27 10:44:06 -05001821<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001822void setFilterQuality(SkFilterQuality quality)
1823</pre>
1824
Cary Clark4c06f5e2017-08-04 12:48:24 -04001825Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001826draws faster; a higher setting looks better when the image is scaled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001827Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001828
1829### Parameters
1830
Cary Clark8cc16c72017-08-25 11:51:49 -04001831<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04001832one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1833<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001834 </tr>
1835</table>
1836
1837### Example
1838
1839<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1840
1841#### Example Output
1842
1843~~~~
1844kHigh_SkFilterQuality == paint.getFilterQuality()
1845~~~~
1846
1847</fiddle-embed></div>
1848
1849### See Also
1850
Cary Clark4c06f5e2017-08-04 12:48:24 -04001851<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001852
1853---
1854
1855# <a name="Color_Methods"></a> Color Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04001856<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 -04001857or stroked shape in a
185832-bit value. Each component occupies 8-bits, ranging from zero: no contribution;
1859to 255: full intensity. All values in any combination are valid.
1860
Cary Clarkce101242017-09-01 15:51:02 -04001861<a href="undocumented#Color">Color</a> is not <a href="#Premultiply">Premultiplied</a>;
Cary Clark8cc16c72017-08-25 11:51:49 -04001862<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 -04001863
Cary Clark8cc16c72017-08-25 11:51:49 -04001864The 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 -04001865on the output device, which may have more or fewer bits, and may have a different arrangement.
1866
Cary Clark8cc16c72017-08-25 11:51:49 -04001867| 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 -04001868| --- | --- | --- | --- | --- |
1869| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1870
1871### Example
1872
1873<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1874
Cary Clark493df1f2017-08-25 13:14:33 -04001875<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001876## getColor
1877
Cary Clarka560c472017-11-27 10:44:06 -05001878<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001879SkColor getColor() const
1880</pre>
1881
Cary Clarkce101242017-09-01 15:51:02 -04001882Retrieves <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 -04001883Use 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 -04001884a color component.
1885
1886### Return Value
1887
Cary Clarkce101242017-09-01 15:51:02 -04001888<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001889
1890### Example
1891
1892<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1893
1894#### Example Output
1895
1896~~~~
1897Yellow is 100% red, 100% green, and 0% blue.
1898~~~~
1899
1900</fiddle-embed></div>
1901
1902### See Also
1903
Cary Clark4c06f5e2017-08-04 12:48:24 -04001904<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001905
1906---
1907
Cary Clark493df1f2017-08-25 13:14:33 -04001908<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001909## setColor
1910
Cary Clarka560c472017-11-27 10:44:06 -05001911<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001912void setColor(SkColor color)
1913</pre>
1914
Cary Clarkce101242017-09-01 15:51:02 -04001915Sets <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,
1916<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 -04001917
1918### Parameters
1919
Cary Clark8cc16c72017-08-25 11:51:49 -04001920<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001921<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001922 </tr>
1923</table>
1924
1925### Example
1926
1927<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1928
1929#### Example Output
1930
1931~~~~
1932green1 == green2
1933~~~~
1934
1935</fiddle-embed></div>
1936
1937### See Also
1938
Cary Clark8cc16c72017-08-25 11:51:49 -04001939<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 -04001940
1941---
1942
1943## <a name="Alpha_Methods"></a> Alpha Methods
1944
Cary Clark8cc16c72017-08-25 11:51:49 -04001945<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 -04001946
Cary Clark493df1f2017-08-25 13:14:33 -04001947<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001948## getAlpha
1949
Cary Clarka560c472017-11-27 10:44:06 -05001950<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001951uint8_t getAlpha() const
1952</pre>
1953
Cary Clarkce101242017-09-01 15:51:02 -04001954Retrieves <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 -04001955
1956### Return Value
1957
Cary Clarkce101242017-09-01 15:51:02 -04001958<a href="#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001959
1960### Example
1961
1962<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1963
1964#### Example Output
1965
1966~~~~
1967255 == paint.getAlpha()
1968~~~~
1969
1970</fiddle-embed></div>
1971
1972---
1973
Cary Clark493df1f2017-08-25 13:14:33 -04001974<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001975## setAlpha
1976
Cary Clarka560c472017-11-27 10:44:06 -05001977<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001978void setAlpha(U8CPU a)
1979</pre>
1980
Cary Clarkce101242017-09-01 15:51:02 -04001981Replaces <a href="#Alpha">Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001982unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001983build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1984<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 -04001985fully opaque.
1986
1987### Parameters
1988
Cary Clark8cc16c72017-08-25 11:51:49 -04001989<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001990<a href="#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001991 </tr>
1992</table>
1993
1994### Example
1995
1996<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1997
1998#### Example Output
1999
2000~~~~
20010x44112233 == paint.getColor()
2002~~~~
2003
2004</fiddle-embed></div>
2005
2006---
2007
Cary Clark493df1f2017-08-25 13:14:33 -04002008<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002009## setARGB
2010
Cary Clarka560c472017-11-27 10:44:06 -05002011<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002012void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
2013</pre>
2014
Cary Clark4c06f5e2017-08-04 12:48:24 -04002015Sets <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 -04002016The 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 -04002017
2018### Parameters
2019
Cary Clark8cc16c72017-08-25 11:51:49 -04002020<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2021amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2022 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2023amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2024 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2025amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2026 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2027amount 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 -04002028 </tr>
2029</table>
2030
2031### Example
2032
2033<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2034
2035#### Example Output
2036
2037~~~~
2038transRed1 == transRed2
2039~~~~
2040
2041</fiddle-embed></div>
2042
2043### See Also
2044
Cary Clark8cc16c72017-08-25 11:51:49 -04002045<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002046
2047---
2048
2049# <a name="Style"></a> Style
Cary Clark8cc16c72017-08-25 11:51:49 -04002050<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2051Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002052
Cary Clark8cc16c72017-08-25 11:51:49 -04002053Set <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 -04002054The fill covers the area inside the geometry for most shapes.
2055
Cary Clark8cc16c72017-08-25 11:51:49 -04002056Set <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 -04002057
2058## <a name="Fill"></a> Fill
2059
2060### See Also
2061
Cary Clark8cc16c72017-08-25 11:51:49 -04002062<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002063
2064## <a name="Stroke"></a> Stroke
2065
Cary Clarkbc5697d2017-10-04 14:31:33 -04002066The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002067<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>.
2068The area covered where the shape turns a corner is described by <a href="#Stroke_Join">Stroke Join</a>.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002069The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002070
Cary Clark8cc16c72017-08-25 11:51:49 -04002071As <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
2072may 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 -04002073
2074## <a name="Hairline"></a> Hairline
2075
Cary Clark8cc16c72017-08-25 11:51:49 -04002076<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Hairline">Hairline</a>.
2077<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 -04002078flow horizontally, vertically,or diagonally.
2079
Cary Clark8cc16c72017-08-25 11:51:49 -04002080<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
2081two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2082pixel. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
Cary Clarka560c472017-11-27 10:44:06 -05002083<a href="undocumented#GPU">GPU</a>-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002084while stroking.
2085
Cary Clark8cc16c72017-08-25 11:51:49 -04002086## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002087
Cary Clarka560c472017-11-27 10:44:06 -05002088<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002089enum <a href="#SkPaint_Style">Style</a> {
2090<a href="#SkPaint_kFill_Style">kFill Style</a>,
2091<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2092<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002093};</pre>
2094
Cary Clark8cc16c72017-08-25 11:51:49 -04002095Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002096The stroke and fill
2097share all paint attributes; for instance, they are drawn with the same color.
2098
Cary Clark8cc16c72017-08-25 11:51:49 -04002099Use <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 -04002100a fill draw.
2101
2102### Constants
2103
2104<table>
2105 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002106 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002107Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clarka560c472017-11-27 10:44:06 -05002108<a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="SkImage_Reference#Image">Image</a>, <a href="#Patch">Patches</a>, <a href="undocumented#Region">Region</a>, <a href="#Sprite">Sprites</a>, and <a href="undocumented#Vertices">Vertices</a> are painted as if
Cary Clark8cc16c72017-08-25 11:51:49 -04002109<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2110The <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 -04002111and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002112<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 -04002113 </tr>
2114 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002115 <td><a name="SkPaint_kStroke_Style"> <code><strong>SkPaint::kStroke_Style </strong></code> </a></td><td>1</td><td>Set to stroke geometry.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002116Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Arc">Arcs</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clarkce101242017-09-01 15:51:02 -04002117<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 -04002118and ignore the set <a href="#SkPaint_Style">Style</a>.
2119The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002120 </tr>
2121 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002122 <td><a name="SkPaint_kStrokeAndFill_Style"> <code><strong>SkPaint::kStrokeAndFill_Style </strong></code> </a></td><td>2</td><td>Set to stroke and fill geometry.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002123Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002124<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2125and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002126 </tr>
2127
2128</table>
2129
Cary Clark8cc16c72017-08-25 11:51:49 -04002130## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002131
Cary Clarka560c472017-11-27 10:44:06 -05002132<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002133enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002134<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002135};</pre>
2136
2137### Constants
2138
2139<table>
2140 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002141 <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.
2142May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002143 </tr>
2144
2145</table>
2146
Cary Clark493df1f2017-08-25 13:14:33 -04002147<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002148## getStyle
2149
Cary Clarka560c472017-11-27 10:44:06 -05002150<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002151Style getStyle() const
2152</pre>
2153
2154Whether the geometry is filled, stroked, or filled and stroked.
2155
2156### Return Value
2157
Cary Clark8cc16c72017-08-25 11:51:49 -04002158one 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 -04002159
2160### Example
2161
2162<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2163
2164#### Example Output
2165
2166~~~~
2167SkPaint::kFill_Style == paint.getStyle()
2168~~~~
2169
2170</fiddle-embed></div>
2171
2172### See Also
2173
Cary Clark8cc16c72017-08-25 11:51:49 -04002174<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002175
2176---
2177
Cary Clark493df1f2017-08-25 13:14:33 -04002178<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002179## setStyle
2180
Cary Clarka560c472017-11-27 10:44:06 -05002181<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002182void setStyle(Style style)
2183</pre>
2184
2185Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002186Has 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 -04002187
2188### Parameters
2189
Cary Clark8cc16c72017-08-25 11:51:49 -04002190<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2191one 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 -04002192 </tr>
2193</table>
2194
2195### Example
2196
2197<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2198
2199### See Also
2200
Cary Clark8cc16c72017-08-25 11:51:49 -04002201<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002202
2203---
2204
2205### See Also
2206
Cary Clark8cc16c72017-08-25 11:51:49 -04002207<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 -04002208
2209# <a name="Stroke_Width"></a> Stroke Width
Cary Clark8cc16c72017-08-25 11:51:49 -04002210<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clarkbc5697d2017-10-04 14:31:33 -04002211of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002212set 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 -04002213
2214When width is greater than zero, the stroke encompasses as many pixels partially
2215or fully as needed. When the width equals zero, the paint enables hairlines;
2216the stroke is always one pixel wide.
2217
Cary Clarkbc5697d2017-10-04 14:31:33 -04002218The stroke dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002219remains one pixel wide regardless of scaling.
2220
2221The default width for the paint is zero.
2222
2223### Example
2224
Cary Clarka560c472017-11-27 10:44:06 -05002225<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756"gpu="true"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clarkbc5697d2017-10-04 14:31:33 -04002226line and the platform implementation.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002227
Cary Clark493df1f2017-08-25 13:14:33 -04002228<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002229## getStrokeWidth
2230
Cary Clarka560c472017-11-27 10:44:06 -05002231<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002232SkScalar getStrokeWidth() const
2233</pre>
2234
Cary Clark8cc16c72017-08-25 11:51:49 -04002235Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002236outline the shape.
2237
2238### Return Value
2239
Cary Clark8cc16c72017-08-25 11:51:49 -04002240zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002241
2242### Example
2243
2244<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2245
2246#### Example Output
2247
2248~~~~
22490 == paint.getStrokeWidth()
2250~~~~
2251
2252</fiddle-embed></div>
2253
2254---
2255
Cary Clark493df1f2017-08-25 13:14:33 -04002256<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002257## setStrokeWidth
2258
Cary Clarka560c472017-11-27 10:44:06 -05002259<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002260void setStrokeWidth(SkScalar width)
2261</pre>
2262
2263Sets the thickness of the pen used by the paint to
2264outline the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002265Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002266
2267### Parameters
2268
Cary Clark8cc16c72017-08-25 11:51:49 -04002269<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2270zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002271 </tr>
2272</table>
2273
2274### Example
2275
2276<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2277
2278#### Example Output
2279
2280~~~~
22815 == paint.getStrokeWidth()
2282~~~~
2283
2284</fiddle-embed></div>
2285
2286---
2287
2288# <a name="Miter_Limit"></a> Miter Limit
Cary Clark8cc16c72017-08-25 11:51:49 -04002289<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002290relative to the stroke width.
2291
Cary Clark8cc16c72017-08-25 11:51:49 -04002292<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2293is 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>
2294or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002295
Cary Clark8cc16c72017-08-25 11:51:49 -04002296If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2297is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002298
Cary Clark8cc16c72017-08-25 11:51:49 -04002299<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002300
Cary Clark8cc16c72017-08-25 11:51:49 -04002301miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002302The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clarkce101242017-09-01 15:51:02 -04002303in "<a href="undocumented#SkUserConfig">SkUserConfig</a>.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002304
2305Here are some miter limits and the angles that triggers them.
2306
2307| miter limit | angle in degrees |
2308| --- | --- |
2309| 10 | 11.48 |
2310| 9 | 12.76 |
2311| 8 | 14.36 |
2312| 7 | 16.43 |
2313| 6 | 19.19 |
2314| 5 | 23.07 |
2315| 4 | 28.96 |
2316| 3 | 38.94 |
2317| 2 | 60 |
2318| 1 | 180 |
2319
2320### Example
2321
2322<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2323When the miter limit is decreased slightly, the miter join is replaced
2324by a bevel join.</div></fiddle-embed></div>
2325
Cary Clark493df1f2017-08-25 13:14:33 -04002326<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002327## getStrokeMiter
2328
Cary Clarka560c472017-11-27 10:44:06 -05002329<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002330SkScalar getStrokeMiter() const
2331</pre>
2332
2333The limit at which a sharp corner is drawn beveled.
2334
2335### Return Value
2336
Cary Clark8cc16c72017-08-25 11:51:49 -04002337zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002338
2339### Example
2340
2341<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2342
2343#### Example Output
2344
2345~~~~
2346default miter limit == 4
2347~~~~
2348
2349</fiddle-embed></div>
2350
2351### See Also
2352
Cary Clark8cc16c72017-08-25 11:51:49 -04002353<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 -04002354
2355---
2356
Cary Clark493df1f2017-08-25 13:14:33 -04002357<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002358## setStrokeMiter
2359
Cary Clarka560c472017-11-27 10:44:06 -05002360<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002361void setStrokeMiter(SkScalar miter)
2362</pre>
2363
2364The limit at which a sharp corner is drawn beveled.
2365Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002366Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002367
2368### Parameters
2369
Cary Clark8cc16c72017-08-25 11:51:49 -04002370<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2371zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002372 </tr>
2373</table>
2374
2375### Example
2376
2377<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2378
2379#### Example Output
2380
2381~~~~
2382default miter limit == 8
2383~~~~
2384
2385</fiddle-embed></div>
2386
2387### See Also
2388
Cary Clark8cc16c72017-08-25 11:51:49 -04002389<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 -04002390
2391---
2392
2393# <a name="Stroke_Cap"></a> Stroke Cap
2394
Cary Clark8cc16c72017-08-25 11:51:49 -04002395## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002396
Cary Clarka560c472017-11-27 10:44:06 -05002397<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002398enum <a href="#SkPaint_Cap">Cap</a> {
2399<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2400<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2401<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002402
Cary Clark8cc16c72017-08-25 11:51:49 -04002403<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2404<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002405};
Cary Clark6fc50412017-09-21 12:31:06 -04002406
Cary Clark8cc16c72017-08-25 11:51:49 -04002407static 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 -04002408
Cary Clark8cc16c72017-08-25 11:51:49 -04002409<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 -04002410
2411### Constants
2412
2413<table>
2414 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002415 <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 -04002416 </tr>
2417 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002418 <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 -04002419and end.</td>
2420 </tr>
2421 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002422 <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 -04002423and end. The square sides are parallel to the initial and final direction
2424of the stroke.</td>
2425 </tr>
2426 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002427 <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 -04002428 </tr>
2429 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002430 <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>.
2431<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 -04002432 </tr>
2433 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002434 <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.
2435May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002436 </tr>
2437
Cary Clark8cc16c72017-08-25 11:51:49 -04002438Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002439follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002440
Cary Clark8cc16c72017-08-25 11:51:49 -04002441If 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 -04002442visible beginning and end.
2443
Cary Clark8cc16c72017-08-25 11:51:49 -04002444<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 -04002445
Cary Clark8cc16c72017-08-25 11:51:49 -04002446<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> is not drawn.
2447<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 -04002448at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002449<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
2450<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002451
Cary Clark8cc16c72017-08-25 11:51:49 -04002452<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 -04002453
2454</table>
2455
2456### Example
2457
Cary Clark2ade9972017-11-02 17:49:34 -04002458<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002459
Cary Clark493df1f2017-08-25 13:14:33 -04002460<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002461## getStrokeCap
2462
Cary Clarka560c472017-11-27 10:44:06 -05002463<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002464Cap getStrokeCap() const
2465</pre>
2466
2467The geometry drawn at the beginning and end of strokes.
2468
2469### Return Value
2470
Cary Clark8cc16c72017-08-25 11:51:49 -04002471one 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 -04002472
2473### Example
2474
2475<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2476
2477#### Example Output
2478
2479~~~~
2480kButt_Cap == default stroke cap
2481~~~~
2482
2483</fiddle-embed></div>
2484
2485### See Also
2486
Cary Clark8cc16c72017-08-25 11:51:49 -04002487<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002488
2489---
2490
Cary Clark493df1f2017-08-25 13:14:33 -04002491<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002492## setStrokeCap
2493
Cary Clarka560c472017-11-27 10:44:06 -05002494<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002495void setStrokeCap(Cap cap)
2496</pre>
2497
2498The geometry drawn at the beginning and end of strokes.
2499
2500### Parameters
2501
Cary Clark8cc16c72017-08-25 11:51:49 -04002502<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2503one 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>;
2504has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002505 </tr>
2506</table>
2507
2508### Example
2509
2510<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2511
2512#### Example Output
2513
2514~~~~
2515kRound_Cap == paint.getStrokeCap()
2516~~~~
2517
2518</fiddle-embed></div>
2519
2520### See Also
2521
Cary Clark8cc16c72017-08-25 11:51:49 -04002522<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002523
2524---
2525
2526# <a name="Stroke_Join"></a> Stroke Join
Cary Clark8cc16c72017-08-25 11:51:49 -04002527<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 -04002528
Cary Clark8cc16c72017-08-25 11:51:49 -04002529Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002530follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002531
2532If the contour direction changes abruptly, because the tangent direction leading
2533to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002534the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002535
2536### Example
2537
Cary Clark2ade9972017-11-02 17:49:34 -04002538<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002539
Cary Clark8cc16c72017-08-25 11:51:49 -04002540## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002541
Cary Clarka560c472017-11-27 10:44:06 -05002542<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002543enum <a href="#SkPaint_Join">Join</a> {
2544<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2545<a href="#SkPaint_kRound_Join">kRound Join</a>,
2546<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002547
Cary Clark8cc16c72017-08-25 11:51:49 -04002548<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2549<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002550};
Cary Clark6fc50412017-09-21 12:31:06 -04002551
Cary Clark8cc16c72017-08-25 11:51:49 -04002552static 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 -04002553
Cary Clark8cc16c72017-08-25 11:51:49 -04002554<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 -04002555affects the four corners of a stroked rectangle, and the connected segments in a
2556stroked path.
2557
2558Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2559radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2560connect the thick strokes.
2561
2562The fill path constructed to describe the stroked path respects the join setting but may
2563not contain the actual join. For instance, a fill path constructed with round joins does
2564not necessarily include circles at each connected segment.
2565
2566### Constants
2567
2568<table>
2569 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002570 <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>.
2571If 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 -04002572 </tr>
2573 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002574 <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 -04002575 </tr>
2576 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002577 <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 -04002578 </tr>
2579 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002580 <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 -04002581 </tr>
2582 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002583 <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>.
2584<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 -04002585 </tr>
2586 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002587 <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.
2588May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002589 </tr>
2590</table>
2591
2592### Example
2593
2594<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2595
2596### See Also
2597
Cary Clark8cc16c72017-08-25 11:51:49 -04002598<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 -04002599
2600
2601
Cary Clark493df1f2017-08-25 13:14:33 -04002602<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002603## getStrokeJoin
2604
Cary Clarka560c472017-11-27 10:44:06 -05002605<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002606Join getStrokeJoin() const
2607</pre>
2608
2609The geometry drawn at the corners of strokes.
2610
2611### Return Value
2612
Cary Clark8cc16c72017-08-25 11:51:49 -04002613one 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 -04002614
2615### Example
2616
2617<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2618
2619#### Example Output
2620
2621~~~~
2622kMiter_Join == default stroke join
2623~~~~
2624
2625</fiddle-embed></div>
2626
2627### See Also
2628
Cary Clark8cc16c72017-08-25 11:51:49 -04002629<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002630
2631---
2632
Cary Clark493df1f2017-08-25 13:14:33 -04002633<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002634## setStrokeJoin
2635
Cary Clarka560c472017-11-27 10:44:06 -05002636<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002637void setStrokeJoin(Join join)
2638</pre>
2639
2640The geometry drawn at the corners of strokes.
2641
2642### Parameters
2643
Cary Clark8cc16c72017-08-25 11:51:49 -04002644<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2645one 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 -04002646otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002647 </tr>
2648</table>
2649
2650### Example
2651
2652<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2653
2654#### Example Output
2655
2656~~~~
2657kMiter_Join == paint.getStrokeJoin()
2658~~~~
2659
2660</fiddle-embed></div>
2661
2662### See Also
2663
Cary Clark8cc16c72017-08-25 11:51:49 -04002664<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002665
2666---
2667
2668### See Also
2669
Cary Clark8cc16c72017-08-25 11:51:49 -04002670<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002671
2672# <a name="Fill_Path"></a> Fill Path
Cary Clark8cc16c72017-08-25 11:51:49 -04002673<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 -04002674
Cary Clark8cc16c72017-08-25 11:51:49 -04002675If <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 -04002676replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2677destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002678
Cary Clark4c06f5e2017-08-04 12:48:24 -04002679Fill <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
2680the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002681
Cary Clark8cc16c72017-08-25 11:51:49 -04002682If <a href="#SkPaint_Style">Style</a> is <a href="#SkPaint_kStroke_Style">kStroke Style</a> or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
2683and <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>,
2684and <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 -04002685
Cary Clark8cc16c72017-08-25 11:51:49 -04002686Fill <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 -04002687
Cary Clark8cc16c72017-08-25 11:51:49 -04002688If 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>
2689returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002690
Cary Clark493df1f2017-08-25 13:14:33 -04002691<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002692## getFillPath
2693
Cary Clarka560c472017-11-27 10:44:06 -05002694<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2695bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002696</pre>
2697
2698The filled equivalent of the stroked path.
2699
2700### Parameters
2701
Cary Clark8cc16c72017-08-25 11:51:49 -04002702<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002703<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002704 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2705resulting <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>
2706 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002707optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002708 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002709if > 1, increase precision, else if (0 < res < 1) reduce precision
2710to favor speed and size</td>
2711 </tr>
2712</table>
2713
2714### Return Value
2715
Cary Clark8cc16c72017-08-25 11:51:49 -04002716true 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 -04002717
2718### Example
2719
Cary Clarkce101242017-09-01 15:51:02 -04002720<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.
2721At the lowest precision, the <a href="#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark12799e12017-07-28 15:18:29 -04002722At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2723
2724---
2725
Cary Clarka560c472017-11-27 10:44:06 -05002726<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002727bool getFillPath(const SkPath& src, SkPath* dst) const
2728</pre>
2729
2730The filled equivalent of the stroked path.
2731
Cary Clark8cc16c72017-08-25 11:51:49 -04002732Replaces <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>.
2733<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 -04002734
2735### Parameters
2736
Cary Clark8cc16c72017-08-25 11:51:49 -04002737<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002738<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002739 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2740resulting <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 -04002741 </tr>
2742</table>
2743
2744### Return Value
2745
Cary Clark8cc16c72017-08-25 11:51:49 -04002746true 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 -04002747
2748### Example
2749
2750<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2751
2752---
2753
2754### See Also
2755
Cary Clark8cc16c72017-08-25 11:51:49 -04002756<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 -04002757
2758# <a name="Shader_Methods"></a> Shader Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002759<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2760<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark8cc16c72017-08-25 11:51:49 -04002761If <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 -04002762
Cary Clark8cc16c72017-08-25 11:51:49 -04002763<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2764If <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 -04002765the fill.
2766
Cary Clark8cc16c72017-08-25 11:51:49 -04002767The 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 -04002768
2769### Example
2770
2771<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2772
Cary Clark8cc16c72017-08-25 11:51:49 -04002773If <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 -04002774
2775### Example
2776
2777<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2778
Cary Clark493df1f2017-08-25 13:14:33 -04002779<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002780## getShader
2781
Cary Clarka560c472017-11-27 10:44:06 -05002782<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002783SkShader* getShader() const
2784</pre>
2785
2786Optional colors used when filling a path, such as a gradient.
2787
Cary Clark4c06f5e2017-08-04 12:48:24 -04002788Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002789
2790### Return Value
2791
Cary Clark4c06f5e2017-08-04 12:48:24 -04002792<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002793
2794### Example
2795
2796<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2797
2798#### Example Output
2799
2800~~~~
2801nullptr == shader
2802nullptr != shader
2803~~~~
2804
2805</fiddle-embed></div>
2806
2807---
2808
Cary Clark493df1f2017-08-25 13:14:33 -04002809<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002810## refShader
2811
Cary Clarka560c472017-11-27 10:44:06 -05002812<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002813sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002814</pre>
2815
2816Optional colors used when filling a path, such as a gradient.
2817
Cary Clark4c06f5e2017-08-04 12:48:24 -04002818Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002819
2820### Return Value
2821
Cary Clark4c06f5e2017-08-04 12:48:24 -04002822<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002823
2824### Example
2825
2826<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2827
2828#### Example Output
2829
2830~~~~
2831shader unique: true
2832shader unique: false
2833~~~~
2834
2835</fiddle-embed></div>
2836
2837---
2838
Cary Clark493df1f2017-08-25 13:14:33 -04002839<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002840## setShader
2841
Cary Clarka560c472017-11-27 10:44:06 -05002842<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002843void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002844</pre>
2845
2846Optional colors used when filling a path, such as a gradient.
2847
Cary Clarkd0530ba2017-09-14 11:25:39 -04002848Sets <a href="undocumented#Shader">Shader</a> to <a href="#SkPaint_setShader_shader">shader</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Shader">Shader</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04002849Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002850
2851### Parameters
2852
Cary Clark8cc16c72017-08-25 11:51:49 -04002853<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002854how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002855 </tr>
2856</table>
2857
2858### Example
2859
2860<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2861
2862---
2863
2864# <a name="Color_Filter_Methods"></a> Color Filter Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002865<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2866<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 -04002867If <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 -04002868
Cary Clark8cc16c72017-08-25 11:51:49 -04002869The 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 -04002870
2871### Example
2872
2873<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2874
Cary Clark493df1f2017-08-25 13:14:33 -04002875<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002876## getColorFilter
2877
Cary Clarka560c472017-11-27 10:44:06 -05002878<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002879SkColorFilter* getColorFilter() const
2880</pre>
2881
Cary Clark4c06f5e2017-08-04 12:48:24 -04002882Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2883Does 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 -04002884
2885### Return Value
2886
Cary Clark4c06f5e2017-08-04 12:48:24 -04002887<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002888
2889### Example
2890
2891<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2892
2893#### Example Output
2894
2895~~~~
2896nullptr == color filter
2897nullptr != color filter
2898~~~~
2899
2900</fiddle-embed></div>
2901
2902---
2903
Cary Clark493df1f2017-08-25 13:14:33 -04002904<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002905## refColorFilter
2906
Cary Clarka560c472017-11-27 10:44:06 -05002907<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002908sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002909</pre>
2910
Cary Clark4c06f5e2017-08-04 12:48:24 -04002911Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2912Increases <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 -04002913
2914### Return Value
2915
Cary Clark4c06f5e2017-08-04 12:48:24 -04002916<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002917
2918### Example
2919
2920<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2921
2922#### Example Output
2923
2924~~~~
2925color filter unique: true
2926color filter unique: false
2927~~~~
2928
2929</fiddle-embed></div>
2930
2931---
2932
Cary Clark493df1f2017-08-25 13:14:33 -04002933<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002934## setColorFilter
2935
Cary Clarka560c472017-11-27 10:44:06 -05002936<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002937void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002938</pre>
2939
Cary Clark6fc50412017-09-21 12:31:06 -04002940Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2941<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2942
2943Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002944
2945### Parameters
2946
Cary Clark8cc16c72017-08-25 11:51:49 -04002947<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002948<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002949 </tr>
2950</table>
2951
2952### Example
2953
2954<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2955
2956---
2957
2958# <a name="Blend_Mode_Methods"></a> Blend Mode Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002959<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 -04002960The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002961over the destination color.
2962
2963### Example
2964
2965<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2966
2967### See Also
2968
Cary Clark4c06f5e2017-08-04 12:48:24 -04002969<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002970
Cary Clark493df1f2017-08-25 13:14:33 -04002971<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002972## getBlendMode
2973
Cary Clarka560c472017-11-27 10:44:06 -05002974<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002975SkBlendMode getBlendMode() const
2976</pre>
2977
Cary Clark4c06f5e2017-08-04 12:48:24 -04002978Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002979By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002980
2981### Return Value
2982
2983mode used to combine source color with destination color
2984
2985### Example
2986
2987<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
2988
2989#### Example Output
2990
2991~~~~
2992kSrcOver == getBlendMode
2993kSrcOver != getBlendMode
2994~~~~
2995
2996</fiddle-embed></div>
2997
2998---
2999
Cary Clark493df1f2017-08-25 13:14:33 -04003000<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003001## isSrcOver
3002
Cary Clarka560c472017-11-27 10:44:06 -05003003<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003004bool isSrcOver() const
3005</pre>
3006
Cary Clark8cc16c72017-08-25 11:51:49 -04003007Returns 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 -04003008
3009### Return Value
3010
Cary Clark8cc16c72017-08-25 11:51:49 -04003011true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003012
3013### Example
3014
3015<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3016
3017#### Example Output
3018
3019~~~~
3020isSrcOver == true
3021isSrcOver != true
3022~~~~
3023
3024</fiddle-embed></div>
3025
3026---
3027
Cary Clark493df1f2017-08-25 13:14:33 -04003028<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003029## setBlendMode
3030
Cary Clarka560c472017-11-27 10:44:06 -05003031<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003032void setBlendMode(SkBlendMode mode)
3033</pre>
3034
Cary Clark8cc16c72017-08-25 11:51:49 -04003035Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003036Does not check for valid input.
3037
3038### Parameters
3039
Cary Clark8cc16c72017-08-25 11:51:49 -04003040<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003041<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003042 </tr>
3043</table>
3044
3045### Example
3046
3047<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3048
3049#### Example Output
3050
3051~~~~
3052isSrcOver == true
3053isSrcOver != true
3054~~~~
3055
3056</fiddle-embed></div>
3057
3058---
3059
3060# <a name="Path_Effect_Methods"></a> Path Effect Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003061<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3062<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 -04003063If <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 -04003064
3065### Example
3066
3067<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3068
3069### See Also
3070
Cary Clark4c06f5e2017-08-04 12:48:24 -04003071<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003072
Cary Clark493df1f2017-08-25 13:14:33 -04003073<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003074## getPathEffect
3075
Cary Clarka560c472017-11-27 10:44:06 -05003076<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003077SkPathEffect* getPathEffect() const
3078</pre>
3079
Cary Clark4c06f5e2017-08-04 12:48:24 -04003080Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3081Does 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 -04003082
3083### Return Value
3084
Cary Clark4c06f5e2017-08-04 12:48:24 -04003085<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003086
3087### Example
3088
3089<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3090
3091#### Example Output
3092
3093~~~~
3094nullptr == path effect
3095nullptr != path effect
3096~~~~
3097
3098</fiddle-embed></div>
3099
3100---
3101
Cary Clark493df1f2017-08-25 13:14:33 -04003102<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003103## refPathEffect
3104
Cary Clarka560c472017-11-27 10:44:06 -05003105<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003106sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003107</pre>
3108
Cary Clark4c06f5e2017-08-04 12:48:24 -04003109Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3110Increases <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 -04003111
3112### Return Value
3113
Cary Clark4c06f5e2017-08-04 12:48:24 -04003114<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003115
3116### Example
3117
Cary Clarka560c472017-11-27 10:44:06 -05003118<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003119
3120#### Example Output
3121
3122~~~~
3123path effect unique: true
3124path effect unique: false
3125~~~~
3126
3127</fiddle-embed></div>
3128
3129---
3130
Cary Clark493df1f2017-08-25 13:14:33 -04003131<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003132## setPathEffect
3133
Cary Clarka560c472017-11-27 10:44:06 -05003134<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003135void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003136</pre>
3137
Cary Clark6fc50412017-09-21 12:31:06 -04003138Sets <a href="undocumented#Path_Effect">Path Effect</a> to <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3139<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3140
3141Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003142
3143### Parameters
3144
Cary Clark8cc16c72017-08-25 11:51:49 -04003145<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003146replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003147 </tr>
3148</table>
3149
3150### Example
3151
3152<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3153
3154---
3155
3156# <a name="Mask_Filter_Methods"></a> Mask Filter Methods
Cary Clarkce101242017-09-01 15:51:02 -04003157<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 -04003158<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>,
3159and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003160
3161<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3162creating a blur effect. Set <a href="undocumented#Mask_Filter">Mask Filter</a> to nullptr to prevent <a href="undocumented#Mask_Filter">Mask Filter</a> from
3163modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003164
3165### Example
3166
3167<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3168
Cary Clark493df1f2017-08-25 13:14:33 -04003169<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003170## getMaskFilter
3171
Cary Clarka560c472017-11-27 10:44:06 -05003172<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003173SkMaskFilter* getMaskFilter() const
3174</pre>
3175
Cary Clark4c06f5e2017-08-04 12:48:24 -04003176Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3177Does 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 -04003178
3179### Return Value
3180
Cary Clark4c06f5e2017-08-04 12:48:24 -04003181<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003182
3183### Example
3184
3185<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3186
3187#### Example Output
3188
3189~~~~
3190nullptr == mask filter
3191nullptr != mask filter
3192~~~~
3193
3194</fiddle-embed></div>
3195
3196---
3197
Cary Clark493df1f2017-08-25 13:14:33 -04003198<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003199## refMaskFilter
3200
Cary Clarka560c472017-11-27 10:44:06 -05003201<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003202sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003203</pre>
3204
Cary Clark4c06f5e2017-08-04 12:48:24 -04003205Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003206
Cary Clark4c06f5e2017-08-04 12:48:24 -04003207Increases <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 -04003208
3209### Return Value
3210
Cary Clark4c06f5e2017-08-04 12:48:24 -04003211<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003212
3213### Example
3214
3215<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3216
3217#### Example Output
3218
3219~~~~
3220mask filter unique: true
3221mask filter unique: false
3222~~~~
3223
3224</fiddle-embed></div>
3225
3226---
3227
Cary Clark493df1f2017-08-25 13:14:33 -04003228<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003229## setMaskFilter
3230
Cary Clarka560c472017-11-27 10:44:06 -05003231<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003232void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003233</pre>
3234
Cary Clark6fc50412017-09-21 12:31:06 -04003235Sets <a href="undocumented#Mask_Filter">Mask Filter</a> to <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3236<a href="undocumented#Mask_Filter">Mask Filter</a>. Pass nullptr to clear <a href="undocumented#Mask_Filter">Mask Filter</a> and leave <a href="undocumented#Mask_Filter">Mask Filter</a> effect on
3237<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3238
Cary Clark4c06f5e2017-08-04 12:48:24 -04003239Does not affect <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003240Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003241
3242### Parameters
3243
Cary Clark8cc16c72017-08-25 11:51:49 -04003244<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003245modifies clipping mask generated from drawn geometry</td>
3246 </tr>
3247</table>
3248
3249### Example
3250
3251<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3252
3253---
3254
3255# <a name="Typeface_Methods"></a> Typeface Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003256<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3257<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3258The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003259implementation.
3260
3261### Example
3262
Ben Wagner700ff172017-11-08 15:37:22 -05003263<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003264
Cary Clark493df1f2017-08-25 13:14:33 -04003265<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003266## getTypeface
3267
Cary Clarka560c472017-11-27 10:44:06 -05003268<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003269SkTypeface* getTypeface() const
3270</pre>
3271
Cary Clark4c06f5e2017-08-04 12:48:24 -04003272Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003273Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003274
3275### Return Value
3276
Cary Clark4c06f5e2017-08-04 12:48:24 -04003277<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003278
3279### Example
3280
3281<div><fiddle-embed name="4d9ffb5761b62a9e3bc9b0bca8787bce">
3282
3283#### Example Output
3284
3285~~~~
3286nullptr == typeface
3287nullptr != typeface
3288~~~~
3289
3290</fiddle-embed></div>
3291
3292---
3293
Cary Clark493df1f2017-08-25 13:14:33 -04003294<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003295## refTypeface
3296
Cary Clarka560c472017-11-27 10:44:06 -05003297<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003298sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003299</pre>
3300
Cary Clark4c06f5e2017-08-04 12:48:24 -04003301Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003302
3303### Return Value
3304
Cary Clark4c06f5e2017-08-04 12:48:24 -04003305<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003306
3307### Example
3308
3309<div><fiddle-embed name="c8edce7b36a3ffda8af4fe89d7187dbc">
3310
3311#### Example Output
3312
3313~~~~
3314typeface1 != typeface2
3315typeface1 == typeface2
3316~~~~
3317
3318</fiddle-embed></div>
3319
3320---
3321
Cary Clark493df1f2017-08-25 13:14:33 -04003322<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003323## setTypeface
3324
Cary Clarka560c472017-11-27 10:44:06 -05003325<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003326void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003327</pre>
3328
Cary Clark6fc50412017-09-21 12:31:06 -04003329Sets <a href="undocumented#Typeface">Typeface</a> to <a href="#SkPaint_setTypeface_typeface">typeface</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Typeface">Typeface</a>.
3330Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3331<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003332
3333### Parameters
3334
Cary Clark8cc16c72017-08-25 11:51:49 -04003335<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003336font and style used to draw text</td>
3337 </tr>
3338</table>
3339
3340### Example
3341
3342<div><fiddle-embed name="3d2656ec4c555ed2c7ec086720124a2a"></fiddle-embed></div>
3343
3344---
3345
3346# <a name="Rasterizer_Methods"></a> Rasterizer Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003347<a href="undocumented#Rasterizer">Rasterizer</a> controls how shapes are converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
3348<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>,
3349and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003350
Cary Clark4c06f5e2017-08-04 12:48:24 -04003351<a href="undocumented#Rasterizer">Rasterizer</a> may change the geometry and transparency of the shape, such as
Cary Clark8cc16c72017-08-25 11:51:49 -04003352creating 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 -04003353creates effects like embossing and outlining.
Cary Clark6fc50412017-09-21 12:31:06 -04003354
Cary Clarkbc5697d2017-10-04 14:31:33 -04003355<a href="undocumented#Rasterizer">Rasterizer</a> applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Arc">Arcs</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003356<a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003357
3358### Example
3359
3360<div><fiddle-embed name="e63f8a50996699342a14c6e54d684108"></fiddle-embed></div>
3361
Cary Clark493df1f2017-08-25 13:14:33 -04003362<a name="SkPaint_getRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003363## getRasterizer
3364
Cary Clarka560c472017-11-27 10:44:06 -05003365<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003366SkRasterizer* getRasterizer() const
3367</pre>
3368
Cary Clark4c06f5e2017-08-04 12:48:24 -04003369Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3370Does not alter <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003371
3372### Return Value
3373
Cary Clark4c06f5e2017-08-04 12:48:24 -04003374<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003375
3376### Example
3377
3378<div><fiddle-embed name="0707d407c3a14388b107af8ae5873e55">
3379
3380#### Example Output
3381
3382~~~~
3383nullptr == rasterizer
3384nullptr != rasterizer
3385~~~~
3386
3387</fiddle-embed></div>
3388
3389---
3390
Cary Clark493df1f2017-08-25 13:14:33 -04003391<a name="SkPaint_refRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003392## refRasterizer
3393
Cary Clarka560c472017-11-27 10:44:06 -05003394<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003395sk_sp&lt;SkRasterizer&gt; refRasterizer() const
Cary Clark12799e12017-07-28 15:18:29 -04003396</pre>
3397
Cary Clark4c06f5e2017-08-04 12:48:24 -04003398Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3399Increases <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003400
3401### Return Value
3402
Cary Clark4c06f5e2017-08-04 12:48:24 -04003403<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003404
3405### Example
3406
3407<div><fiddle-embed name="c0855ce19a33cb7e5747750ef341b7b3">
3408
3409#### Example Output
3410
3411~~~~
3412rasterizer unique: true
3413rasterizer unique: false
3414~~~~
3415
3416</fiddle-embed></div>
3417
3418---
3419
Cary Clark493df1f2017-08-25 13:14:33 -04003420<a name="SkPaint_setRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003421## setRasterizer
3422
Cary Clarka560c472017-11-27 10:44:06 -05003423<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003424void setRasterizer(sk_sp&lt;SkRasterizer&gt; rasterizer)
Cary Clark12799e12017-07-28 15:18:29 -04003425</pre>
3426
Cary Clark6fc50412017-09-21 12:31:06 -04003427Sets <a href="undocumented#Rasterizer">Rasterizer</a> to <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3428<a href="undocumented#Rasterizer">Rasterizer</a>. Pass nullptr to clear <a href="undocumented#Rasterizer">Rasterizer</a> and leave <a href="undocumented#Rasterizer">Rasterizer</a> effect on
3429<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3430
Cary Clark4c06f5e2017-08-04 12:48:24 -04003431Does not affect <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003432Increments <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003433
3434### Parameters
3435
Cary Clark8cc16c72017-08-25 11:51:49 -04003436<table> <tr> <td><a name="SkPaint_setRasterizer_rasterizer"> <code><strong>rasterizer </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003437how geometry is converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003438 </tr>
3439</table>
3440
3441### Example
3442
3443<div><fiddle-embed name="aec8ed9296c1628073086a33039f62b7"></fiddle-embed></div>
3444
3445---
3446
3447# <a name="Image_Filter_Methods"></a> Image Filter Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04003448<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3449with <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 -04003450which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003451
Cary Clark4c06f5e2017-08-04 12:48:24 -04003452<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 -04003453can 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 -04003454<a href="undocumented#Image_Filter">Image Filter</a> operates independently of and can be used in combination with
3455<a href="undocumented#Mask_Filter">Mask Filter</a> and <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003456
3457### Example
3458
Cary Clarka560c472017-11-27 10:44:06 -05003459<div><fiddle-embed name="0b2eec148d6397d6231e1fa0b3d1496d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003460
Cary Clark493df1f2017-08-25 13:14:33 -04003461<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003462## getImageFilter
3463
Cary Clarka560c472017-11-27 10:44:06 -05003464<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003465SkImageFilter* getImageFilter() const
3466</pre>
3467
Cary Clark4c06f5e2017-08-04 12:48:24 -04003468Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3469Does 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 -04003470
3471### Return Value
3472
Cary Clark4c06f5e2017-08-04 12:48:24 -04003473<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003474
3475### Example
3476
Cary Clarka560c472017-11-27 10:44:06 -05003477<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003478
3479#### Example Output
3480
3481~~~~
3482nullptr == image filter
3483nullptr != image filter
3484~~~~
3485
3486</fiddle-embed></div>
3487
3488---
3489
Cary Clark493df1f2017-08-25 13:14:33 -04003490<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003491## refImageFilter
3492
Cary Clarka560c472017-11-27 10:44:06 -05003493<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003494sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003495</pre>
3496
Cary Clark4c06f5e2017-08-04 12:48:24 -04003497Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3498Increases <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 -04003499
3500### Return Value
3501
Cary Clark4c06f5e2017-08-04 12:48:24 -04003502<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003503
3504### Example
3505
3506<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3507
3508#### Example Output
3509
3510~~~~
3511image filter unique: true
3512image filter unique: false
3513~~~~
3514
3515</fiddle-embed></div>
3516
3517---
3518
Cary Clark493df1f2017-08-25 13:14:33 -04003519<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003520## setImageFilter
3521
Cary Clarka560c472017-11-27 10:44:06 -05003522<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003523void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003524</pre>
3525
Cary Clark6fc50412017-09-21 12:31:06 -04003526Sets <a href="undocumented#Image_Filter">Image Filter</a> to <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3527<a href="undocumented#Image_Filter">Image Filter</a>. Pass nullptr to clear <a href="undocumented#Image_Filter">Image Filter</a>, and remove <a href="undocumented#Image_Filter">Image Filter</a> effect
Cary Clark12799e12017-07-28 15:18:29 -04003528on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003529
Cary Clark4c06f5e2017-08-04 12:48:24 -04003530Does not affect <a href="undocumented#Rasterizer">Rasterizer</a> or <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003531Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003532
3533### Parameters
3534
Cary Clark8cc16c72017-08-25 11:51:49 -04003535<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003536how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003537 </tr>
3538</table>
3539
3540### Example
3541
3542<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3543
3544---
3545
3546# <a name="Draw_Looper_Methods"></a> Draw Looper Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003547<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 -04003548to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003549
Cary Clark4c06f5e2017-08-04 12:48:24 -04003550<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3551<a href="undocumented#Draw_Looper">Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3552Set <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 -04003553
3554### Example
3555
3556<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3557
Cary Clark493df1f2017-08-25 13:14:33 -04003558<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003559## getDrawLooper
3560
Cary Clarka560c472017-11-27 10:44:06 -05003561<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003562SkDrawLooper* getDrawLooper() const
3563</pre>
3564
Cary Clark4c06f5e2017-08-04 12:48:24 -04003565Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3566Does 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 -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="af4c5acc7a91e7f23c2af48018903ad4">
3575
3576#### Example Output
3577
3578~~~~
3579nullptr == draw looper
3580nullptr != draw looper
3581~~~~
3582
3583</fiddle-embed></div>
3584
3585---
3586
Cary Clark493df1f2017-08-25 13:14:33 -04003587<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003588## refDrawLooper
3589
Cary Clarka560c472017-11-27 10:44:06 -05003590<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003591sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003592</pre>
3593
Cary Clark4c06f5e2017-08-04 12:48:24 -04003594Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3595Increases <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 -04003596
3597### Return Value
3598
Cary Clark4c06f5e2017-08-04 12:48:24 -04003599<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003600
3601### Example
3602
3603<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3604
3605#### Example Output
3606
3607~~~~
3608draw looper unique: true
3609draw looper unique: false
3610~~~~
3611
3612</fiddle-embed></div>
3613
3614---
3615
Cary Clark493df1f2017-08-25 13:14:33 -04003616<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003617## getLooper
3618
Cary Clarka560c472017-11-27 10:44:06 -05003619<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003620SkDrawLooper* getLooper() const
3621</pre>
3622
3623Deprecated.
3624
3625(see bug.skia.org/6259)
3626
3627### Return Value
3628
Cary Clark4c06f5e2017-08-04 12:48:24 -04003629<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003630
3631---
3632
Cary Clark493df1f2017-08-25 13:14:33 -04003633<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003634## setDrawLooper
3635
Cary Clarka560c472017-11-27 10:44:06 -05003636<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003637void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003638</pre>
3639
Cary Clark6fc50412017-09-21 12:31:06 -04003640Sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3641<a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>. Pass nullptr to clear <a href="undocumented#Draw_Looper">Draw Looper</a> and leave <a href="undocumented#Draw_Looper">Draw Looper</a> effect on
3642drawing unaltered.
3643
3644Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003645
3646### Parameters
3647
Cary Clark8cc16c72017-08-25 11:51:49 -04003648<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003649iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003650 </tr>
3651</table>
3652
3653### Example
3654
3655<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3656
3657---
3658
Cary Clark493df1f2017-08-25 13:14:33 -04003659<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003660## setLooper
3661
Cary Clarka560c472017-11-27 10:44:06 -05003662<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003663void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003664</pre>
3665
3666Deprecated.
3667
3668(see bug.skia.org/6259)
3669
3670### Parameters
3671
Cary Clark8cc16c72017-08-25 11:51:49 -04003672<table> <tr> <td><a name="SkPaint_setLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
3673sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setLooper_drawLooper">drawLooper</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003674 </tr>
3675
3676---
3677
3678</table>
3679
3680# <a name="Text_Align"></a> Text Align
3681
Cary Clark8cc16c72017-08-25 11:51:49 -04003682## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003683
Cary Clarka560c472017-11-27 10:44:06 -05003684<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003685enum <a href="#SkPaint_Align">Align</a> {
3686<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3687<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3688<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003689};</pre>
3690
Cary Clark8cc16c72017-08-25 11:51:49 -04003691<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clarkce101242017-09-01 15:51:02 -04003692<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 -04003693<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3694<a href="#SkCanvas_drawTextOnPathHV">SkCanvas::drawTextOnPathHV</a>, <a href="#SkCanvas_drawTextRSXform">SkCanvas::drawTextRSXform</a>, <a href="#SkCanvas_drawTextBlob">SkCanvas::drawTextBlob</a>,
3695and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
Cary Clarkce101242017-09-01 15:51:02 -04003696as 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 -04003697
3698The text position is set by the font for both horizontal and vertical text.
3699Typically, for horizontal text, the position is to the left side of the glyph on the
3700base line; and for vertical text, the position is the horizontal center of the glyph
3701at the caps height.
3702
Cary Clark8cc16c72017-08-25 11:51:49 -04003703<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 -04003704using the metrics returned by the font.
3705
Cary Clark8cc16c72017-08-25 11:51:49 -04003706<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003707
3708### Constants
3709
3710<table>
3711 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003712 <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 -04003713 </tr>
3714 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003715 <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
3716half 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 -04003717 </tr>
3718 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003719 <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,
3720and 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 -04003721 </tr>
3722
3723</table>
3724
Cary Clark8cc16c72017-08-25 11:51:49 -04003725## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003726
Cary Clarka560c472017-11-27 10:44:06 -05003727<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003728enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003729<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003730};</pre>
3731
3732### Constants
3733
3734<table>
3735 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003736 <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 -04003737 </tr>
3738
3739</table>
3740
3741### Example
3742
3743<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3744
3745### Example
3746
Cary Clark8cc16c72017-08-25 11:51:49 -04003747<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 -04003748
Cary Clark493df1f2017-08-25 13:14:33 -04003749<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003750## getTextAlign
3751
Cary Clarka560c472017-11-27 10:44:06 -05003752<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003753Align getTextAlign() const
3754</pre>
3755
Cary Clark8cc16c72017-08-25 11:51:49 -04003756Returns <a href="#Text_Align">Text Align</a>.
3757Returns <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 -04003758
3759### Return Value
3760
3761text placement relative to position
3762
3763### Example
3764
3765<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3766
3767#### Example Output
3768
3769~~~~
3770kLeft_Align == default
3771~~~~
3772
3773</fiddle-embed></div>
3774
3775---
3776
Cary Clark493df1f2017-08-25 13:14:33 -04003777<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003778## setTextAlign
3779
Cary Clarka560c472017-11-27 10:44:06 -05003780<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003781void setTextAlign(Align align)
3782</pre>
3783
Cary Clark8cc16c72017-08-25 11:51:49 -04003784Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3785Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003786
3787### Parameters
3788
Cary Clark8cc16c72017-08-25 11:51:49 -04003789<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003790text placement relative to position</td>
3791 </tr>
3792</table>
3793
3794### Example
3795
Cary Clark4c06f5e2017-08-04 12:48:24 -04003796<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 -04003797alignment out of range has no effect.</div></fiddle-embed></div>
3798
3799---
3800
3801# <a name="Text_Size"></a> Text Size
Cary Clark8cc16c72017-08-25 11:51:49 -04003802<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3803<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3804<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003805Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003806
3807### Example
3808
3809<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3810
Cary Clark493df1f2017-08-25 13:14:33 -04003811<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003812## getTextSize
3813
Cary Clarka560c472017-11-27 10:44:06 -05003814<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003815SkScalar getTextSize() const
3816</pre>
3817
Cary Clark8cc16c72017-08-25 11:51:49 -04003818Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003819
3820### Return Value
3821
3822typographic height of text
3823
3824### Example
3825
3826<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3827
3828---
3829
Cary Clark493df1f2017-08-25 13:14:33 -04003830<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003831## setTextSize
3832
Cary Clarka560c472017-11-27 10:44:06 -05003833<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003834void setTextSize(SkScalar textSize)
3835</pre>
3836
Cary Clark8cc16c72017-08-25 11:51:49 -04003837Sets <a href="#Text_Size">Text Size</a> in points.
3838Has 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 -04003839
3840### Parameters
3841
Cary Clark8cc16c72017-08-25 11:51:49 -04003842<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003843typographic height of text</td>
3844 </tr>
3845</table>
3846
3847### Example
3848
3849<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3850
3851---
3852
3853# <a name="Text_Scale_X"></a> Text Scale X
Cary Clark8cc16c72017-08-25 11:51:49 -04003854<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003855<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003856is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003857<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3858<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003859
3860### Example
3861
3862<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3863
Cary Clark493df1f2017-08-25 13:14:33 -04003864<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003865## getTextScaleX
3866
Cary Clarka560c472017-11-27 10:44:06 -05003867<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003868SkScalar getTextScaleX() const
3869</pre>
3870
Cary Clark8cc16c72017-08-25 11:51:49 -04003871Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003872Default value is 1.
3873
3874### Return Value
3875
3876text horizontal scale
3877
3878### Example
3879
3880<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3881
3882---
3883
Cary Clark493df1f2017-08-25 13:14:33 -04003884<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003885## setTextScaleX
3886
Cary Clarka560c472017-11-27 10:44:06 -05003887<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003888void setTextScaleX(SkScalar scaleX)
3889</pre>
3890
Cary Clark8cc16c72017-08-25 11:51:49 -04003891Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003892Default value is 1.
3893
3894### Parameters
3895
Cary Clark8cc16c72017-08-25 11:51:49 -04003896<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003897text horizontal scale</td>
3898 </tr>
3899</table>
3900
3901### Example
3902
3903<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3904
3905---
3906
3907# <a name="Text_Skew_X"></a> Text Skew X
Cary Clark8cc16c72017-08-25 11:51:49 -04003908<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003909<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003910is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003911<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3912<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003913
3914### Example
3915
3916<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3917
Cary Clark493df1f2017-08-25 13:14:33 -04003918<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003919## getTextSkewX
3920
Cary Clarka560c472017-11-27 10:44:06 -05003921<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003922SkScalar getTextSkewX() const
3923</pre>
3924
Cary Clark8cc16c72017-08-25 11:51:49 -04003925Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003926Default value is zero.
3927
3928### Return Value
3929
3930additional shear in x-axis relative to y-axis
3931
3932### Example
3933
3934<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3935
3936---
3937
Cary Clark493df1f2017-08-25 13:14:33 -04003938<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003939## setTextSkewX
3940
Cary Clarka560c472017-11-27 10:44:06 -05003941<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003942void setTextSkewX(SkScalar skewX)
3943</pre>
3944
Cary Clark8cc16c72017-08-25 11:51:49 -04003945Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003946Default value is zero.
3947
3948### Parameters
3949
Cary Clark8cc16c72017-08-25 11:51:49 -04003950<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003951additional shear in x-axis relative to y-axis</td>
3952 </tr>
3953</table>
3954
3955### Example
3956
3957<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3958
3959---
3960
3961# <a name="Text_Encoding"></a> Text Encoding
3962
Cary Clark8cc16c72017-08-25 11:51:49 -04003963## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003964
Cary Clarka560c472017-11-27 10:44:06 -05003965<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003966enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3967<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3968<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3969<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3970<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003971};</pre>
3972
Cary Clark6fc50412017-09-21 12:31:06 -04003973<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clarkbc5697d2017-10-04 14:31:33 -04003974size, or glyph indices. Characters are encoded as specified by the<a href="undocumented#Unicode">Unicode</a> standard.
Cary Clark6fc50412017-09-21 12:31:06 -04003975
Cary Clarka560c472017-11-27 10:44:06 -05003976Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clarkbc5697d2017-10-04 14:31:33 -04003977All character code formats are able to represent all of <a href="undocumented#Unicode">Unicode</a>, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003978in the total storage required.
3979
Cary Clarka560c472017-11-27 10:44:06 -05003980UTF-8 (<a href="undocumented#RFC">RFC</a> 3629)encodes each character as one or more 8-bit bytes.
Cary Clark6fc50412017-09-21 12:31:06 -04003981
Cary Clarka560c472017-11-27 10:44:06 -05003982UTF-16 (<a href="undocumented#RFC">RFC</a> 2781)encodes each character as one or two 16-bit words.
Cary Clark6fc50412017-09-21 12:31:06 -04003983
Cary Clarka560c472017-11-27 10:44:06 -05003984UTF-32encodes each character as one 32-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003985
Cary Clark4c06f5e2017-08-04 12:48:24 -04003986<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 -04003987A glyph index is a 16-bit word.
3988
Cary Clark8cc16c72017-08-25 11:51:49 -04003989<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 -04003990
3991### Constants
3992
3993<table>
3994 <tr>
Cary Clarka560c472017-11-27 10:44:06 -05003995 <td><a name="SkPaint_kUTF8_TextEncoding"> <code><strong>SkPaint::kUTF8_TextEncoding </strong></code> </a></td><td>0</td><td>Uses bytes to represent UTF-8 or <a href="undocumented#ASCII">ASCII</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003996 </tr>
3997 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003998 <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 -04003999 </tr>
4000 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004001 <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 -04004002 </tr>
4003 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004004 <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 -04004005 </tr>
4006
4007</table>
4008
4009### Example
4010
Cary Clarka560c472017-11-27 10:44:06 -05004011<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4012Second line is encoded in UTF-16.
4013Third line is encoded in UTF-32.
Cary Clark12799e12017-07-28 15:18:29 -04004014Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
4015
Cary Clark493df1f2017-08-25 13:14:33 -04004016<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004017## getTextEncoding
4018
Cary Clarka560c472017-11-27 10:44:06 -05004019<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004020TextEncoding getTextEncoding() const
4021</pre>
4022
Cary Clark8cc16c72017-08-25 11:51:49 -04004023Returns <a href="#Text_Encoding">Text Encoding</a>.
4024<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 -04004025
4026### Return Value
4027
Cary Clark8cc16c72017-08-25 11:51:49 -04004028one 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
4029<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004030
4031### Example
4032
4033<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
4034
4035#### Example Output
4036
4037~~~~
4038kUTF8_TextEncoding == text encoding
4039kGlyphID_TextEncoding == text encoding
4040~~~~
4041
4042</fiddle-embed></div>
4043
4044---
4045
Cary Clark493df1f2017-08-25 13:14:33 -04004046<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004047## setTextEncoding
4048
Cary Clarka560c472017-11-27 10:44:06 -05004049<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004050void setTextEncoding(TextEncoding encoding)
4051</pre>
4052
Cary Clark8cc16c72017-08-25 11:51:49 -04004053Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
4054<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
4055Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004056
4057### Parameters
4058
Cary Clark8cc16c72017-08-25 11:51:49 -04004059<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
4060one 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
4061<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004062 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004063#
4064
Cary Clark12799e12017-07-28 15:18:29 -04004065</table>
4066
4067### Example
4068
4069<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
4070
4071#### Example Output
4072
4073~~~~
40744 != text encoding
4075~~~~
4076
4077</fiddle-embed></div>
4078
4079---
4080
4081# <a name="Font_Metrics"></a> Font Metrics
Cary Clarkce101242017-09-01 15:51:02 -04004082<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 -04004083The 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 -04004084<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004085
Cary Clark4c06f5e2017-08-04 12:48:24 -04004086<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 -04004087X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4088are positive.
4089Y-axis values above the baseline are negative, and below the baseline are positive.
4090
4091### Example
4092
Ben Wagnere5806492017-11-09 12:08:31 -05004093<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004094
Cary Clark8cc16c72017-08-25 11:51:49 -04004095# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04004096
Cary Clarka560c472017-11-27 10:44:06 -05004097<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004098struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4099enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4100<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4101<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4102<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4103<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004104};
4105
Cary Clark8cc16c72017-08-25 11:51:49 -04004106uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4107<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4108<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4109<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4110<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4111<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4112<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4113<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4114<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4115<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4116<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4117<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4118<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4119<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4120<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4121<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004122
Cary Clark8cc16c72017-08-25 11:51:49 -04004123bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4124bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4125bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4126bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004127};</pre>
4128
Cary Clark154beea2017-10-26 07:58:48 -04004129<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
4130computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4131not available.
4132
Ben Wagnere5806492017-11-09 12:08:31 -05004133All vertical values relative to the baseline are given y-down. As such, zero is on the
4134baseline, negative values are above the baseline, and positive values are below the
4135baseline.
4136
Cary Clark154beea2017-10-26 07:58:48 -04004137<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
4138are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004139
Cary Clark154beea2017-10-26 07:58:48 -04004140<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
4141are valid, since their value may be zero.
4142
Cary Clark8cc16c72017-08-25 11:51:49 -04004143## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004144
Cary Clarka560c472017-11-27 10:44:06 -05004145<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004146enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4147<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4148<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4149<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4150<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004151};</pre>
4152
Cary Clark154beea2017-10-26 07:58:48 -04004153<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4154the underline or strikeout metric may be valid and zero.
4155Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4156
Cary Clark12799e12017-07-28 15:18:29 -04004157### Constants
4158
4159<table>
4160 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004161 <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 -04004162 </tr>
4163 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004164 <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 -04004165 </tr>
4166 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004167 <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 -04004168 </tr>
4169 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004170 <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 -04004171 </tr>
4172
4173</table>
4174
Cary Clark8cc16c72017-08-25 11:51:49 -04004175<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004176
Cary Clark8cc16c72017-08-25 11:51:49 -04004177<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004178
Cary Clark8cc16c72017-08-25 11:51:49 -04004179<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004180
Ben Wagnere5806492017-11-09 12:08:31 -05004181Greatest extent above the baseline for any glyph.
4182Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004183
Cary Clark8cc16c72017-08-25 11:51:49 -04004184<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004185
4186Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004187Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004188
Cary Clark8cc16c72017-08-25 11:51:49 -04004189<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004190
4191Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004192Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004193
Cary Clark8cc16c72017-08-25 11:51:49 -04004194<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004195
Ben Wagnere5806492017-11-09 12:08:31 -05004196Greatest extent below the baseline for any glyph.
4197Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004198
Cary Clark8cc16c72017-08-25 11:51:49 -04004199<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004200
4201Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004202Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004203
Cary Clark8cc16c72017-08-25 11:51:49 -04004204<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004205
4206Average character width, if it is available.
4207Zero if no average width is stored in the font.
4208
Cary Clark8cc16c72017-08-25 11:51:49 -04004209<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004210
4211Maximum character width.
4212
Cary Clark8cc16c72017-08-25 11:51:49 -04004213<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004214
Ben Wagnere5806492017-11-09 12:08:31 -05004215Minimum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004216Typically less than zero.
4217
Cary Clark8cc16c72017-08-25 11:51:49 -04004218<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004219
Cary Clarkce101242017-09-01 15:51:02 -04004220Maximum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004221Typically greater than zero.
4222
Cary Clark8cc16c72017-08-25 11:51:49 -04004223<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004224
4225Height of a lower-case 'x'.
4226May be zero if no lower-case height is stored in the font.
4227
Cary Clark8cc16c72017-08-25 11:51:49 -04004228<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004229
4230Height of an upper-case letter.
4231May be zero if no upper-case height is stored in the font.
4232
Cary Clark8cc16c72017-08-25 11:51:49 -04004233<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004234
Ben Wagnere5806492017-11-09 12:08:31 -05004235Underline thickness.
4236
4237If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004238If <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 -04004239
Cary Clark8cc16c72017-08-25 11:51:49 -04004240<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004241
Ben Wagnere5806492017-11-09 12:08:31 -05004242Position of the top of the underline stroke relative to the baseline.
4243Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004244
Cary Clark8cc16c72017-08-25 11:51:49 -04004245If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4246If <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 -04004247
Cary Clark8cc16c72017-08-25 11:51:49 -04004248<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004249
Ben Wagnere5806492017-11-09 12:08:31 -05004250Strikeout thickness.
4251
4252If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004253If <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 -04004254
Cary Clark8cc16c72017-08-25 11:51:49 -04004255<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004256
Ben Wagnere5806492017-11-09 12:08:31 -05004257Position of the bottom of the strikeout stroke relative to the baseline.
4258Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004259
Cary Clark8cc16c72017-08-25 11:51:49 -04004260If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4261If <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 -04004262
Cary Clark493df1f2017-08-25 13:14:33 -04004263<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004264## hasUnderlineThickness
4265
Cary Clarka560c472017-11-27 10:44:06 -05004266<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004267bool hasUnderlineThickness(SkScalar* thickness) const
4268</pre>
4269
Ben Wagnere5806492017-11-09 12:08:31 -05004270If <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 -04004271<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,
4272return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004273
4274### Parameters
4275
Cary Clark8cc16c72017-08-25 11:51:49 -04004276<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004277storage for underline width</td>
4278 </tr>
4279</table>
4280
4281### Return Value
4282
4283true if font specifies underline width
4284
4285---
4286
Cary Clark493df1f2017-08-25 13:14:33 -04004287<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004288## hasUnderlinePosition
4289
Cary Clarka560c472017-11-27 10:44:06 -05004290<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004291bool hasUnderlinePosition(SkScalar* position) const
4292</pre>
4293
Ben Wagnere5806492017-11-09 12:08:31 -05004294If <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 -04004295<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,
4296return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004297
4298### Parameters
4299
Cary Clark8cc16c72017-08-25 11:51:49 -04004300<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4301storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004302 </tr>
4303</table>
4304
4305### Return Value
4306
Cary Clark8cc16c72017-08-25 11:51:49 -04004307true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004308
4309---
4310
Cary Clark493df1f2017-08-25 13:14:33 -04004311<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004312## hasStrikeoutThickness
4313
Cary Clarka560c472017-11-27 10:44:06 -05004314<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004315bool hasStrikeoutThickness(SkScalar* thickness) const
4316</pre>
4317
Ben Wagnere5806492017-11-09 12:08:31 -05004318If <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 -04004319<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,
4320return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004321
4322### Parameters
4323
Cary Clark8cc16c72017-08-25 11:51:49 -04004324<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004325storage for strikeout width</td>
4326 </tr>
4327</table>
4328
4329### Return Value
4330
4331true if font specifies strikeout width
4332
4333---
4334
Cary Clark493df1f2017-08-25 13:14:33 -04004335<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004336## hasStrikeoutPosition
4337
Cary Clarka560c472017-11-27 10:44:06 -05004338<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004339bool hasStrikeoutPosition(SkScalar* position) const
4340</pre>
4341
Ben Wagnere5806492017-11-09 12:08:31 -05004342If <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 -04004343<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,
4344return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004345
4346### Parameters
4347
Cary Clark8cc16c72017-08-25 11:51:49 -04004348<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4349storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004350 </tr>
4351</table>
4352
4353### Return Value
4354
Cary Clark8cc16c72017-08-25 11:51:49 -04004355true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004356
4357---
4358
Cary Clark493df1f2017-08-25 13:14:33 -04004359<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004360## getFontMetrics
4361
Cary Clarka560c472017-11-27 10:44:06 -05004362<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004363SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4364</pre>
4365
Cary Clark8cc16c72017-08-25 11:51:49 -04004366Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4367The 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 -04004368descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004369If <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>.
4370Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4371dimensions 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>,
4372<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4373Results 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 -04004374is ignored.
4375
4376### Parameters
4377
Cary Clark8cc16c72017-08-25 11:51:49 -04004378<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4379storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4380 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004381additional multiplier for returned values</td>
4382 </tr>
4383</table>
4384
4385### Return Value
4386
4387recommended spacing between lines
4388
4389### Example
4390
4391<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4392
4393### See Also
4394
Cary Clark8cc16c72017-08-25 11:51:49 -04004395<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 -04004396
4397---
4398
Cary Clark493df1f2017-08-25 13:14:33 -04004399<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004400## getFontSpacing
4401
Cary Clarka560c472017-11-27 10:44:06 -05004402<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004403SkScalar getFontSpacing() const
4404</pre>
4405
4406Returns the recommended spacing between lines: the sum of metrics
4407descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004408Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004409dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004410Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004411
4412### Return Value
4413
4414recommended spacing between lines
4415
4416### Example
4417
4418<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4419
4420#### Example Output
4421
4422~~~~
4423textSize: 12 fontSpacing: 13.9688
4424textSize: 18 fontSpacing: 20.9531
4425textSize: 24 fontSpacing: 27.9375
4426textSize: 32 fontSpacing: 37.25
4427~~~~
4428
4429</fiddle-embed></div>
4430
4431---
4432
Cary Clark493df1f2017-08-25 13:14:33 -04004433<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004434## getFontBounds
4435
Cary Clarka560c472017-11-27 10:44:06 -05004436<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004437SkRect getFontBounds() const
4438</pre>
4439
Cary Clarkce101242017-09-01 15:51:02 -04004440Returns the union of bounds of all <a href="#Glyph">Glyphs</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004441Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004442ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4443and <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 -04004444
Cary Clark8cc16c72017-08-25 11:51:49 -04004445If <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,
4446returns the same bounds as <a href="#Font_Metrics">Font Metrics</a> { <a href="#SkPaint_FontMetrics_fXMin">FontMetrics::fXMin</a>,
4447<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 -04004448
4449### Return Value
4450
Cary Clarkce101242017-09-01 15:51:02 -04004451union of bounds of all <a href="#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004452
4453### Example
4454
4455<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4456
4457#### Example Output
4458
4459~~~~
4460metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4461font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4462~~~~
4463
4464</fiddle-embed></div>
4465
4466---
4467
Cary Clark493df1f2017-08-25 13:14:33 -04004468<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004469## textToGlyphs
4470
Cary Clarka560c472017-11-27 10:44:06 -05004471<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004472int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4473</pre>
4474
Cary Clark8cc16c72017-08-25 11:51:49 -04004475Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4476Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4477<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>.
4478<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004479
Cary Clarkbc5697d2017-10-04 14:31:33 -04004480Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004481
Cary Clark8cc16c72017-08-25 11:51:49 -04004482If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4483If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004484
Cary Clark8cc16c72017-08-25 11:51:49 -04004485If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004486<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
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_textToGlyphs_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_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004493length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004494 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004495storage for glyph indices; may be nullptr</td>
4496 </tr>
4497</table>
4498
4499### Return Value
4500
Cary Clark8cc16c72017-08-25 11:51:49 -04004501number 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 -04004502
4503### Example
4504
4505<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4506
4507---
4508
Cary Clark493df1f2017-08-25 13:14:33 -04004509<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004510## countText
4511
Cary Clarka560c472017-11-27 10:44:06 -05004512<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004513int countText(const void* text, size_t byteLength) const
4514</pre>
4515
Cary Clarkce101242017-09-01 15:51:02 -04004516Returns the number of <a href="#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4517Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004518Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004519
4520### Parameters
4521
Cary Clark8cc16c72017-08-25 11:51:49 -04004522<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004523character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004524 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004525length of character storage in bytes</td>
4526 </tr>
4527</table>
4528
4529### Return Value
4530
Cary Clarkce101242017-09-01 15:51:02 -04004531number 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 -04004532
4533### Example
4534
4535<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4536
4537#### Example Output
4538
4539~~~~
4540count = 5
4541~~~~
4542
4543</fiddle-embed></div>
4544
4545---
4546
Cary Clark493df1f2017-08-25 13:14:33 -04004547<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004548## containsText
4549
Cary Clarka560c472017-11-27 10:44:06 -05004550<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004551bool containsText(const void* text, size_t byteLength) const
4552</pre>
4553
Cary Clark8cc16c72017-08-25 11:51:49 -04004554Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
4555Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004556<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004557
Cary Clark8cc16c72017-08-25 11:51:49 -04004558If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4559returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4560does 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 -04004561
Cary Clarkce101242017-09-01 15:51:02 -04004562Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004563
4564### Parameters
4565
Cary Clark8cc16c72017-08-25 11:51:49 -04004566<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004567array of characters or <a href="#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004568 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4569number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004570 </tr>
4571</table>
4572
4573### Return Value
4574
Cary Clark8cc16c72017-08-25 11:51:49 -04004575true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004576
4577### Example
4578
Cary Clark8cc16c72017-08-25 11:51:49 -04004579<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 -04004580corresponding to the <a href="undocumented#Unicode">Unicode</a> surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004581
4582#### Example Output
4583
4584~~~~
45850x00b0 == has char
45860xd800 != has char
4587~~~~
4588
4589</fiddle-embed></div>
4590
4591### Example
4592
Cary Clark8cc16c72017-08-25 11:51:49 -04004593<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 -04004594that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004595
4596#### Example Output
4597
4598~~~~
45990x01ff == has glyph
46000x0000 != has glyph
46010xffff == has glyph
4602~~~~
4603
4604</fiddle-embed></div>
4605
4606### See Also
4607
Cary Clark8cc16c72017-08-25 11:51:49 -04004608<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004609
4610---
4611
Cary Clark493df1f2017-08-25 13:14:33 -04004612<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004613## glyphsToUnichars
4614
Cary Clarka560c472017-11-27 10:44:06 -05004615<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004616void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4617</pre>
4618
Cary Clark8cc16c72017-08-25 11:51:49 -04004619Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004620<a href="undocumented#Glyph">Glyph</a> values without direct <a href="undocumented#Unicode">Unicode</a> equivalents are mapped to zero.
4621Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004622by <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 -04004623
Cary Clark8cc16c72017-08-25 11:51:49 -04004624Only 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 -04004625
4626### Parameters
4627
Cary Clark8cc16c72017-08-25 11:51:49 -04004628<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004629array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004630 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004631length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004632 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004633storage for character codes, one per glyph</td>
4634 </tr>
4635</table>
4636
4637### Example
4638
Cary Clarka560c472017-11-27 10:44:06 -05004639<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert UTF-8 <a href="#SkPaint_glyphsToUnichars_text">text</a> to <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a>; then convert <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> to <a href="undocumented#Unichar">Unichar</a> code points.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004640
4641---
4642
4643# <a name="Measure_Text"></a> Measure Text
4644
Cary Clark493df1f2017-08-25 13:14:33 -04004645<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004646## measureText
4647
Cary Clarka560c472017-11-27 10:44:06 -05004648<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004649SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4650</pre>
4651
Cary Clark8cc16c72017-08-25 11:51:49 -04004652Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4653and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4654The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4655Uses <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,
4656and <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
4657<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4658Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4659The 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 -04004660
4661### Parameters
4662
Cary Clark8cc16c72017-08-25 11:51:49 -04004663<table> <tr> <td><a name="SkPaint_measureText_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_length"> <code><strong>length </strong></code> </a></td> <td>
4666number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4667 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004668returns bounding box relative to (0, 0) if not nullptr</td>
4669 </tr>
4670</table>
4671
4672### Return Value
4673
4674advance width or height
4675
4676### Example
4677
4678<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4679
4680---
4681
Cary Clarka560c472017-11-27 10:44:06 -05004682<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004683SkScalar measureText(const void* text, size_t length) const
4684</pre>
4685
Cary Clark8cc16c72017-08-25 11:51:49 -04004686Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4687and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4688The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4689Uses <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,
4690and <a href="#Text_Size">Text Size</a> to scale the metrics.
4691Does 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 -04004692
4693### Parameters
4694
Cary Clark8cc16c72017-08-25 11:51:49 -04004695<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004696character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004697 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4698number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004699 </tr>
4700</table>
4701
4702### Return Value
4703
4704advance width or height
4705
4706### Example
4707
4708<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4709
4710#### Example Output
4711
4712~~~~
4713default width = 5
4714double width = 10
4715~~~~
4716
4717</fiddle-embed></div>
4718
4719---
4720
Cary Clark493df1f2017-08-25 13:14:33 -04004721<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004722## breakText
4723
Cary Clarka560c472017-11-27 10:44:06 -05004724<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004725size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004726 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004727</pre>
4728
Cary Clark8cc16c72017-08-25 11:51:49 -04004729Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4730If <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
4731equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4732If <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
4733equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4734Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4735Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4736Uses <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,
4737and <a href="#Text_Size">Text Size</a> to scale the metrics.
4738Does 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 -04004739
4740### Parameters
4741
Cary Clark8cc16c72017-08-25 11:51:49 -04004742<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004743character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004744 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4745number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4746 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4747advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4748 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4749returns 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 -04004750 </tr>
4751</table>
4752
4753### Return Value
4754
Cary Clark8cc16c72017-08-25 11:51:49 -04004755bytes 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 -04004756
4757### Example
4758
Cary Clark4c06f5e2017-08-04 12:48:24 -04004759<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 -04004760<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 -04004761
4762---
4763
Cary Clark493df1f2017-08-25 13:14:33 -04004764<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004765## getTextWidths
4766
Cary Clarka560c472017-11-27 10:44:06 -05004767<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4768int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004769</pre>
4770
Cary Clark8cc16c72017-08-25 11:51:49 -04004771Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4772the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4773Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4774If <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.
4775if <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.
4776If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4777If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4778Uses <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,
4779and <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>.
4780Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4781Does 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 -04004782
4783### Parameters
4784
Cary Clark8cc16c72017-08-25 11:51:49 -04004785<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004786character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004787 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4788number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4789 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4790returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4791 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4792returns <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 -04004793 </tr>
4794</table>
4795
4796### Return Value
4797
Cary Clark8cc16c72017-08-25 11:51:49 -04004798glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004799
4800### Example
4801
Cary Clarkce101242017-09-01 15:51:02 -04004802<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 -04004803The 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 -04004804
4805---
4806
4807# <a name="Text_Path"></a> Text Path
Cary Clarkce101242017-09-01 15:51:02 -04004808<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 -04004809
Cary Clark493df1f2017-08-25 13:14:33 -04004810<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004811## getTextPath
4812
Cary Clarka560c472017-11-27 10:44:06 -05004813<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4814void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004815</pre>
4816
Cary Clark8cc16c72017-08-25 11:51:49 -04004817Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4818Uses <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,
4819and <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.
4820All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4821Uses <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 -04004822
4823### Parameters
4824
Cary Clark8cc16c72017-08-25 11:51:49 -04004825<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004826character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004827 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4828number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4829 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004830<a href="#SkPaint_getTextPath_x">x</a>-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004831 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004832<a href="#SkPaint_getTextPath_y">y</a>-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004833 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004834geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004835 </tr>
4836</table>
4837
4838### Example
4839
Cary Clark4c06f5e2017-08-04 12:48:24 -04004840<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 -04004841the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4842
4843---
4844
Cary Clark493df1f2017-08-25 13:14:33 -04004845<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004846## getPosTextPath
4847
Cary Clarka560c472017-11-27 10:44:06 -05004848<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4849void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004850</pre>
4851
Cary Clark8cc16c72017-08-25 11:51:49 -04004852Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4853Uses <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,
4854and <a href="#Text_Size">Text Size</a>, <a href="#Fake_Bold">Fake Bold</a>, and <a href="undocumented#Path_Effect">Path Effect</a> to scale and modify the glyph paths.
4855All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4856Uses <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>.
4857<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004858
4859### Parameters
4860
Cary Clark8cc16c72017-08-25 11:51:49 -04004861<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004862character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004863 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4864number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4865 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004866positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004867 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004868geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004869 </tr>
4870</table>
4871
4872### Example
4873
Cary Clarkce101242017-09-01 15:51:02 -04004874<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 -04004875
4876---
4877
4878# <a name="Text_Intercepts"></a> Text Intercepts
Cary Clarkce101242017-09-01 15:51:02 -04004879<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 -04004880of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clarkce101242017-09-01 15:51:02 -04004881underline that skips <a href="undocumented#Descenders">Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004882
Cary Clark493df1f2017-08-25 13:14:33 -04004883<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004884## getTextIntercepts
4885
Cary Clarka560c472017-11-27 10:44:06 -05004886<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004887int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4888 const SkScalar bounds[2], SkScalar* intervals) const
4889</pre>
4890
Cary Clark8cc16c72017-08-25 11:51:49 -04004891Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4892<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 -04004893The 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 -04004894the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004895Uses <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,
4896and <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.
4897Uses <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>.
4898Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4899<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004900
4901### Parameters
4902
Cary Clark8cc16c72017-08-25 11:51:49 -04004903<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004904character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004905 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4906number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4907 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004908<a href="#SkPaint_getTextIntercepts_x">x</a>-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004909 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004910<a href="#SkPaint_getTextIntercepts_y">y</a>-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004911 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004912lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004913 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004914returned intersections; may be nullptr</td>
4915 </tr>
4916</table>
4917
4918### Return Value
4919
4920number of intersections; may be zero
4921
4922### Example
4923
Cary Clarkce101242017-09-01 15:51:02 -04004924<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 -04004925
4926---
4927
Cary Clark493df1f2017-08-25 13:14:33 -04004928<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004929## getPosTextIntercepts
4930
Cary Clarka560c472017-11-27 10:44:06 -05004931<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004932int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4933 const SkScalar bounds[2], SkScalar* intervals) const
4934</pre>
4935
Cary Clark8cc16c72017-08-25 11:51:49 -04004936Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4937<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 -04004938The 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 -04004939the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004940Uses <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,
4941and <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.
4942Uses <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>.
4943Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4944<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004945
4946### Parameters
4947
Cary Clark8cc16c72017-08-25 11:51:49 -04004948<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004949character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004950 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4951number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4952 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004953positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004954 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004955lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004956 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004957returned intersections; may be nullptr</td>
4958 </tr>
4959</table>
4960
4961### Return Value
4962
Cary Clarka523d2d2017-08-30 08:58:10 -04004963number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004964
4965### Example
4966
Cary Clarkce101242017-09-01 15:51:02 -04004967<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 -04004968
4969---
4970
Cary Clark493df1f2017-08-25 13:14:33 -04004971<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004972## getPosTextHIntercepts
4973
Cary Clarka560c472017-11-27 10:44:06 -05004974<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4975int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4976 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004977</pre>
4978
Cary Clark8cc16c72017-08-25 11:51:49 -04004979Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4980<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 -04004981The 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 -04004982the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004983Uses <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,
4984and <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.
4985Uses <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>.
4986Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4987<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004988
4989### Parameters
4990
Cary Clark8cc16c72017-08-25 11:51:49 -04004991<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004992character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004993 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4994number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4995 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004996positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004997 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004998position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004999 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005000lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005001 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005002returned intersections; may be nullptr</td>
5003 </tr>
5004</table>
5005
5006### Return Value
5007
5008number of intersections; may be zero
5009
5010### Example
5011
Cary Clark4c06f5e2017-08-04 12:48:24 -04005012<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 -04005013
5014---
5015
Cary Clark493df1f2017-08-25 13:14:33 -04005016<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005017## getTextBlobIntercepts
5018
Cary Clarka560c472017-11-27 10:44:06 -05005019<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5020int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005021</pre>
5022
Cary Clark8cc16c72017-08-25 11:51:49 -04005023Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
5024<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clarkce101242017-09-01 15:51:02 -04005025The 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 -04005026the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04005027Uses <a href="#Text_Encoding">Text Encoding</a> to decode text, <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
5028and <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 -04005029Uses 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 -04005030Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
5031<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005032
5033### Parameters
5034
Cary Clark8cc16c72017-08-25 11:51:49 -04005035<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005036<a href="#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005037 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005038lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005039 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005040returned intersections; may be nullptr</td>
5041 </tr>
5042</table>
5043
5044### Return Value
5045
5046number of intersections; may be zero
5047
5048### Example
5049
5050<div><fiddle-embed name="4961b05f4f26cf270ab4948a57876341"></fiddle-embed></div>
5051
5052---
5053
Cary Clark493df1f2017-08-25 13:14:33 -04005054<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005055## nothingToDraw
5056
Cary Clarka560c472017-11-27 10:44:06 -05005057<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005058bool nothingToDraw() const
5059</pre>
5060
Cary Clark8cc16c72017-08-25 11:51:49 -04005061Returns true if <a href="#Paint">Paint</a> prevents all drawing;
5062otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005063
Cary Clarkce101242017-09-01 15:51:02 -04005064Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="#Alpha">Color Alpha</a> computes a
5065new <a href="#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005066
5067### Return Value
5068
Cary Clark8cc16c72017-08-25 11:51:49 -04005069true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005070
5071### Example
5072
5073<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
5074
5075#### Example Output
5076
5077~~~~
5078initial nothing to draw: false
5079blend dst nothing to draw: true
5080blend src over nothing to draw: false
5081alpha 0 nothing to draw: true
5082~~~~
5083
5084</fiddle-embed></div>
5085
5086---
5087
5088# <a name="Fast_Bounds"></a> Fast Bounds
Cary Clark8cc16c72017-08-25 11:51:49 -04005089<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5090<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005091
Cary Clark493df1f2017-08-25 13:14:33 -04005092<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005093## canComputeFastBounds
5094
Cary Clarka560c472017-11-27 10:44:06 -05005095<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005096bool canComputeFastBounds() const
5097</pre>
5098
Cary Clark8cc16c72017-08-25 11:51:49 -04005099Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5100to 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 -04005101always returns false.
5102
5103### Return Value
5104
Cary Clark8cc16c72017-08-25 11:51:49 -04005105true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005106
5107---
5108
Cary Clark493df1f2017-08-25 13:14:33 -04005109<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005110## computeFastBounds
5111
Cary Clarka560c472017-11-27 10:44:06 -05005112<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005113const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5114</pre>
5115
Cary Clark8cc16c72017-08-25 11:51:49 -04005116Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005117raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005118effects 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 -04005119parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005120for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005121
Cary Clarkbc5697d2017-10-04 14:31:33 -04005122The returned <a href="SkRect_Reference#Rect">Rect</a> will either be <a href="#SkPaint_computeFastBounds_orig">orig</a> or <a href="#SkPaint_computeFastBounds_storage">storage</a>, thus the caller
Cary Clark8cc16c72017-08-25 11:51:49 -04005123should 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 -04005124use the returned value. It is legal for <a href="#SkPaint_computeFastBounds_orig">orig</a> and <a href="#SkPaint_computeFastBounds_storage">storage</a> to be the same
Cary Clarkbc5697d2017-10-04 14:31:33 -04005125<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005126
5127### Parameters
5128
Cary Clark8cc16c72017-08-25 11:51:49 -04005129<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5130geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5131 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005132computed bounds of geometry; may not be nullptr</td>
5133 </tr>
5134</table>
5135
5136### Return Value
5137
5138fast computed bounds
5139
5140---
5141
Cary Clark493df1f2017-08-25 13:14:33 -04005142<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005143## computeFastStrokeBounds
5144
Cary Clarka560c472017-11-27 10:44:06 -05005145<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005146const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5147</pre>
5148
5149### Parameters
5150
Cary Clark8cc16c72017-08-25 11:51:49 -04005151<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_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_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005154computed bounds of geometry</td>
5155 </tr>
5156</table>
5157
5158### Return Value
5159
5160fast computed bounds
5161
5162---
5163
Cary Clark493df1f2017-08-25 13:14:33 -04005164<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005165## doComputeFastBounds
5166
Cary Clarka560c472017-11-27 10:44:06 -05005167<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5168const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005169</pre>
5170
Cary Clarkce101242017-09-01 15:51:02 -04005171Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5172account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5173altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005174
5175### Parameters
5176
Cary Clark8cc16c72017-08-25 11:51:49 -04005177<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5178geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5179 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005180computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005181 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5182overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005183 </tr>
5184</table>
5185
5186### Return Value
5187
5188fast computed bounds
5189
5190---
5191
Cary Clark493df1f2017-08-25 13:14:33 -04005192<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005193## toString
5194
Cary Clarka560c472017-11-27 10:44:06 -05005195<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005196void toString(SkString* str) const;
5197</pre>
5198
Cary Clarkce101242017-09-01 15:51:02 -04005199Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5200internal debugging tools. The interface and implementation may be
5201suppressed by defining <a href="undocumented#SK_IGNORE_TO_STRING">SK IGNORE TO STRING</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005202
5203### Parameters
5204
Cary Clark8cc16c72017-08-25 11:51:49 -04005205<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005206storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005207 </tr>
5208</table>
5209
5210### Example
5211
5212<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5213
5214#### Example Output
5215
5216~~~~
5217text size = 12
5218~~~~
5219
5220</fiddle-embed></div>
5221
Cary Clark2ade9972017-11-02 17:49:34 -04005222### See Also
5223
5224<a href="#SkPathEffect_toString">SkPathEffect::toString</a> <a href="#SkMaskFilter_toString">SkMaskFilter::toString</a> <a href="#SkColorFilter_toString">SkColorFilter::toString</a> <a href="#SkImageFilter_toString">SkImageFilter::toString</a>
5225
Cary Clark12799e12017-07-28 15:18:29 -04005226---
5227