blob: 689554bb35f1c22b125163b374ab549b975f6ea3 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
Cary Clarka90ea222018-10-16 10:30:28 -04004
Cary Clark61313f32018-10-08 14:57:48 -04005<a name='SkPaint'></a>
Cary Clarke4aa3712017-09-15 02:56:12 -04006
Cary Clarka90ea222018-10-16 10:30:28 -04007---
8
Cary Clark61313f32018-10-08 14:57:48 -04009<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -050010class <a href='SkPaint_Reference#SkPaint'>SkPaint</a> {
Cary Clarkcb6bef02018-11-29 12:05:25 -050011
Cary Clark61313f32018-10-08 14:57:48 -040012 <a href='#SkPaint_empty_constructor'>SkPaint()</a>;
Cary Clarkcb6bef02018-11-29 12:05:25 -050013 <a href='#SkPaint_copy_const_SkPaint'>SkPaint</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>);
14 <a href='#SkPaint_move_SkPaint'>SkPaint</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>);
15 <a href='#SkPaint_destructor'>~SkPaint()</a>;
16 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>);
17 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>);
18 friend bool <a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b);
19 friend bool <a href='#SkPaint_notequal_operator'>operator!=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b);
Cary Clark777eede2018-11-09 16:04:58 -050020 uint32_t <a href='#SkPaint_getHash'>getHash</a>() const;
21 void <a href='#SkPaint_reset'>reset()</a>;
Cary Clark777eede2018-11-09 16:04:58 -050022 void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel);
Cary Clark8cc4cdc2018-11-09 23:16:58 -050023 <a href='undocumented#SkFontHinting'>SkFontHinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const;
Cary Clark61313f32018-10-08 14:57:48 -040024
Cary Clark777eede2018-11-09 16:04:58 -050025 enum <a href='#SkPaint_Flags'>Flags</a> {
26 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
27 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
28 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
29 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
30 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
31 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
32 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
33 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
34 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark61313f32018-10-08 14:57:48 -040035 };
36
Cary Clark777eede2018-11-09 16:04:58 -050037 uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const;
38 void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags);
39 bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const;
40 void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa);
41 bool <a href='#SkPaint_isDither'>isDither</a>() const;
42 void <a href='#SkPaint_setDither'>setDither</a>(bool dither);
43 bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const;
44 void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText);
45 bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const;
46 void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText);
47 bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const;
48 void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText);
49 bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const;
50 void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText);
51 bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const;
52 void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter);
53 bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const;
54 void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText);
55 <a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const;
56 void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality);
Cary Clark61313f32018-10-08 14:57:48 -040057
Cary Clark777eede2018-11-09 16:04:58 -050058 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -040059 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
60 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
61 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
62 };
63
Cary Clarkcb6bef02018-11-29 12:05:25 -050064 static constexpr int <a href='#SkPaint_kStyleCount'>kStyleCount</a> = <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> + 1
Cary Clark777eede2018-11-09 16:04:58 -050065 <a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const;
66 void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style);
67 <a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const;
68 <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const;
69 void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='SkColor_Reference#Color'>color</a>);
70 void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& <a href='SkColor_Reference#Color'>color</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace);
71 uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const;
72 void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a);
73 void <a href='#SkPaint_setARGB'>setARGB</a>(<a href='undocumented#U8CPU'>U8CPU</a> a, <a href='undocumented#U8CPU'>U8CPU</a> r, <a href='undocumented#U8CPU'>U8CPU</a> g, <a href='undocumented#U8CPU'>U8CPU</a> b);
74 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const;
75 void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width);
76 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const;
77 void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter);
Cary Clark61313f32018-10-08 14:57:48 -040078
Cary Clark777eede2018-11-09 16:04:58 -050079 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -040080 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
81 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
82 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
83 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
84 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
85 };
86
Cary Clarkcb6bef02018-11-29 12:05:25 -050087 static constexpr int <a href='#SkPaint_kCapCount'>kCapCount</a> = <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> + 1
Cary Clark777eede2018-11-09 16:04:58 -050088 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -040089 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
90 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
91 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
92 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
93 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
94 };
95
Cary Clarkcb6bef02018-11-29 12:05:25 -050096 static constexpr int <a href='#SkPaint_kJoinCount'>kJoinCount</a> = <a href='#SkPaint_kLast_Join'>kLast_Join</a> + 1
Cary Clark777eede2018-11-09 16:04:58 -050097 <a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const;
98 void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap);
99 <a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const;
100 void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join);
101 bool <a href='#SkPaint_getFillPath'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst, const <a href='SkRect_Reference#SkRect'>SkRect</a>* cullRect,
102 <a href='undocumented#SkScalar'>SkScalar</a> resScale = 1) const;
103 bool <a href='#SkPaint_getFillPath'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst) const;
104 <a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const;
105 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkShader'>SkShader</a>> <a href='#SkPaint_refShader'>refShader</a>() const;
106 void <a href='#SkPaint_setShader'>setShader</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkShader'>SkShader</a>> <a href='undocumented#Shader'>shader</a>);
107 <a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const;
108 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorFilter'>SkColorFilter</a>> <a href='#SkPaint_refColorFilter'>refColorFilter</a>() const;
109 void <a href='#SkPaint_setColorFilter'>setColorFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorFilter'>SkColorFilter</a>> colorFilter);
110 <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const;
111 bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const;
112 void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode);
113 <a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const;
114 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkPathEffect'>SkPathEffect</a>> <a href='#SkPaint_refPathEffect'>refPathEffect</a>() const;
115 void <a href='#SkPaint_setPathEffect'>setPathEffect</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkPathEffect'>SkPathEffect</a>> pathEffect);
116 <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const;
117 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> <a href='#SkPaint_refMaskFilter'>refMaskFilter</a>() const;
118 void <a href='#SkPaint_setMaskFilter'>setMaskFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> maskFilter);
119 <a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const;
120 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkTypeface'>SkTypeface</a>> <a href='#SkPaint_refTypeface'>refTypeface</a>() const;
121 void <a href='#SkPaint_setTypeface'>setTypeface</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkTypeface'>SkTypeface</a>> <a href='undocumented#Typeface'>typeface</a>);
122 <a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const;
123 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkImageFilter'>SkImageFilter</a>> <a href='#SkPaint_refImageFilter'>refImageFilter</a>() const;
124 void <a href='#SkPaint_setImageFilter'>setImageFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkImageFilter'>SkImageFilter</a>> imageFilter);
125 <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const;
126 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> <a href='#SkPaint_refDrawLooper'>refDrawLooper</a>() const;
Cary Clark777eede2018-11-09 16:04:58 -0500127 void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
Cary Clark777eede2018-11-09 16:04:58 -0500128 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const;
129 void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize);
130 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const;
131 void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX);
132 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const;
133 void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX);
Cary Clark3e73dcf2018-12-06 08:41:14 -0500134 <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const;
135 void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> encoding);
Cary Clark61313f32018-10-08 14:57:48 -0400136
Cary Clark777eede2018-11-09 16:04:58 -0500137 typedef <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> <a href='#SkPaint_FontMetrics'>FontMetrics</a>;
Cary Clark61313f32018-10-08 14:57:48 -0400138
Cary Clark777eede2018-11-09 16:04:58 -0500139 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='undocumented#SkFontMetrics'>SkFontMetrics</a>* metrics) const;
140 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const;
141 int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength,
142 <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[]) const;
143 bool <a href='#SkPaint_containsText'>containsText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const;
144 void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> <a href='undocumented#Text'>text</a>[]) const;
145 int <a href='#SkPaint_countText'>countText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const;
146 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const;
147 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length) const;
148 size_t <a href='#SkPaint_breakText'>breakText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
149 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const;
150 int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength, <a href='undocumented#SkScalar'>SkScalar</a> widths[],
151 <a href='SkRect_Reference#SkRect'>SkRect</a> bounds[] = nullptr) const;
152 void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
153 <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const;
154 void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length,
155 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const;
Cary Clarkcb6bef02018-11-29 12:05:25 -0500156 int <a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
157 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
158 int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
159 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
160 int <a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='undocumented#SkScalar'>SkScalar</a> xpos[],
161 <a href='undocumented#SkScalar'>SkScalar</a> constY, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
Cary Clark777eede2018-11-09 16:04:58 -0500162 int <a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a>(const <a href='SkTextBlob_Reference#SkTextBlob'>SkTextBlob</a>* blob, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2],
163 <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
Cary Clark777eede2018-11-09 16:04:58 -0500164 bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const;
Cary Clark61313f32018-10-08 14:57:48 -0400165};
Cary Clarkcb6bef02018-11-29 12:05:25 -0500166
Cary Clark61313f32018-10-08 14:57:48 -0400167</pre>
168
Cary Clark777eede2018-11-09 16:04:58 -0500169<a href='SkPaint_Reference#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='SkPaint_Reference#Paint'>Paint</a> collects all
170options outside of the <a href='#Canvas_Clip'>Canvas_Clip</a> and <a href='#Canvas_Matrix'>Canvas_Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400171
Cary Clark777eede2018-11-09 16:04:58 -0500172Various options apply to <a href='undocumented#Text'>text</a>, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -0400173
Cary Clark777eede2018-11-09 16:04:58 -0500174Some options may not be implemented on all platforms; in these cases, setting
175the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
176functionality; for instance, <a href='#Text_Size'>text size</a> is identical to <a href='SkMatrix_Reference#Matrix'>matrix</a> scale.
Cary Clark12799e12017-07-28 15:18:29 -0400177
Cary Clark777eede2018-11-09 16:04:58 -0500178<a href='SkPaint_Reference#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
179pipeline and multiple pipeline stages may be affected by a single <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400180
Cary Clark777eede2018-11-09 16:04:58 -0500181<a href='SkPaint_Reference#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
182algorithms that alter the drawing geometry, <a href='SkColor_Reference#Color'>color</a>, and transparency. For instance,
183<a href='SkPaint_Reference#Paint'>Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -0400184
Cary Clark777eede2018-11-09 16:04:58 -0500185The objects contained by <a href='SkPaint_Reference#Paint'>Paint</a> are opaque, and cannot be edited outside of the <a href='SkPaint_Reference#Paint'>Paint</a>
186to affect it. The implementation is free to defer computations associated with the
187<a href='SkPaint_Reference#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
188<a href='SkPath_Reference#Path'>Path</a> geometries with <a href='#Paint_Anti_Alias'>Anti_Aliasing</a>, regardless of how <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>
189is set in <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400190
Cary Clarkcb6bef02018-11-29 12:05:25 -0500191<a href='SkPaint_Reference#Paint'>Paint</a> describes a single <a href='SkColor_Reference#Color'>color</a>, a single <a href='SkFont_Reference#Font'>font</a>, a single <a href='SkImage_Reference#Image'>image</a> quality, and so on.
Cary Clark777eede2018-11-09 16:04:58 -0500192Multiple colors are drawn either by using multiple paints or with objects like
193<a href='undocumented#Shader'>Shader</a> attached to <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400194
Cary Clark682c58d2018-05-16 07:07:07 -0400195<a name='SkPaint_empty_constructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400196
197---
Cary Clark12799e12017-07-28 15:18:29 -0400198
Cary Clark682c58d2018-05-16 07:07:07 -0400199<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500200<a href='#SkPaint_empty_constructor'>SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400201</pre>
202
Cary Clark777eede2018-11-09 16:04:58 -0500203Constructs <a href='SkPaint_Reference#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400204
205| attribute | default value |
206| --- | --- |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500207| <a href='#Paint_Anti_Alias'>Anti_Alias</a> | false |
208| <a href='#Blend_Mode'>Blend_Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a> |
209| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK_ColorBLACK</a> |
210| <a href='#Color_Alpha'>Color_Alpha</a> | 255 |
211| <a href='#Color_Filter'>Color_Filter</a> | nullptr |
212| Dither | false |
213| <a href='#Draw_Looper'>Draw_Looper</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500214| <a href='#Filter_Quality'>Filter_Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
Cary Clark3e73dcf2018-12-06 08:41:14 -0500215| <a href='#Font_Force_Hinting'>Font_Force_Hinting</a> | false |
216| <a href='#Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> | false |
217| <a href='#Font_Embolden'>Font_Embolden</a> | false |
218| <a href='#Font_Hinting'>Font_Hinting</a> | <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> |
219| <a href='#Font_Hinting_Spacing'>Font_Hinting_Spacing</a> | false |
220| <a href='#Font_Anti_Alias'>Font_Anti_Alias</a> | false |
221| <a href='#Font_Linear'>Font_Linear</a> | false |
222| <a href='#Font_Scale_X'>Font_Scale_X</a> | 1 |
223| <a href='#Font_Size'>Font_Size</a> | 12 |
224| <a href='#Font_Skew_X'>Font_Skew_X</a> | 0 |
225| <a href='#Font_Subpixel'>Font_Subpixel</a> | false |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500226| <a href='#Image_Filter'>Image_Filter</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500227| <a href='#Paint_Miter_Limit'>Miter_Limit</a> | 4 |
228| <a href='#Mask_Filter'>Mask_Filter</a> | nullptr |
229| <a href='#Path_Effect'>Path_Effect</a> | nullptr |
Cary Clark682c58d2018-05-16 07:07:07 -0400230| <a href='undocumented#Shader'>Shader</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500231| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill_Style</a> |
Cary Clark3e73dcf2018-12-06 08:41:14 -0500232| <a href='#Text_Encoding'>Text_Encoding</a> | <a href='undocumented#kUTF8_SkTextEncoding'>kUTF8_SkTextEncoding</a> |
Cary Clark682c58d2018-05-16 07:07:07 -0400233| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500234| <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> |
235| <a href='#Paint_Stroke_Join'>Stroke_Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter_Join</a> |
236| <a href='#Paint_Stroke_Width'>Stroke_Width</a> | 0 |
Cary Clark12799e12017-07-28 15:18:29 -0400237
Cary Clark777eede2018-11-09 16:04:58 -0500238The flags, <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a>, hinting, and miter limit may be overridden at compile time by defining
239<a href='SkPaint_Reference#Paint'>paint</a> default values. The overrides may be included in "SkUserConfig.h" or predefined by the
240build system.
Cary Clark12799e12017-07-28 15:18:29 -0400241
242### Return Value
243
Cary Clark77b3f3a2018-11-07 14:59:03 -0500244default initialized <a href='SkPaint_Reference#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400245
246### Example
247
248<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
249
Cary Clark682c58d2018-05-16 07:07:07 -0400250<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400251
252---
Cary Clark12799e12017-07-28 15:18:29 -0400253
Cary Clark682c58d2018-05-16 07:07:07 -0400254<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500255<a href='#SkPaint_copy_const_SkPaint'>SkPaint</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400256</pre>
257
Cary Clark09d80c02018-10-31 12:14:03 -0400258Makes a shallow copy of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>. <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500259<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> are shared
260between the original <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a> and the copy. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400261their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400262
Cary Clark09d80c02018-10-31 12:14:03 -0400263The referenced objects <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>, <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500264<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> cannot be modified after they are created.
265This prevents objects with <a href='undocumented#SkRefCnt'>SkRefCnt</a> from being modified once <a href='SkPaint_Reference#SkPaint'>SkPaint</a> refers to them.
Cary Clark12799e12017-07-28 15:18:29 -0400266
267### Parameters
268
Cary Clark682c58d2018-05-16 07:07:07 -0400269<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
270 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400271 </tr>
272</table>
273
274### Return Value
275
Cary Clark77b3f3a2018-11-07 14:59:03 -0500276shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400277
278### Example
279
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000280<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400281
282#### Example Output
283
284~~~~
285SK_ColorRED == paint1.getColor()
286SK_ColorBLUE == paint2.getColor()
287~~~~
288
289</fiddle-embed></div>
290
Cary Clark682c58d2018-05-16 07:07:07 -0400291<a name='SkPaint_move_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400292
293---
Cary Clark12799e12017-07-28 15:18:29 -0400294
Cary Clark682c58d2018-05-16 07:07:07 -0400295<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500296<a href='#SkPaint_move_SkPaint'>SkPaint</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400297</pre>
298
Cary Clarkd0530ba2017-09-14 11:25:39 -0400299Implements a move constructor to avoid increasing the reference counts
Cary Clark77b3f3a2018-11-07 14:59:03 -0500300of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400301
Cary Clark777eede2018-11-09 16:04:58 -0500302After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400303
304### Parameters
305
Cary Clark682c58d2018-05-16 07:07:07 -0400306<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
307 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400308 </tr>
309</table>
310
311### Return Value
312
Cary Clark77b3f3a2018-11-07 14:59:03 -0500313content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400314
315### Example
316
Cary Clark83647062018-07-18 16:21:51 -0400317<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -0400318
319#### Example Output
320
321~~~~
322path effect unique: true
323~~~~
324
325</fiddle-embed></div>
326
Cary Clark682c58d2018-05-16 07:07:07 -0400327<a name='SkPaint_reset'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400328
329---
Cary Clark12799e12017-07-28 15:18:29 -0400330
Cary Clark682c58d2018-05-16 07:07:07 -0400331<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500332void <a href='#SkPaint_reset'>reset()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400333</pre>
334
Cary Clark777eede2018-11-09 16:04:58 -0500335Sets all <a href='SkPaint_Reference#SkPaint'>SkPaint</a> contents to their initial values. This is equivalent to replacing
336<a href='SkPaint_Reference#SkPaint'>SkPaint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400337
338### Example
339
340<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
341
342#### Example Output
343
344~~~~
345paint1 == paint2
346~~~~
347
348</fiddle-embed></div>
349
Cary Clark682c58d2018-05-16 07:07:07 -0400350<a name='SkPaint_destructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400351
352---
Cary Clark12799e12017-07-28 15:18:29 -0400353
Cary Clark682c58d2018-05-16 07:07:07 -0400354<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500355<a href='#SkPaint_destructor'>~SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400356</pre>
357
Cary Clark777eede2018-11-09 16:04:58 -0500358Decreases <a href='SkPaint_Reference#SkPaint'>SkPaint</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> of owned objects: <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>,
359<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a>. If the
360objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400361
Cary Clarka90ea222018-10-16 10:30:28 -0400362<a name='Management'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400363
Cary Clark682c58d2018-05-16 07:07:07 -0400364<a name='SkPaint_copy_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400365
366---
Cary Clark12799e12017-07-28 15:18:29 -0400367
Cary Clark682c58d2018-05-16 07:07:07 -0400368<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500369<a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400370</pre>
371
Cary Clark09d80c02018-10-31 12:14:03 -0400372Makes a shallow copy of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>. <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500373<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> are shared
374between the original <a href='#SkPaint_copy_operator_paint'>paint</a> and the copy. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the
Cary Clark12799e12017-07-28 15:18:29 -0400375prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark777eede2018-11-09 16:04:58 -0500376resulting count is zero. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
377are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400378
379### Parameters
380
Cary Clark682c58d2018-05-16 07:07:07 -0400381<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
382 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400383 </tr>
384</table>
385
386### Return Value
387
Cary Clark77b3f3a2018-11-07 14:59:03 -0500388content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400389
390### Example
391
392<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
393
394#### Example Output
395
396~~~~
397SK_ColorRED == paint1.getColor()
398SK_ColorRED == paint2.getColor()
399~~~~
400
401</fiddle-embed></div>
402
Cary Clark682c58d2018-05-16 07:07:07 -0400403<a name='SkPaint_move_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400404
405---
Cary Clark12799e12017-07-28 15:18:29 -0400406
Cary Clark682c58d2018-05-16 07:07:07 -0400407<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500408<a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400409</pre>
410
Cary Clark777eede2018-11-09 16:04:58 -0500411Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
412of objects referenced by the <a href='#SkPaint_move_operator_paint'>paint</a> parameter. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -0400413prior destination are decreased by one; those objects are deleted if the resulting count
414is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400415
Cary Clark777eede2018-11-09 16:04:58 -0500416After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400417
418### Parameters
419
Cary Clark682c58d2018-05-16 07:07:07 -0400420<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
421 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400422 </tr>
423</table>
424
425### Return Value
426
Cary Clark77b3f3a2018-11-07 14:59:03 -0500427content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400428
429### Example
430
Ravi Mistry874e22b2018-07-19 03:49:13 +0000431<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -0400432
433#### Example Output
434
435~~~~
436SK_ColorRED == paint2.getColor()
437~~~~
438
439</fiddle-embed></div>
440
Cary Clark682c58d2018-05-16 07:07:07 -0400441<a name='SkPaint_equal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400442
443---
Cary Clark12799e12017-07-28 15:18:29 -0400444
Cary Clark682c58d2018-05-16 07:07:07 -0400445<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500446bool <a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b)
Cary Clark12799e12017-07-28 15:18:29 -0400447</pre>
448
Cary Clark777eede2018-11-09 16:04:58 -0500449Compares <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 Clark09d80c02018-10-31 12:14:03 -0400450if <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>, <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500451<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, or <a href='undocumented#SkImageFilter'>SkImageFilter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400452
453### Parameters
454
Cary Clark682c58d2018-05-16 07:07:07 -0400455<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500456 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400457 </tr>
458 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500459 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400460 </tr>
461</table>
462
463### Return Value
464
Cary Clark777eede2018-11-09 16:04:58 -0500465true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400466
467### Example
468
469<div><fiddle-embed name="7481a948e34672720337a631830586dd">
470
471#### Example Output
472
473~~~~
474paint1 == paint2
475paint1 != paint2
476~~~~
477
478</fiddle-embed></div>
479
Cary Clark06c20f32018-03-20 15:53:27 -0400480### See Also
481
Cary Clarkcb6bef02018-11-29 12:05:25 -0500482<a href='#SkPaint_notequal_operator'>operator!=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_equal_operator_a'>a</a>, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_equal_operator_b'>b</a>)
Cary Clark06c20f32018-03-20 15:53:27 -0400483
Cary Clark682c58d2018-05-16 07:07:07 -0400484<a name='SkPaint_notequal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400485
486---
Cary Clark12799e12017-07-28 15:18:29 -0400487
Cary Clark682c58d2018-05-16 07:07:07 -0400488<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500489bool <a href='#SkPaint_notequal_operator'>operator!=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b)
Cary Clark12799e12017-07-28 15:18:29 -0400490</pre>
491
Cary Clark777eede2018-11-09 16:04:58 -0500492Compares <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 Clark09d80c02018-10-31 12:14:03 -0400493if <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>, <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500494<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, or <a href='undocumented#SkImageFilter'>SkImageFilter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400495
496### Parameters
497
Cary Clark682c58d2018-05-16 07:07:07 -0400498<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500499 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400500 </tr>
501 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500502 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400503 </tr>
504</table>
505
506### Return Value
507
Cary Clark777eede2018-11-09 16:04:58 -0500508true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400509
510### Example
511
skia-bookmakera717ca92018-07-08 05:32:09 +0000512<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -0400513
514#### Example Output
515
516~~~~
517paint1 == paint2
518paint1 == paint2
519~~~~
520
521</fiddle-embed></div>
522
Cary Clark06c20f32018-03-20 15:53:27 -0400523### See Also
524
Cary Clarkcb6bef02018-11-29 12:05:25 -0500525<a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_notequal_operator_a'>a</a>, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_notequal_operator_b'>b</a>)
Cary Clark06c20f32018-03-20 15:53:27 -0400526
Cary Clark682c58d2018-05-16 07:07:07 -0400527<a name='SkPaint_getHash'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400528
529---
Cary Clark12799e12017-07-28 15:18:29 -0400530
Cary Clark682c58d2018-05-16 07:07:07 -0400531<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500532uint32_t <a href='#SkPaint_getHash'>getHash</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400533</pre>
534
Cary Clark777eede2018-11-09 16:04:58 -0500535Returns a hash generated from <a href='SkPaint_Reference#SkPaint'>SkPaint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400536Identical hashes guarantee that the paints are
537equivalent, but differing hashes do not guarantee that the paints have differing
538contents.
539
Cary Clarkcb6bef02018-11-29 12:05:25 -0500540If <a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b) returns true for two paints,
Cary Clark12799e12017-07-28 15:18:29 -0400541their hashes are also equal.
542
543The hash returned is platform and implementation specific.
544
545### Return Value
546
547a shallow hash
548
549### Example
550
Cary Clark83647062018-07-18 16:21:51 -0400551<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -0400552
553#### Example Output
554
555~~~~
556paint1 == paint2
557paint1.getHash() == paint2.getHash()
558~~~~
559
560</fiddle-embed></div>
561
Cary Clarka90ea222018-10-16 10:30:28 -0400562<a name='Hinting'></a>
563
Cary Clark682c58d2018-05-16 07:07:07 -0400564<a name='SkPaint_setHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400565
566---
Cary Clark12799e12017-07-28 15:18:29 -0400567
Cary Clark682c58d2018-05-16 07:07:07 -0400568<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500569void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400570</pre>
571
Cary Clark777eede2018-11-09 16:04:58 -0500572Sets level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400573Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400574
Cary Clark12799e12017-07-28 15:18:29 -0400575### Parameters
576
Cary Clark682c58d2018-05-16 07:07:07 -0400577<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
Cary Clark885f1072018-11-08 13:31:39 -0500578 <td>one of: <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>,</td>
skia-bookmakere6c85752018-11-06 05:32:09 +0000579 </tr>
580</table>
581
Cary Clark885f1072018-11-08 13:31:39 -0500582<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
skia-bookmakere6c85752018-11-06 05:32:09 +0000583
584### Example
585
skia-bookmaker6894f222018-12-02 05:59:00 +0000586<div><fiddle-embed name="bb179ec5698ec1398ff18f3657ab73f7">
skia-bookmakere6c85752018-11-06 05:32:09 +0000587
588#### Example Output
589
590~~~~
591paint1 == paint2
592~~~~
593
594</fiddle-embed></div>
595
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500596<a name='SkPaint_getHinting'></a>
597
598---
599
600<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500601<a href='undocumented#SkFontHinting'>SkFontHinting</a> <a href='#SkPaint_getHinting'>getHinting</a>()const
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500602</pre>
603
604Returns level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
605
606### Return Value
607
Cary Clarkabaffd82018-11-15 08:25:12 -0500608one of: <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>,
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500609
Cary Clarkabaffd82018-11-15 08:25:12 -0500610<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500611
Cary Clarkabaffd82018-11-15 08:25:12 -0500612### Example
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500613
Cary Clarkabaffd82018-11-15 08:25:12 -0500614<div><fiddle-embed name="b56b70c7ea2453c41bfa58b626953bed">
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500615
Cary Clarkabaffd82018-11-15 08:25:12 -0500616#### Example Output
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500617
Cary Clarkabaffd82018-11-15 08:25:12 -0500618~~~~
619SkFontHinting::kNormal == paint.getHinting()
620~~~~
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500621
Cary Clarkabaffd82018-11-15 08:25:12 -0500622</fiddle-embed></div>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500623
Cary Clarka90ea222018-10-16 10:30:28 -0400624<a name='Flags'></a>
625
626<a name='SkPaint_Flags'></a>
627
Cary Clark12799e12017-07-28 15:18:29 -0400628---
629
Cary Clarka560c472017-11-27 10:44:06 -0500630<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400631 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clark777eede2018-11-09 16:04:58 -0500632 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
633 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
634 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
635 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
636 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
637 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
638 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
639 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
640 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400641 };
Cary Clarkcb6bef02018-11-29 12:05:25 -0500642
Cary Clark12799e12017-07-28 15:18:29 -0400643</pre>
644
Cary Clark682c58d2018-05-16 07:07:07 -0400645The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
Cary Clark777eede2018-11-09 16:04:58 -0500646The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
647with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a>.
648All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
649multiple settings at once.
Cary Clark12799e12017-07-28 15:18:29 -0400650
651### Constants
652
Cary Clark682c58d2018-05-16 07:07:07 -0400653<table style='border-collapse: collapse; width: 62.5em'>
654 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
655<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
656<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
657 <tr style='background-color: #f0f0f0; '>
658 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
659 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
660 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400661mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400662 </tr>
663 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400664 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
665 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
666 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
667mask for setting Dither</td>
668 </tr>
669 <tr style='background-color: #f0f0f0; '>
670 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
671 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
672 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500673mask for setting Font_Embolden</td>
Cary Clark12799e12017-07-28 15:18:29 -0400674 </tr>
675 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400676 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
677 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
678 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500679mask for setting Font_Linear</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400680 </tr>
681 <tr style='background-color: #f0f0f0; '>
682 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
683 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
684 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500685mask for setting Font_Subpixel</td>
Cary Clark12799e12017-07-28 15:18:29 -0400686 </tr>
687 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400688 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
689 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
690 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500691mask for setting Font_Anti_Alias</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400692 </tr>
693 <tr style='background-color: #f0f0f0; '>
694 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
695 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
696 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
697mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400698 </tr>
699 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400700 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
701 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
702 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500703mask for setting Font_Force_Hinting</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400704 </tr>
705 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400706 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
707 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
708 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -0500709mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use
Cary Clark77b3f3a2018-11-07 14:59:03 -0500710</td>
Cary Clark12799e12017-07-28 15:18:29 -0400711 </tr>
Cary Clark777eede2018-11-09 16:04:58 -0500712<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark682c58d2018-05-16 07:07:07 -0400713</table>
Cary Clark12799e12017-07-28 15:18:29 -0400714
Cary Clark682c58d2018-05-16 07:07:07 -0400715<a name='SkPaint_getFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400716
717---
Cary Clark12799e12017-07-28 15:18:29 -0400718
Cary Clark682c58d2018-05-16 07:07:07 -0400719<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500720uint32_t <a href='#SkPaint_getFlags'>getFlags</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400721</pre>
722
Cary Clark777eede2018-11-09 16:04:58 -0500723Returns <a href='SkPaint_Reference#Paint'>paint</a> settings described by <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
724bit, and can be tested with <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400725
726### Return Value
727
Cary Clark09d80c02018-10-31 12:14:03 -0400728zero, one, or more bits described by <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400729
730### Example
731
732<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
733
734#### Example Output
735
736~~~~
737(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
738~~~~
739
740</fiddle-embed></div>
741
Cary Clark682c58d2018-05-16 07:07:07 -0400742<a name='SkPaint_setFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400743
744---
Cary Clark12799e12017-07-28 15:18:29 -0400745
Cary Clark682c58d2018-05-16 07:07:07 -0400746<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500747void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400748</pre>
749
Cary Clark777eede2018-11-09 16:04:58 -0500750Replaces <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> with <a href='#SkPaint_setFlags_flags'>flags</a>, the union of the <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> members.
751All <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400752
753### Parameters
754
Cary Clark682c58d2018-05-16 07:07:07 -0400755<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500756 <td>union of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> for <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400757 </tr>
758</table>
759
760### Example
761
762<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
763
764#### Example Output
765
766~~~~
767paint.isAntiAlias()
768paint.isDither()
769~~~~
770
771</fiddle-embed></div>
772
Cary Clarka90ea222018-10-16 10:30:28 -0400773<a name='Anti_Alias'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400774
Cary Clarka90ea222018-10-16 10:30:28 -0400775---
Cary Clark08895c42018-02-01 09:37:32 -0500776
Cary Clark777eede2018-11-09 16:04:58 -0500777<a href='#Paint_Anti_Alias'>Anti_Alias</a> drawing approximates partial <a href='undocumented#Pixel'>pixel</a> coverage with transparency.
778If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is clear, <a href='undocumented#Pixel'>pixel</a> centers contained by the shape edge are drawn opaque.
779If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is set, pixels are drawn with <a href='#Color_Alpha'>Color_Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400780
Cary Clark777eede2018-11-09 16:04:58 -0500781The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
782passing through the <a href='undocumented#Pixel'>pixel</a> center may, but is not required to, draw the <a href='undocumented#Pixel'>pixel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400783
Cary Clark777eede2018-11-09 16:04:58 -0500784<a href='#Raster_Engine'>Raster_Engine</a> draws <a href='undocumented#Alias'>Aliased</a> pixels whose centers are on or to the right of the start of an
785active <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 -0400786
Cary Clark777eede2018-11-09 16:04:58 -0500787A platform may only support <a href='#Paint_Anti_Alias'>Anti_Aliased</a> drawing. Some GPU-backed platforms use
788<a href='undocumented#Supersampling'>Supersampling</a> to <a href='#Paint_Anti_Alias'>Anti_Alias</a> all drawing, and have no mechanism to selectively
Cary Clark682c58d2018-05-16 07:07:07 -0400789<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400790
Cary Clark777eede2018-11-09 16:04:58 -0500791The amount of coverage computed for <a href='#Paint_Anti_Alias'>Anti_Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400792
Cary Clark777eede2018-11-09 16:04:58 -0500793<a href='#Paint_Anti_Alias'>Anti_Alias</a> is disabled by default.
794<a href='#Paint_Anti_Alias'>Anti_Alias</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>
795at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400796
797### Example
798
Cary Clark777eede2018-11-09 16:04:58 -0500799<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red <a href='undocumented#Line'>line</a> is drawn with transparency on the edges to make it look smoother.
800A blue <a href='undocumented#Line'>line</a> draws only where the <a href='undocumented#Pixel'>pixel</a> centers are contained.
801The <a href='undocumented#Line'>lines</a> are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
802<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500803</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400804
Cary Clark682c58d2018-05-16 07:07:07 -0400805<a name='SkPaint_isAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400806
807---
Cary Clark12799e12017-07-28 15:18:29 -0400808
Cary Clark682c58d2018-05-16 07:07:07 -0400809<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500810bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400811</pre>
812
Cary Clark777eede2018-11-09 16:04:58 -0500813Returns true if pixels on the active edges of <a href='SkPath_Reference#SkPath'>SkPath</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -0400814
Cary Clark777eede2018-11-09 16:04:58 -0500815Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400816
817### Return Value
818
Cary Clark777eede2018-11-09 16:04:58 -0500819<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400820
821### Example
822
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000823<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -0400824
825#### Example Output
826
827~~~~
828paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
829paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
830~~~~
831
832</fiddle-embed></div>
833
Cary Clark682c58d2018-05-16 07:07:07 -0400834<a name='SkPaint_setAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400835
836---
Cary Clark12799e12017-07-28 15:18:29 -0400837
Cary Clark682c58d2018-05-16 07:07:07 -0400838<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500839void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -0400840</pre>
841
skia-bookmaker8be41962018-11-20 05:34:36 +0000842Requests, but does not require, that edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -0400843partial transparency.
844
Cary Clark777eede2018-11-09 16:04:58 -0500845Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
846Clears <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 -0400847
848### Parameters
849
Cary Clark682c58d2018-05-16 07:07:07 -0400850<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400851 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400852 </tr>
853</table>
854
855### Example
856
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000857<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -0400858
859#### Example Output
860
861~~~~
862paint1 == paint2
863~~~~
864
865</fiddle-embed></div>
866
Cary Clarka90ea222018-10-16 10:30:28 -0400867<a name='Dither'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400868
Cary Clarka90ea222018-10-16 10:30:28 -0400869---
Cary Clark08895c42018-02-01 09:37:32 -0500870
Cary Clark777eede2018-11-09 16:04:58 -0500871Dither increases fidelity by adjusting the <a href='SkColor_Reference#Color'>color</a> of adjacent pixels.
872This can help to smooth <a href='SkColor_Reference#Color'>color</a> transitions and reducing banding in gradients.
873Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
874and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
875and improves rendering into a <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400876
Cary Clark777eede2018-11-09 16:04:58 -0500877Dithering is always enabled for linear gradients drawing into
878<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
879Dither cannot be enabled for <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and
Cary Clark682c58d2018-05-16 07:07:07 -0400880<a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400881
Cary Clark777eede2018-11-09 16:04:58 -0500882Dither is disabled by default.
883Dither can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>
884at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400885
Cary Clark777eede2018-11-09 16:04:58 -0500886Some platform implementations may ignore dithering. Set <code>SK_IGNORE_GPU_DITHER</code>to ignore Dither on <a href='#GPU_Surface'>GPU_Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400887
888### Example
889
Cary Clark777eede2018-11-09 16:04:58 -0500890<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested <a href='SkColor_Reference#Color'>color</a> by
891alternating nearby colors from <a href='undocumented#Pixel'>pixel</a> to <a href='undocumented#Pixel'>pixel</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -0500892</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400893
894### Example
895
Cary Clark777eede2018-11-09 16:04:58 -0500896<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to <a href='SkColor_Reference#Color'>color</a> to smooth gradients.
897Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kPlus'>kPlus</a> exaggerates the
898dither, making it easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500899</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400900
Cary Clarka90ea222018-10-16 10:30:28 -0400901### See Also
902
903Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
904
Cary Clark682c58d2018-05-16 07:07:07 -0400905<a name='SkPaint_isDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400906
907---
Cary Clark12799e12017-07-28 15:18:29 -0400908
Cary Clark682c58d2018-05-16 07:07:07 -0400909<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500910bool <a href='#SkPaint_isDither'>isDither</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400911</pre>
912
Cary Clark777eede2018-11-09 16:04:58 -0500913Returns true if <a href='SkColor_Reference#Color'>color</a> error may be distributed to smooth <a href='SkColor_Reference#Color'>color</a> transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +0000914
Cary Clark777eede2018-11-09 16:04:58 -0500915Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400916
917### Return Value
918
Cary Clark777eede2018-11-09 16:04:58 -0500919<a href='#SkPaint_kDither_Flag'>kDither_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400920
921### Example
922
923<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
924
925#### Example Output
926
927~~~~
928paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
929paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
930~~~~
931
932</fiddle-embed></div>
933
Cary Clark682c58d2018-05-16 07:07:07 -0400934<a name='SkPaint_setDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400935
936---
Cary Clark12799e12017-07-28 15:18:29 -0400937
Cary Clark682c58d2018-05-16 07:07:07 -0400938<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500939void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -0400940</pre>
941
Cary Clark777eede2018-11-09 16:04:58 -0500942Requests, but does not require, to distribute <a href='SkColor_Reference#Color'>color</a> error.
Cary Clark12799e12017-07-28 15:18:29 -0400943
Cary Clark777eede2018-11-09 16:04:58 -0500944Sets <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
945Clears <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 -0400946
947### Parameters
948
Cary Clark682c58d2018-05-16 07:07:07 -0400949<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400950 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400951 </tr>
952</table>
953
954### Example
955
956<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
957
958#### Example Output
959
960~~~~
961paint1 == paint2
962~~~~
963
964</fiddle-embed></div>
965
966### See Also
967
Cary Clark682c58d2018-05-16 07:07:07 -0400968<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -0400969
Cary Clarka90ea222018-10-16 10:30:28 -0400970<a name='Device_Text'></a>
971
Cary Clark12799e12017-07-28 15:18:29 -0400972---
973
Cary Clark3e73dcf2018-12-06 08:41:14 -0500974<a href='#Font_Anti_Alias'>Font_Anti_Alias</a> and <a href='#Font_Subpixel'>Font_Subpixel</a> increase the precision of <a href='undocumented#Glyph'>glyph</a> position.
Cary Clark12799e12017-07-28 15:18:29 -0400975
Cary Clark777eede2018-11-09 16:04:58 -0500976When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
977create a <a href='SkColor_Reference#Color'>color</a>, and relies
978on the small <a href='undocumented#Size'>size</a> of the stripe and visual perception to make the <a href='SkColor_Reference#Color'>color</a> fringing imperceptible.
Cary Clark3e73dcf2018-12-06 08:41:14 -0500979<a href='#Font_Anti_Alias'>Font_Anti_Alias</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark777eede2018-11-09 16:04:58 -0500980the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -0400981
Cary Clark777eede2018-11-09 16:04:58 -0500982<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> uses the <a href='undocumented#Pixel'>pixel</a> transparency to represent a fractional offset.
983As the opaqueness
984of the <a href='SkColor_Reference#Color'>color</a> increases, the edge of the <a href='undocumented#Glyph'>glyph</a> appears to move towards the outside of the <a href='undocumented#Pixel'>pixel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400985
Cary Clark777eede2018-11-09 16:04:58 -0500986Either or both techniques can be enabled.
987<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> are clear by default.
Cary Clark3e73dcf2018-12-06 08:41:14 -0500988<a href='#Font_Anti_Alias'>Font_Anti_Alias</a> or <a href='#Font_Subpixel'>Font_Subpixel</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to
Cary Clark777eede2018-11-09 16:04:58 -0500989<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 -0400990
991### Example
992
Cary Clark3e73dcf2018-12-06 08:41:14 -0500993<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href='#Font_Anti_Alias'>Font_Anti_Alias</a> and <a href='#Font_Subpixel'>Font_Subpixel</a>.
994When <a href='#Font_Subpixel'>Font_Subpixel</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
995When <a href='#Font_Subpixel'>Font_Subpixel</a> is enabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are unique, but appear evenly spaced.
Cary Clark1a8d7622018-03-05 13:26:16 -0500996</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400997
Cary Clarka90ea222018-10-16 10:30:28 -0400998<a name='Linear_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400999
Cary Clark3e73dcf2018-12-06 08:41:14 -05001000<a href='#Font_Linear'>Font_Linear</a> selects whether <a href='undocumented#Text'>text</a> is rendered as a <a href='undocumented#Glyph'>Glyph</a> or as a <a href='SkPath_Reference#Path'>Path</a>.
1001If <a href='#Font_Linear'>Font_Linear</a> is set, it has the same effect as setting Hinting to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>.
1002If <a href='#Font_Linear'>Font_Linear</a> is clear, it is the same as setting Hinting to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001003
Cary Clark682c58d2018-05-16 07:07:07 -04001004<a name='SkPaint_isLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001005
1006---
Cary Clark12799e12017-07-28 15:18:29 -04001007
Cary Clark682c58d2018-05-16 07:07:07 -04001008<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001009bool <a href='#SkPaint_isLinearText'>isLinearText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001010</pre>
1011
Cary Clark777eede2018-11-09 16:04:58 -05001012Returns true if <a href='undocumented#Text'>text</a> is converted to <a href='SkPath_Reference#SkPath'>SkPath</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001013
Cary Clark777eede2018-11-09 16:04:58 -05001014Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001015
1016### Return Value
1017
Cary Clark777eede2018-11-09 16:04:58 -05001018<a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001019
1020### Example
1021
1022<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1023
1024### See Also
1025
Cary Clarkabaffd82018-11-15 08:25:12 -05001026<a href='#SkPaint_setLinearText'>setLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001027
Cary Clark682c58d2018-05-16 07:07:07 -04001028<a name='SkPaint_setLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001029
1030---
Cary Clark12799e12017-07-28 15:18:29 -04001031
Cary Clark682c58d2018-05-16 07:07:07 -04001032<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001033void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001034</pre>
1035
skia-bookmaker8be41962018-11-20 05:34:36 +00001036Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> are converted to <a href='SkPath_Reference#SkPath'>SkPath</a>
1037before drawing and measuring.
Cary Clark777eede2018-11-09 16:04:58 -05001038By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001039
Cary Clark777eede2018-11-09 16:04:58 -05001040Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1041Clears <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 -04001042
1043### Parameters
1044
Cary Clark682c58d2018-05-16 07:07:07 -04001045<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001046 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001047 </tr>
1048</table>
1049
1050### Example
1051
Cary Clark83647062018-07-18 16:21:51 -04001052<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001053
1054### See Also
1055
Cary Clarkabaffd82018-11-15 08:25:12 -05001056<a href='#SkPaint_isLinearText'>isLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001057
Cary Clarka90ea222018-10-16 10:30:28 -04001058<a name='Subpixel_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001059
Cary Clark777eede2018-11-09 16:04:58 -05001060<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> uses the <a href='undocumented#Pixel'>pixel</a> transparency to represent a fractional offset.
1061As the opaqueness
1062of the <a href='SkColor_Reference#Color'>color</a> increases, the edge of the <a href='undocumented#Glyph'>glyph</a> appears to move towards the outside of the <a href='undocumented#Pixel'>pixel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001063
Cary Clark682c58d2018-05-16 07:07:07 -04001064<a name='SkPaint_isSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001065
1066---
Cary Clark12799e12017-07-28 15:18:29 -04001067
Cary Clark682c58d2018-05-16 07:07:07 -04001068<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001069bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001070</pre>
1071
Cary Clark3e73dcf2018-12-06 08:41:14 -05001072Returns true if <a href='undocumented#Glyph'>glyphs</a> at different <a href='SkFont_Reference#Subpixel'>sub-pixel</a> positions may differ on <a href='undocumented#Pixel'>pixel</a> edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001073
Cary Clark777eede2018-11-09 16:04:58 -05001074Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001075
1076### Return Value
1077
Cary Clark777eede2018-11-09 16:04:58 -05001078<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001079
1080### Example
1081
1082<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1083
1084#### Example Output
1085
1086~~~~
1087paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1088paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1089~~~~
1090
1091</fiddle-embed></div>
1092
Cary Clark682c58d2018-05-16 07:07:07 -04001093<a name='SkPaint_setSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001094
1095---
Cary Clark12799e12017-07-28 15:18:29 -04001096
Cary Clark682c58d2018-05-16 07:07:07 -04001097<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001098void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001099</pre>
1100
Cary Clark3e73dcf2018-12-06 08:41:14 -05001101Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> respect <a href='SkFont_Reference#Subpixel'>sub-pixel</a> positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001102
Cary Clark777eede2018-11-09 16:04:58 -05001103Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1104Clears <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 -04001105
1106### Parameters
1107
Cary Clark682c58d2018-05-16 07:07:07 -04001108<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001109 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001110 </tr>
1111</table>
1112
1113### Example
1114
1115<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1116
1117#### Example Output
1118
1119~~~~
1120paint1 == paint2
1121~~~~
1122
1123</fiddle-embed></div>
1124
Cary Clarka90ea222018-10-16 10:30:28 -04001125<a name='LCD_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001126
Cary Clark3e73dcf2018-12-06 08:41:14 -05001127When set, <a href='#Font_Anti_Alias'>Font_Anti_Alias</a> takes advantage of the organization of RGB stripes that
Cary Clark777eede2018-11-09 16:04:58 -05001128create a <a href='SkColor_Reference#Color'>color</a>, and relies
1129on the small <a href='undocumented#Size'>size</a> of the stripe and visual perception to make the <a href='SkColor_Reference#Color'>color</a> fringing imperceptible.
Cary Clark3e73dcf2018-12-06 08:41:14 -05001130<a href='#Font_Anti_Alias'>Font_Anti_Alias</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark777eede2018-11-09 16:04:58 -05001131the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001132
Cary Clark682c58d2018-05-16 07:07:07 -04001133<a name='SkPaint_isLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001134
1135---
Cary Clark12799e12017-07-28 15:18:29 -04001136
Cary Clark682c58d2018-05-16 07:07:07 -04001137<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001138bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001139</pre>
1140
Cary Clark777eede2018-11-09 16:04:58 -05001141Returns true if <a href='undocumented#Glyph'>glyphs</a> may use LCD striping to improve <a href='undocumented#Glyph'>glyph</a> edges.
Cary Clark12799e12017-07-28 15:18:29 -04001142
Cary Clark777eede2018-11-09 16:04:58 -05001143Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> is set.
Cary Clark12799e12017-07-28 15:18:29 -04001144
1145### Return Value
1146
Cary Clark777eede2018-11-09 16:04:58 -05001147<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001148
1149### Example
1150
skia-bookmakera391c722018-07-09 05:28:19 +00001151<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001152
1153#### Example Output
1154
1155~~~~
1156paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1157paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1158~~~~
1159
1160</fiddle-embed></div>
1161
Cary Clark682c58d2018-05-16 07:07:07 -04001162<a name='SkPaint_setLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001163
1164---
Cary Clark12799e12017-07-28 15:18:29 -04001165
Cary Clark682c58d2018-05-16 07:07:07 -04001166<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001167void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001168</pre>
1169
Cary Clark777eede2018-11-09 16:04:58 -05001170Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> use LCD striping for <a href='undocumented#Glyph'>glyph</a> edges.
Cary Clark12799e12017-07-28 15:18:29 -04001171
Cary Clark777eede2018-11-09 16:04:58 -05001172Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1173Clears <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 -04001174
1175### Parameters
1176
Cary Clark682c58d2018-05-16 07:07:07 -04001177<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001178 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001179 </tr>
1180</table>
1181
1182### Example
1183
skia-bookmakere0a458f2018-07-16 05:29:00 +00001184<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001185
1186#### Example Output
1187
1188~~~~
1189paint1 == paint2
1190~~~~
1191
1192</fiddle-embed></div>
1193
Cary Clark3e73dcf2018-12-06 08:41:14 -05001194<a name='Embedded_Bitmaps'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001195
Cary Clarka90ea222018-10-16 10:30:28 -04001196---
Cary Clark08895c42018-02-01 09:37:32 -05001197
Cary Clark3e73dcf2018-12-06 08:41:14 -05001198<a href='#Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> allows selecting custom sized <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark777eede2018-11-09 16:04:58 -05001199<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> when set chooses an embedded <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> over an outline contained
Cary Clarkcb6bef02018-11-29 12:05:25 -05001200in a <a href='SkFont_Reference#Font'>font</a> if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001201
Cary Clark777eede2018-11-09 16:04:58 -05001202FreeType selects the <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> is set, and selects
1203the outline <a href='undocumented#Glyph'>glyph</a> if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> is clear.
1204Windows may select the <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> but is not required to do so.
1205<a href='#OS_X'>OS_X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001206
Cary Clark3e73dcf2018-12-06 08:41:14 -05001207<a href='#Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> is disabled by default.
1208<a href='#Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to
Cary Clark777eede2018-11-09 16:04:58 -05001209<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001210
1211### Example
1212
Cary Clarka560c472017-11-27 10:44:06 -05001213<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001214<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001215 includes an embedded bitmap Glyph at odd font sizes. This example works
1216 on platforms that use FreeType as their Font_Engine.
1217 Windows may, but is not required to, return a bitmap glyph if
1218 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1219 bitmap.allocN32Pixels(30, 15);
1220 bitmap.eraseColor(0);
1221 SkCanvas offscreen(bitmap);
1222 SkPaint paint;
1223 paint.setAntiAlias(true);
1224 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001225 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001226 for (bool embedded : { false, true}) {
1227 paint.setEmbeddedBitmapText(embedded);
1228 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1229 }
1230 canvas->drawBitmap(bitmap, 0, 0);
1231 canvas->scale(10, 10);
1232 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001233
Cary Clarka560c472017-11-27 10:44:06 -05001234</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001235
Cary Clark682c58d2018-05-16 07:07:07 -04001236<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001237
1238---
Cary Clark12799e12017-07-28 15:18:29 -04001239
Cary Clark682c58d2018-05-16 07:07:07 -04001240<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001241bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001242</pre>
1243
Cary Clarkcb6bef02018-11-29 12:05:25 -05001244Returns true if <a href='SkFont_Reference#Font'>font</a> engine may return <a href='undocumented#Glyph'>glyphs</a> from <a href='SkFont_Reference#Font'>font</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001245
Cary Clark777eede2018-11-09 16:04:58 -05001246Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001247
1248### Return Value
1249
Cary Clark777eede2018-11-09 16:04:58 -05001250<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001251
1252### Example
1253
1254<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1255
1256#### Example Output
1257
1258~~~~
1259paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1260paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1261~~~~
1262
1263</fiddle-embed></div>
1264
Cary Clark682c58d2018-05-16 07:07:07 -04001265<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001266
1267---
Cary Clark12799e12017-07-28 15:18:29 -04001268
Cary Clark682c58d2018-05-16 07:07:07 -04001269<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001270void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001271</pre>
1272
Cary Clark777eede2018-11-09 16:04:58 -05001273Requests, but does not require, to use <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> in fonts instead of outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001274
Cary Clark777eede2018-11-09 16:04:58 -05001275Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1276Clears <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 -04001277
1278### Parameters
1279
Cary Clark682c58d2018-05-16 07:07:07 -04001280<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001281 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001282 </tr>
1283</table>
1284
1285### Example
1286
1287<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1288
1289#### Example Output
1290
1291~~~~
1292paint1 == paint2
1293~~~~
1294
1295</fiddle-embed></div>
1296
Cary Clarka90ea222018-10-16 10:30:28 -04001297<a name='Automatic_Hinting'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001298
Cary Clark3e73dcf2018-12-06 08:41:14 -05001299If Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, <a href='#Font_Force_Hinting'>Font_Force_Hinting</a>
Cary Clark777eede2018-11-09 16:04:58 -05001300instructs the <a href='#Font_Manager'>Font_Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark3e73dcf2018-12-06 08:41:14 -05001301<a href='#Font_Force_Hinting'>Font_Force_Hinting</a> has no effect if Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001302<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001303
Cary Clark3e73dcf2018-12-06 08:41:14 -05001304<a href='#Font_Force_Hinting'>Font_Force_Hinting</a> only affects platforms that use FreeType as the <a href='#Font_Manager'>Font_Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001305
Cary Clark682c58d2018-05-16 07:07:07 -04001306<a name='SkPaint_isAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001307
1308---
Cary Clark12799e12017-07-28 15:18:29 -04001309
Cary Clark682c58d2018-05-16 07:07:07 -04001310<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001311bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001312</pre>
1313
Cary Clarkabaffd82018-11-15 08:25:12 -05001314Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or
Cary Clarkcb6bef02018-11-29 12:05:25 -05001315<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, and if platform uses FreeType as the <a href='SkFont_Reference#Font'>font</a> manager.
1316If true, instructs the <a href='SkFont_Reference#Font'>font</a> manager to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001317
Cary Clark777eede2018-11-09 16:04:58 -05001318Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001319
1320### Return Value
1321
Cary Clark777eede2018-11-09 16:04:58 -05001322<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001323
1324### Example
1325
1326<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1327
1328#### Example Output
1329
1330~~~~
1331paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1332paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1333~~~~
1334
1335</fiddle-embed></div>
1336
1337### See Also
1338
Cary Clarkabaffd82018-11-15 08:25:12 -05001339<a href='#SkPaint_setAutohinted'>setAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001340
Cary Clark682c58d2018-05-16 07:07:07 -04001341<a name='SkPaint_setAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001342
1343---
Cary Clark12799e12017-07-28 15:18:29 -04001344
Cary Clark682c58d2018-05-16 07:07:07 -04001345<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001346void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001347</pre>
1348
Cary Clark09d80c02018-10-31 12:14:03 -04001349Sets whether to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001350If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
Cary Clark777eede2018-11-09 16:04:58 -05001351and <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is set, instructs the <a href='undocumented#Font_Manager'>font manager</a> to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark3e73dcf2018-12-06 08:41:14 -05001352<a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> has no effect if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001353<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001354
Cary Clark09d80c02018-10-31 12:14:03 -04001355Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>font manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001356
Cary Clark777eede2018-11-09 16:04:58 -05001357Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1358Clears <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 -04001359
1360### Parameters
1361
Cary Clark682c58d2018-05-16 07:07:07 -04001362<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001363 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001364 </tr>
1365</table>
1366
1367### Example
1368
1369<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1370
1371### See Also
1372
Cary Clarkabaffd82018-11-15 08:25:12 -05001373<a href='#SkPaint_isAutohinted'>isAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001374
Cary Clarka90ea222018-10-16 10:30:28 -04001375<a name='Fake_Bold'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001376
Cary Clarka90ea222018-10-16 10:30:28 -04001377---
Cary Clark08895c42018-02-01 09:37:32 -05001378
Cary Clark3e73dcf2018-12-06 08:41:14 -05001379<a href='#Font_Embolden'>Font_Embolden</a> approximates the bold <a href='SkFont_Reference#Font'>font</a> style accompanying a normal <a href='SkFont_Reference#Font'>font</a> when a bold <a href='SkFont_Reference#Font'>font</a> face
Cary Clarkcb6bef02018-11-29 12:05:25 -05001380is not available. Skia does not provide <a href='SkFont_Reference#Font'>font</a> substitution; it is up to the client to find the
1381bold <a href='SkFont_Reference#Font'>font</a> face using the platform <a href='#Font_Manager'>Font_Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001382
Cary Clarkcb6bef02018-11-29 12:05:25 -05001383Use <a href='#Paint_Text_Skew_X'>Text_Skew_X</a> to approximate an italic <a href='SkFont_Reference#Font'>font</a> style when the italic <a href='SkFont_Reference#Font'>font</a> face
Cary Clark777eede2018-11-09 16:04:58 -05001384is not available.
Cary Clark12799e12017-07-28 15:18:29 -04001385
Cary Clark777eede2018-11-09 16:04:58 -05001386A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clarkcb6bef02018-11-29 12:05:25 -05001387the <a href='SkFont_Reference#Font_Engine'>font engine</a> to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark777eede2018-11-09 16:04:58 -05001388by increasing the <a href='#Stroke_Width'>stroke width</a> 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 -04001389
Cary Clark3e73dcf2018-12-06 08:41:14 -05001390<a href='#Font_Embolden'>Font_Embolden</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001391
1392### Example
1393
1394<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1395
Cary Clark682c58d2018-05-16 07:07:07 -04001396<a name='SkPaint_isFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001397
1398---
Cary Clark12799e12017-07-28 15:18:29 -04001399
Cary Clark682c58d2018-05-16 07:07:07 -04001400<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001401bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001402</pre>
1403
Cary Clark77b3f3a2018-11-07 14:59:03 -05001404Returns true if approximate bold by increasing the stroke width when creating <a href='undocumented#Glyph'>glyph</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a>
Cary Clark12799e12017-07-28 15:18:29 -04001405from outlines.
1406
Cary Clark777eede2018-11-09 16:04:58 -05001407Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001408
1409### Return Value
1410
Cary Clark777eede2018-11-09 16:04:58 -05001411<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001412
1413### Example
1414
1415<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1416
1417#### Example Output
1418
1419~~~~
1420paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1421paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1422~~~~
1423
1424</fiddle-embed></div>
1425
Cary Clark682c58d2018-05-16 07:07:07 -04001426<a name='SkPaint_setFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001427
1428---
Cary Clark12799e12017-07-28 15:18:29 -04001429
Cary Clark682c58d2018-05-16 07:07:07 -04001430<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001431void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001432</pre>
1433
Cary Clark777eede2018-11-09 16:04:58 -05001434Increases <a href='#Stroke_Width'>stroke width</a> when creating <a href='undocumented#Glyph'>glyph</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> to approximate a bold <a href='undocumented#Typeface'>typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001435
Cary Clark777eede2018-11-09 16:04:58 -05001436Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1437Clears <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 -04001438
1439### Parameters
1440
Cary Clark682c58d2018-05-16 07:07:07 -04001441<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001442 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001443 </tr>
1444</table>
1445
1446### Example
1447
1448<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1449
1450#### Example Output
1451
1452~~~~
1453paint1 == paint2
1454~~~~
1455
1456</fiddle-embed></div>
1457
Cary Clarka90ea222018-10-16 10:30:28 -04001458<a name='Filter_Quality_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001459
Cary Clarka90ea222018-10-16 10:30:28 -04001460---
Cary Clark08895c42018-02-01 09:37:32 -05001461
Cary Clark777eede2018-11-09 16:04:58 -05001462<a href='#Filter_Quality'>Filter_Quality</a> trades speed for <a href='SkImage_Reference#Image'>image</a> filtering when the <a href='SkImage_Reference#Image'>image</a> is scaled.
1463A lower <a href='#Filter_Quality'>Filter_Quality</a> draws faster, but has less fidelity.
1464A higher <a href='#Filter_Quality'>Filter_Quality</a> draws slower, but looks better.
1465If the <a href='SkImage_Reference#Image'>image</a> is drawn without scaling, the <a href='#Filter_Quality'>Filter_Quality</a> choice will not result
1466in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001467
Cary Clark777eede2018-11-09 16:04:58 -05001468<a href='#Filter_Quality'>Filter_Quality</a> is used in <a href='SkPaint_Reference#Paint'>Paint</a> passed as a parameter to
Cary Clark12799e12017-07-28 15:18:29 -04001469
1470<table> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001471 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmap'>drawBitmap</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001472 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001473 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmapRect'>drawBitmapRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001474 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001475 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImage'>drawImage</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001476 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001477 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImageRect'>drawImageRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001478 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001479</table>
1480
Cary Clark777eede2018-11-09 16:04:58 -05001481and when <a href='SkPaint_Reference#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 -04001482
Cary Clark777eede2018-11-09 16:04:58 -05001483<a href='#Filter_Quality'>Filter_Quality</a> is <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04001484
1485### Example
1486
skia-bookmaker525f9a92018-05-03 06:27:39 +00001487<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001488
Cary Clark682c58d2018-05-16 07:07:07 -04001489<a name='SkPaint_getFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001490
1491---
Cary Clark12799e12017-07-28 15:18:29 -04001492
Cary Clark682c58d2018-05-16 07:07:07 -04001493<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001494<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001495</pre>
1496
Cary Clark777eede2018-11-09 16:04:58 -05001497Returns <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1498draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
Cary Clark12799e12017-07-28 15:18:29 -04001499
1500### Return Value
1501
Cary Clark682c58d2018-05-16 07:07:07 -04001502one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
Cary Clark09d80c02018-10-31 12:14:03 -04001503
Cary Clark682c58d2018-05-16 07:07:07 -04001504<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001505
1506### Example
1507
1508<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1509
1510#### Example Output
1511
1512~~~~
1513kNone_SkFilterQuality == paint.getFilterQuality()
1514~~~~
1515
1516</fiddle-embed></div>
1517
Cary Clark682c58d2018-05-16 07:07:07 -04001518<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001519
1520---
Cary Clark12799e12017-07-28 15:18:29 -04001521
Cary Clark682c58d2018-05-16 07:07:07 -04001522<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001523void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001524</pre>
1525
Cary Clark777eede2018-11-09 16:04:58 -05001526Sets <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1527draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
1528Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001529
1530### Parameters
1531
Cary Clark682c58d2018-05-16 07:07:07 -04001532<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001533 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,</td>
Cary Clark12799e12017-07-28 15:18:29 -04001534 </tr>
1535</table>
1536
Cary Clark09d80c02018-10-31 12:14:03 -04001537<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
1538
Cary Clark12799e12017-07-28 15:18:29 -04001539### Example
1540
1541<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1542
1543#### Example Output
1544
1545~~~~
1546kHigh_SkFilterQuality == paint.getFilterQuality()
1547~~~~
1548
1549</fiddle-embed></div>
1550
1551### See Also
1552
Cary Clark77b3f3a2018-11-07 14:59:03 -05001553<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#Image_Scaling'>Image_Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001554
Cary Clarka90ea222018-10-16 10:30:28 -04001555<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001556
Cary Clarka90ea222018-10-16 10:30:28 -04001557---
Cary Clark12799e12017-07-28 15:18:29 -04001558
Cary Clarkab2621d2018-01-30 10:08:57 -05001559| name | description |
1560| --- | --- |
Cary Clark777eede2018-11-09 16:04:58 -05001561| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='#Color_Alpha'>Color_Alpha</a> and RGB, one drawing <a href='SkColor_Reference#Color'>color</a> |
1562| <a href='#SkPaint_setColor'>setColor</a> | sets <a href='#Color_Alpha'>Color_Alpha</a> and RGB, one drawing <a href='SkColor_Reference#Color'>color</a> |
Cary Clark12799e12017-07-28 15:18:29 -04001563
Cary Clark777eede2018-11-09 16:04:58 -05001564<a href='SkColor_Reference#Color'>Color</a> specifies the red, blue, green, and <a href='#Color_Alpha'>Color_Alpha</a>
1565values used to draw a filled or stroked shape in a 32-bit value. Each component
1566occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1567All values in any combination are valid.
Cary Clarkab2621d2018-01-30 10:08:57 -05001568
Cary Clark777eede2018-11-09 16:04:58 -05001569<a href='SkColor_Reference#Color'>Color</a> is not <a href='undocumented#Premultiply'>Premultiplied</a>; <a href='#Color_Alpha'>Color_Alpha</a> sets the transparency independent of
1570RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001571
Cary Clark777eede2018-11-09 16:04:58 -05001572The bit positions of <a href='#Color_Alpha'>Color_Alpha</a> and RGB are independent of the bit
1573positions on the output <a href='undocumented#Device'>device</a>, which may have more or fewer bits, and may have
1574a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001575
Cary Clark77b3f3a2018-11-07 14:59:03 -05001576| bit positions | <a href='#Color_Alpha'>Color_Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001577| --- | --- | --- | --- | --- |
1578| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1579
1580### Example
1581
Ravi Mistry874e22b2018-07-19 03:49:13 +00001582<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001583
Cary Clark682c58d2018-05-16 07:07:07 -04001584<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001585
1586---
Cary Clark12799e12017-07-28 15:18:29 -04001587
Cary Clark682c58d2018-05-16 07:07:07 -04001588<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001589<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001590</pre>
1591
Cary Clark777eede2018-11-09 16:04:58 -05001592Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, packed into 32 bits.
1593Use helpers <a href='SkColor_Reference#SkColorGetA'>SkColorGetA</a>(), <a href='SkColor_Reference#SkColorGetR'>SkColorGetR</a>(), <a href='SkColor_Reference#SkColorGetG'>SkColorGetG</a>(), and <a href='SkColor_Reference#SkColorGetB'>SkColorGetB</a>() to extract
1594a <a href='SkColor_Reference#Color'>color</a> component.
Cary Clark12799e12017-07-28 15:18:29 -04001595
1596### Return Value
1597
Cary Clark777eede2018-11-09 16:04:58 -05001598<a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001599
1600### Example
1601
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001602<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001603
1604#### Example Output
1605
1606~~~~
1607Yellow is 100% red, 100% green, and 0% blue.
1608~~~~
1609
1610</fiddle-embed></div>
1611
1612### See Also
1613
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001614<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1615
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001616<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001617
1618---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001619
1620<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001621<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>()const
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001622</pre>
1623
Cary Clark777eede2018-11-09 16:04:58 -05001624Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, as four floating <a href='SkPoint_Reference#Point'>point</a> values. RGB are
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001625are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1626
1627### Return Value
1628
Cary Clark777eede2018-11-09 16:04:58 -05001629<a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001630
1631### Example
1632
1633<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1634
1635#### Example Output
1636
1637~~~~
1638Yellow is 100% red, 100% green, and 0% blue.
1639~~~~
1640
1641</fiddle-embed></div>
1642
1643### See Also
1644
1645<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001646
Cary Clark682c58d2018-05-16 07:07:07 -04001647<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001648
1649---
Cary Clark12799e12017-07-28 15:18:29 -04001650
Cary Clark682c58d2018-05-16 07:07:07 -04001651<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -05001652void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='SkColor_Reference#Color'>color</a>)
Cary Clark12799e12017-07-28 15:18:29 -04001653</pre>
1654
Cary Clark777eede2018-11-09 16:04:58 -05001655Sets <a href='SkColor_Reference#Alpha'>alpha</a> and RGB used when stroking and filling. The <a href='#SkPaint_setColor_color'>color</a> is a 32-bit value,
1656<a href='undocumented#Unpremultiply'>unpremultiplied</a>, packing 8-bit components for <a href='SkColor_Reference#Alpha'>alpha</a>, red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04001657
1658### Parameters
1659
Cary Clark682c58d2018-05-16 07:07:07 -04001660<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001661 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001662 </tr>
1663</table>
1664
1665### Example
1666
skia-bookmaker233c6522018-07-04 05:33:26 +00001667<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001668
1669#### Example Output
1670
1671~~~~
1672green1 == green2
1673~~~~
1674
1675</fiddle-embed></div>
1676
1677### See Also
1678
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001679<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setColor4f'>setColor4f</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
1680
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001681<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001682
1683---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001684
1685<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001686void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& <a href='SkColor_Reference#Color'>color</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001687</pre>
1688
Cary Clark777eede2018-11-09 16:04:58 -05001689Sets <a href='SkColor_Reference#Alpha'>alpha</a> and RGB used when stroking and filling. The <a href='#SkPaint_setColor4f_color'>color</a> is four floating
1690<a href='SkPoint_Reference#Point'>point</a> values, <a href='undocumented#Unpremultiply'>unpremultiplied</a>. The <a href='#SkPaint_setColor4f_color'>color</a> values are interpreted as being in
1691the <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a>. If <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a> is nullptr, then <a href='#SkPaint_setColor4f_color'>color</a> is assumed to be in the
Cary Clark09d80c02018-10-31 12:14:03 -04001692sRGB <a href='undocumented#Color_Space'>color space</a>.
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001693
1694### Parameters
1695
1696<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001697 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA</td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001698 </tr>
1699 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001700 <td><a href='undocumented#SkColorSpace'>SkColorSpace</a> describing the encoding of <a href='#SkPaint_setColor4f_color'>color</a></td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001701 </tr>
1702</table>
1703
1704### Example
1705
1706<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
1707
1708#### Example Output
1709
1710~~~~
1711green1 == green2
1712~~~~
1713
1714</fiddle-embed></div>
1715
1716### See Also
1717
1718<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setColor'>setColor</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001719
Cary Clarka90ea222018-10-16 10:30:28 -04001720<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001721
Cary Clark777eede2018-11-09 16:04:58 -05001722<a href='#Color_Alpha'>Color_Alpha</a> sets the transparency independent of RGB: red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04001723
Cary Clark682c58d2018-05-16 07:07:07 -04001724<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001725
1726---
Cary Clark12799e12017-07-28 15:18:29 -04001727
Cary Clark682c58d2018-05-16 07:07:07 -04001728<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001729uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001730</pre>
1731
Cary Clark777eede2018-11-09 16:04:58 -05001732Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> from the <a href='SkColor_Reference#Color'>color</a> used when stroking and filling.
Cary Clark12799e12017-07-28 15:18:29 -04001733
1734### Return Value
1735
Cary Clark777eede2018-11-09 16:04:58 -05001736<a href='SkColor_Reference#Alpha'>alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001737
1738### Example
1739
Cary Clark83647062018-07-18 16:21:51 -04001740<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04001741
1742#### Example Output
1743
1744~~~~
1745255 == paint.getAlpha()
1746~~~~
1747
1748</fiddle-embed></div>
1749
Cary Clark682c58d2018-05-16 07:07:07 -04001750<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001751
1752---
Cary Clark12799e12017-07-28 15:18:29 -04001753
Cary Clark682c58d2018-05-16 07:07:07 -04001754<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001755void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04001756</pre>
1757
Cary Clark777eede2018-11-09 16:04:58 -05001758Replaces <a href='SkColor_Reference#Alpha'>alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04001759unchanged. An out of range value triggers an assert in the debug
Cary Clark777eede2018-11-09 16:04:58 -05001760build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
1761<a href='#SkPaint_setAlpha_a'>a</a> set to zero makes <a href='SkColor_Reference#Color'>color</a> fully transparent; <a href='#SkPaint_setAlpha_a'>a</a> set to 255 makes <a href='SkColor_Reference#Color'>color</a>
Cary Clark12799e12017-07-28 15:18:29 -04001762fully opaque.
1763
1764### Parameters
1765
Cary Clark682c58d2018-05-16 07:07:07 -04001766<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001767 <td><a href='SkColor_Reference#Alpha'>alpha</a> component of <a href='SkColor_Reference#Color'>color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001768 </tr>
1769</table>
1770
1771### Example
1772
Ravi Mistry874e22b2018-07-19 03:49:13 +00001773<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04001774
1775#### Example Output
1776
1777~~~~
17780x44112233 == paint.getColor()
1779~~~~
1780
1781</fiddle-embed></div>
1782
Cary Clark682c58d2018-05-16 07:07:07 -04001783<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001784
1785---
Cary Clark12799e12017-07-28 15:18:29 -04001786
Cary Clark682c58d2018-05-16 07:07:07 -04001787<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001788void <a href='#SkPaint_setARGB'>setARGB</a>(<a href='undocumented#U8CPU'>U8CPU</a> a, <a href='undocumented#U8CPU'>U8CPU</a> r, <a href='undocumented#U8CPU'>U8CPU</a> g, <a href='undocumented#U8CPU'>U8CPU</a> b)
Cary Clark12799e12017-07-28 15:18:29 -04001789</pre>
1790
Cary Clark777eede2018-11-09 16:04:58 -05001791Sets <a href='SkColor_Reference#Color'>color</a> used when drawing solid fills. The <a href='SkColor_Reference#Color'>color</a> components range from 0 to 255.
1792The <a href='SkColor_Reference#Color'>color</a> is <a href='undocumented#Unpremultiply'>unpremultiplied</a>; <a href='SkColor_Reference#Alpha'>alpha</a> sets the transparency independent of RGB.
Cary Clark12799e12017-07-28 15:18:29 -04001793
1794### Parameters
1795
Cary Clark682c58d2018-05-16 07:07:07 -04001796<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001797 <td>amount of <a href='SkColor_Reference#Alpha'>alpha</a>, from fully transparent (0) to fully opaque (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001798 </tr>
1799 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001800 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001801 </tr>
1802 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001803 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001804 </tr>
1805 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001806 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04001807 </tr>
1808</table>
1809
1810### Example
1811
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001812<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04001813
1814#### Example Output
1815
1816~~~~
1817transRed1 == transRed2
1818~~~~
1819
1820</fiddle-embed></div>
1821
1822### See Also
1823
Cary Clark682c58d2018-05-16 07:07:07 -04001824<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001825
Cary Clarka90ea222018-10-16 10:30:28 -04001826<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001827
Cary Clarka90ea222018-10-16 10:30:28 -04001828---
Cary Clark08895c42018-02-01 09:37:32 -05001829
Cary Clark777eede2018-11-09 16:04:58 -05001830<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
1831Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001832
Cary Clarka90ea222018-10-16 10:30:28 -04001833<a name='Style_Fill'></a>
1834
Cary Clark777eede2018-11-09 16:04:58 -05001835Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kFill_Style'>kFill_Style</a> to fill the shape.
1836The fill covers the area inside the geometry for most shapes.
Cary Clark12799e12017-07-28 15:18:29 -04001837
Cary Clarka90ea222018-10-16 10:30:28 -04001838<a name='Style_Stroke'></a>
1839
Cary Clark777eede2018-11-09 16:04:58 -05001840Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> to stroke the shape.
Cary Clark12799e12017-07-28 15:18:29 -04001841
Cary Clark777eede2018-11-09 16:04:58 -05001842The stroke covers the area described by following the shape edge with a pen or brush of
1843<a href='#Paint_Stroke_Width'>Stroke_Width</a>. The area covered where the shape starts and stops is described by <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>.
1844The area covered where the shape turns a corner is described by <a href='#Paint_Stroke_Join'>Stroke_Join</a>.
1845The stroke is centered on the shape; it extends equally on either side of the shape edge.As <a href='#Paint_Stroke_Width'>Stroke_Width</a> gets smaller, the drawn <a href='SkPath_Reference#Path'>path</a> frame is thinner. <a href='#Paint_Stroke_Width'>Stroke_Width</a> less than one
1846may have gaps, and if <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is set, <a href='#Color_Alpha'>Color_Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001847
Cary Clarka90ea222018-10-16 10:30:28 -04001848### See Also
Cary Clark12799e12017-07-28 15:18:29 -04001849
Cary Clark77b3f3a2018-11-07 14:59:03 -05001850<a href='#Path_Fill_Type'>Path_Fill_Type</a> <a href='#Path_Effect'>Path_Effect</a> <a href='#Paint_Style_Fill'>Style_Fill</a> <a href='#Paint_Style_Stroke'>Style_Stroke</a>
Cary Clarka90ea222018-10-16 10:30:28 -04001851
1852<a name='Hairline'></a>
1853
1854---
1855
Cary Clark777eede2018-11-09 16:04:58 -05001856<a href='#Paint_Stroke_Width'>Stroke_Width</a> of zero has a special meaning and switches drawing to use Hairline.
1857Hairline draws the thinnest continuous frame. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is clear, adjacent pixels
1858flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04001859
Cary Clark777eede2018-11-09 16:04:58 -05001860<a href='SkPath_Reference#Path'>Path</a> drawing with Hairline may hit the same <a href='undocumented#Pixel'>pixel</a> more than once. For instance, <a href='SkPath_Reference#Path'>Path</a> containing
1861two <a href='undocumented#Line'>lines</a> in one <a href='#Path_Overview_Contour'>Path_Contour</a> will draw the corner <a href='SkPoint_Reference#Point'>point</a> once, but may both <a href='undocumented#Line'>lines</a> may draw the adjacent
1862<a href='undocumented#Pixel'>pixel</a>. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is set, transparency is applied twice, resulting in a darker <a href='undocumented#Pixel'>pixel</a>. Some
1863GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
1864while stroking.
Cary Clark12799e12017-07-28 15:18:29 -04001865
Cary Clarka90ea222018-10-16 10:30:28 -04001866### See Also
1867
Cary Clark77b3f3a2018-11-07 14:59:03 -05001868<a href='#Path_Fill_Type'>Path_Fill_Type</a> <a href='#Path_Effect'>Path_Effect</a> <a href='#Paint_Style_Fill'>Style_Fill</a> <a href='#Paint_Style_Stroke'>Style_Stroke</a>
Cary Clarka90ea222018-10-16 10:30:28 -04001869
1870<a name='SkPaint_Style'></a>
1871
1872---
Cary Clark12799e12017-07-28 15:18:29 -04001873
Cary Clarka560c472017-11-27 10:44:06 -05001874<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001875 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04001876 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
1877 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
1878 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04001879 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05001880
Cary Clarka90ea222018-10-16 10:30:28 -04001881</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04001882
Cary Clarka90ea222018-10-16 10:30:28 -04001883<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04001884 static constexpr int <a href='#SkPaint_kStyleCount'>kStyleCount</a> = <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> + 1;
Cary Clark1a8d7622018-03-05 13:26:16 -05001885</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001886
Cary Clark777eede2018-11-09 16:04:58 -05001887Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
1888The stroke and fill
1889share all <a href='SkPaint_Reference#Paint'>paint</a> attributes; for instance, they are drawn with the same <a href='SkColor_Reference#Color'>color</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001890
Cary Clark777eede2018-11-09 16:04:58 -05001891Use <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> to avoid hitting the same pixels twice with a stroke draw and
1892a fill draw.
Cary Clark12799e12017-07-28 15:18:29 -04001893
1894### Constants
1895
Cary Clark682c58d2018-05-16 07:07:07 -04001896<table style='border-collapse: collapse; width: 62.5em'>
1897 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1898<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1899<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1900 <tr style='background-color: #f0f0f0; '>
1901 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
1902 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001904Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#RRect'>Round_Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
1905<a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkImage_Reference#Image'>Image</a>, <a href='undocumented#Patch'>Patches</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='undocumented#Sprite'>Sprites</a>, and <a href='undocumented#Vertices'>Vertices</a> are painted as if
1906<a href='#SkPaint_kFill_Style'>kFill_Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
1907The <a href='#Path_Fill_Type'>Path_Fill_Type</a> specifies additional rules to fill the area outside the <a href='SkPath_Reference#Path'>path</a> edge,
1908and to create an unfilled hole inside the shape.
1909<a href='#SkPaint_Style'>Style</a> is set to <a href='#SkPaint_kFill_Style'>kFill_Style</a> by default.
Cary Clark1a8d7622018-03-05 13:26:16 -05001910</td>
Cary Clark12799e12017-07-28 15:18:29 -04001911 </tr>
1912 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001913 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
1914 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1915 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001916Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#RRect'>Round_Rect</a>, <a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
1917<a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Line'>Lines</a>, and <a href='SkPoint_Reference#Point'>points</a>, are always drawn as if <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> is set,
1918and ignore the set <a href='#SkPaint_Style'>Style</a>.
1919The stroke construction is unaffected by the <a href='#Path_Fill_Type'>Path_Fill_Type</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001920</td>
1921 </tr>
1922 <tr style='background-color: #f0f0f0; '>
1923 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
1924 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1925 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001926Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#RRect'>Round_Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
1927<a href='SkPath_Reference#Path'>Path</a> is treated as if it is set to <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>,
1928and the set <a href='#Path_Fill_Type'>Path_Fill_Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05001929</td>
Cary Clark12799e12017-07-28 15:18:29 -04001930 </tr>
1931 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001932 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
1933 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1934 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001935May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05001936</td>
Cary Clark12799e12017-07-28 15:18:29 -04001937 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001938</table>
Cary Clark12799e12017-07-28 15:18:29 -04001939
Cary Clark682c58d2018-05-16 07:07:07 -04001940<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001941
1942---
Cary Clark12799e12017-07-28 15:18:29 -04001943
Cary Clark682c58d2018-05-16 07:07:07 -04001944<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001945<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001946</pre>
1947
Cary Clark80247e52018-07-11 16:18:41 -04001948Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001949
1950### Return Value
1951
Cary Clark09d80c02018-10-31 12:14:03 -04001952one 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 -04001953
1954### Example
1955
1956<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
1957
1958#### Example Output
1959
1960~~~~
1961SkPaint::kFill_Style == paint.getStyle()
1962~~~~
1963
1964</fiddle-embed></div>
1965
1966### See Also
1967
Cary Clark682c58d2018-05-16 07:07:07 -04001968<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04001969
Cary Clark682c58d2018-05-16 07:07:07 -04001970<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001971
1972---
Cary Clark12799e12017-07-28 15:18:29 -04001973
Cary Clark682c58d2018-05-16 07:07:07 -04001974<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001975void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04001976</pre>
1977
1978Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark777eede2018-11-09 16:04:58 -05001979Has no effect if <a href='#SkPaint_setStyle_style'>style</a> is not a legal <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Style'>Style</a> value.
Cary Clark12799e12017-07-28 15:18:29 -04001980
1981### Parameters
1982
Cary Clark682c58d2018-05-16 07:07:07 -04001983<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001984 <td>one 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 -04001985 </tr>
1986</table>
1987
1988### Example
1989
1990<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
1991
1992### See Also
1993
Cary Clark682c58d2018-05-16 07:07:07 -04001994<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04001995
Cary Clarka90ea222018-10-16 10:30:28 -04001996<a name='Stroke_Width'></a>
1997
Cary Clark12799e12017-07-28 15:18:29 -04001998---
1999
Cary Clark777eede2018-11-09 16:04:58 -05002000<a href='#Paint_Stroke_Width'>Stroke_Width</a> sets the width for stroking. The width is the thickness
2001of the stroke perpendicular to the <a href='SkPath_Reference#Path_Direction'>path direction</a> when the <a href='SkPaint_Reference#Paint'>paint style</a> is
2002set 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 -04002003
Cary Clark777eede2018-11-09 16:04:58 -05002004When width is greater than zero, the stroke encompasses as many pixels partially
2005or fully as needed. When the width equals zero, the <a href='SkPaint_Reference#Paint'>paint</a> enables hairlines;
2006the stroke is always one <a href='undocumented#Pixel'>pixel</a> wide.
Cary Clark12799e12017-07-28 15:18:29 -04002007
Cary Clark777eede2018-11-09 16:04:58 -05002008The stroke dimensions are scaled by the <a href='SkCanvas_Reference#Canvas_Matrix'>canvas matrix</a>, but Hairline stroke
2009remains one <a href='undocumented#Pixel'>pixel</a> wide regardless of scaling.
Cary Clark12799e12017-07-28 15:18:29 -04002010
Cary Clark777eede2018-11-09 16:04:58 -05002011The default width for the <a href='SkPaint_Reference#Paint'>paint</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04002012
2013### Example
2014
Cary Clark777eede2018-11-09 16:04:58 -05002015<div><fiddle-embed name="5112c7209a19e035c61cef33a624a652" gpu="true"><div>The pixels hit to represent thin <a href='undocumented#Line'>lines</a> vary with the angle of the
2016<a href='undocumented#Line'>line</a> and the platform implementation.
Cary Clark1a8d7622018-03-05 13:26:16 -05002017</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002018
Cary Clark682c58d2018-05-16 07:07:07 -04002019<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002020
2021---
Cary Clark12799e12017-07-28 15:18:29 -04002022
Cary Clark682c58d2018-05-16 07:07:07 -04002023<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002024<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002025</pre>
2026
Cary Clark777eede2018-11-09 16:04:58 -05002027Returns the thickness of the pen used by <a href='SkPaint_Reference#SkPaint'>SkPaint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002028outline the shape.
2029
2030### Return Value
2031
Cary Clark09d80c02018-10-31 12:14:03 -04002032zero for hairline, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002033
2034### Example
2035
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002036<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002037
2038#### Example Output
2039
2040~~~~
20410 == paint.getStrokeWidth()
2042~~~~
2043
2044</fiddle-embed></div>
2045
Cary Clark682c58d2018-05-16 07:07:07 -04002046<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002047
2048---
Cary Clark12799e12017-07-28 15:18:29 -04002049
Cary Clark682c58d2018-05-16 07:07:07 -04002050<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002051void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002052</pre>
2053
Cary Clark777eede2018-11-09 16:04:58 -05002054Sets the thickness of the pen used by the <a href='SkPaint_Reference#Paint'>paint</a> to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002055outline the shape.
Cary Clark777eede2018-11-09 16:04:58 -05002056Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002057
2058### Parameters
2059
Cary Clark682c58d2018-05-16 07:07:07 -04002060<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002061 <td>zero thickness for hairline; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002062 </tr>
2063</table>
2064
2065### Example
2066
2067<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2068
2069#### Example Output
2070
2071~~~~
20725 == paint.getStrokeWidth()
2073~~~~
2074
2075</fiddle-embed></div>
2076
Cary Clarka90ea222018-10-16 10:30:28 -04002077<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002078
Cary Clarka90ea222018-10-16 10:30:28 -04002079---
Cary Clark08895c42018-02-01 09:37:32 -05002080
Cary Clark777eede2018-11-09 16:04:58 -05002081<a href='#Paint_Miter_Limit'>Miter_Limit</a> specifies the maximum miter length,
2082relative to the <a href='#Stroke_Width'>stroke width</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002083
Cary Clark777eede2018-11-09 16:04:58 -05002084<a href='#Paint_Miter_Limit'>Miter_Limit</a> is used when the <a href='#Paint_Stroke_Join'>Stroke_Join</a>
2085is 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>
2086or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002087
Cary Clark777eede2018-11-09 16:04:58 -05002088If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>
2089is replaced with <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002090
Cary Clark777eede2018-11-09 16:04:58 -05002091<a href='#Paint_Miter_Limit'>Miter_Limit</a> can be computed from the corner angle using:
Cary Clark77b3f3a2018-11-07 14:59:03 -05002092<code><a href='#Miter_Limit'>miter limit</a> = 1 / sin ( angle / 2 )</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002093
Cary Clark777eede2018-11-09 16:04:58 -05002094<a href='#Paint_Miter_Limit'>Miter_Limit</a> default value is 4.
2095The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults_MiterLimit</a>
2096in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002097
Cary Clark777eede2018-11-09 16:04:58 -05002098Here are some miter limits and the angles that triggers them.
Cary Clark12799e12017-07-28 15:18:29 -04002099
Cary Clark77b3f3a2018-11-07 14:59:03 -05002100| <a href='#Miter_Limit'>miter limit</a> | angle in degrees |
Cary Clark12799e12017-07-28 15:18:29 -04002101| --- | --- |
2102| 10 | 11.48 |
2103| 9 | 12.76 |
2104| 8 | 14.36 |
2105| 7 | 16.43 |
2106| 6 | 19.19 |
2107| 5 | 23.07 |
2108| 4 | 28.96 |
2109| 3 | 38.94 |
2110| 2 | 60 |
2111| 1 | 180 |
2112
2113### Example
2114
Cary Clarka619d452018-07-16 08:12:01 -04002115<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark77b3f3a2018-11-07 14:59:03 -05002116When the <a href='#Miter_Limit'>miter limit</a> is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002117by a bevel join.
2118</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002119
Cary Clark682c58d2018-05-16 07:07:07 -04002120<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002121
2122---
Cary Clark12799e12017-07-28 15:18:29 -04002123
Cary Clark682c58d2018-05-16 07:07:07 -04002124<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002125<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002126</pre>
2127
Cary Clark80247e52018-07-11 16:18:41 -04002128Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002129
2130### Return Value
2131
Cary Clark77b3f3a2018-11-07 14:59:03 -05002132zero and greater miter limit
Cary Clark12799e12017-07-28 15:18:29 -04002133
2134### Example
2135
2136<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2137
2138#### Example Output
2139
2140~~~~
2141default miter limit == 4
2142~~~~
2143
2144</fiddle-embed></div>
2145
2146### See Also
2147
Cary Clark77b3f3a2018-11-07 14:59:03 -05002148<a href='#Paint_Miter_Limit'>Miter_Limit</a> <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002149
Cary Clark682c58d2018-05-16 07:07:07 -04002150<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002151
2152---
Cary Clark12799e12017-07-28 15:18:29 -04002153
Cary Clark682c58d2018-05-16 07:07:07 -04002154<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002155void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002156</pre>
2157
Cary Clark80247e52018-07-11 16:18:41 -04002158Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002159Valid values are zero and greater.
Cary Clark777eede2018-11-09 16:04:58 -05002160Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002161
2162### Parameters
2163
Cary Clark682c58d2018-05-16 07:07:07 -04002164<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002165 <td>zero and greater <a href='#Miter_Limit'>miter limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002166 </tr>
2167</table>
2168
2169### Example
2170
skia-bookmakera717ca92018-07-08 05:32:09 +00002171<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002172
2173#### Example Output
2174
2175~~~~
2176default miter limit == 8
2177~~~~
2178
2179</fiddle-embed></div>
2180
2181### See Also
2182
Cary Clark77b3f3a2018-11-07 14:59:03 -05002183<a href='#Paint_Miter_Limit'>Miter_Limit</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002184
Cary Clarka90ea222018-10-16 10:30:28 -04002185<a name='Stroke_Cap'></a>
2186
2187<a name='SkPaint_Cap'></a>
2188
Cary Clark12799e12017-07-28 15:18:29 -04002189---
2190
Cary Clarka560c472017-11-27 10:44:06 -05002191<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002192 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002193 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2194 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2195 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002196 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2197 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002198 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05002199
Cary Clarka90ea222018-10-16 10:30:28 -04002200</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002201
Cary Clarka90ea222018-10-16 10:30:28 -04002202<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002203 static constexpr int <a href='#SkPaint_kCapCount'>kCapCount</a> = <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> + 1;
Cary Clark1a8d7622018-03-05 13:26:16 -05002204</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002205
Cary Clark777eede2018-11-09 16:04:58 -05002206<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> draws at the beginning and end of an open <a href='#Path_Overview_Contour'>Path_Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002207
2208### Constants
2209
Cary Clark682c58d2018-05-16 07:07:07 -04002210<table style='border-collapse: collapse; width: 62.5em'>
2211 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2212<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2213<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2214 <tr style='background-color: #f0f0f0; '>
2215 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2216 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2217 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2218Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002219</td>
Cary Clark12799e12017-07-28 15:18:29 -04002220 </tr>
2221 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002222 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2223 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2224 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002225Adds a <a href='undocumented#Circle'>circle</a> with a diameter equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2226and end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002227</td>
Cary Clark12799e12017-07-28 15:18:29 -04002228 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002229 <tr style='background-color: #f0f0f0; '>
2230 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2231 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2232 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002233Adds a square with sides equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2234and end. The square sides are parallel to the initial and final direction
2235of the stroke.
Cary Clark1a8d7622018-03-05 13:26:16 -05002236</td>
Cary Clark12799e12017-07-28 15:18:29 -04002237 </tr>
2238 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002239 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2240 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2241 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002242Equivalent to the largest value for <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002243</td>
2244 </tr>
2245 <tr style='background-color: #f0f0f0; '>
2246 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2247 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2248 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002249<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is set to <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> by default.
Cary Clark1a8d7622018-03-05 13:26:16 -05002250</td>
Cary Clark12799e12017-07-28 15:18:29 -04002251 </tr>
2252 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002253 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2254 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2255 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002256May be used to verify that <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002257</td>
Cary Clark12799e12017-07-28 15:18:29 -04002258 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002259</table>
Cary Clark12799e12017-07-28 15:18:29 -04002260
Cary Clark777eede2018-11-09 16:04:58 -05002261Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2262follows the <a href='#Path_Overview_Contour'>Path_Contour</a>, moving parallel to the <a href='SkPath_Overview#Contour'>contour</a> direction.
Cary Clark12799e12017-07-28 15:18:29 -04002263
Cary Clark777eede2018-11-09 16:04:58 -05002264If the <a href='#Path_Overview_Contour'>Path_Contour</a> is not terminated by <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_kClose_Verb'>kClose_Verb</a>, the <a href='SkPath_Overview#Contour'>contour</a> has a
2265visible beginning and end.
Cary Clark12799e12017-07-28 15:18:29 -04002266
Cary Clark777eede2018-11-09 16:04:58 -05002267<a href='#Path_Overview_Contour'>Path_Contour</a> may start and end at the same <a href='SkPoint_Reference#Point'>point</a>; defining <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002268
Cary Clark777eede2018-11-09 16:04:58 -05002269<a href='#SkPaint_kButt_Cap'>kButt_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> is not drawn.
2270<a href='#SkPaint_kRound_Cap'>kRound_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> draws a <a href='undocumented#Circle'>circle</a> of diameter <a href='#Paint_Stroke_Width'>Stroke_Width</a>
2271at the <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPoint_Reference#Point'>point</a>.
2272<a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> draws an upright square with a side of
2273<a href='#Paint_Stroke_Width'>Stroke_Width</a> at the <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPoint_Reference#Point'>point</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002274
Cary Clark777eede2018-11-09 16:04:58 -05002275<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04002276
Cary Clark12799e12017-07-28 15:18:29 -04002277### Example
2278
Cary Clark2ade9972017-11-02 17:49:34 -04002279<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002280
Cary Clark682c58d2018-05-16 07:07:07 -04002281<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002282
2283---
Cary Clark12799e12017-07-28 15:18:29 -04002284
Cary Clark682c58d2018-05-16 07:07:07 -04002285<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002286<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002287</pre>
2288
Cary Clark80247e52018-07-11 16:18:41 -04002289Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002290
2291### Return Value
2292
Cary Clark09d80c02018-10-31 12:14:03 -04002293one 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 -04002294
2295### Example
2296
2297<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2298
2299#### Example Output
2300
2301~~~~
2302kButt_Cap == default stroke cap
2303~~~~
2304
2305</fiddle-embed></div>
2306
2307### See Also
2308
Cary Clark77b3f3a2018-11-07 14:59:03 -05002309<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002310
Cary Clark682c58d2018-05-16 07:07:07 -04002311<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002312
2313---
Cary Clark12799e12017-07-28 15:18:29 -04002314
Cary Clark682c58d2018-05-16 07:07:07 -04002315<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002316void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002317</pre>
2318
Cary Clark80247e52018-07-11 16:18:41 -04002319Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002320
2321### Parameters
2322
Cary Clark682c58d2018-05-16 07:07:07 -04002323<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002324 <td>one 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>;</td>
Cary Clark12799e12017-07-28 15:18:29 -04002325 </tr>
2326</table>
2327
Cary Clark777eede2018-11-09 16:04:58 -05002328has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid
Cary Clark09d80c02018-10-31 12:14:03 -04002329
Cary Clark12799e12017-07-28 15:18:29 -04002330### Example
2331
2332<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2333
2334#### Example Output
2335
2336~~~~
2337kRound_Cap == paint.getStrokeCap()
2338~~~~
2339
2340</fiddle-embed></div>
2341
2342### See Also
2343
Cary Clark77b3f3a2018-11-07 14:59:03 -05002344<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002345
Cary Clarka90ea222018-10-16 10:30:28 -04002346<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002347
Cary Clark777eede2018-11-09 16:04:58 -05002348<a href='#Paint_Stroke_Join'>Stroke_Join</a> draws at the sharp corners of an open or closed <a href='#Path_Overview_Contour'>Path_Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002349
Cary Clark777eede2018-11-09 16:04:58 -05002350Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2351follows the <a href='#Path_Overview_Contour'>Path_Contour</a>, moving parallel to the <a href='SkPath_Overview#Contour'>contour</a> direction.
Cary Clark12799e12017-07-28 15:18:29 -04002352
Cary Clark777eede2018-11-09 16:04:58 -05002353If the <a href='SkPath_Overview#Contour'>contour</a> direction changes abruptly, because the tangent direction leading
2354to the end of a <a href='undocumented#Curve'>curve</a> within the <a href='SkPath_Overview#Contour'>contour</a> does not match the tangent direction of
2355the following <a href='undocumented#Curve'>curve</a>, the pair of <a href='undocumented#Curve'>curves</a> meet at <a href='#Paint_Stroke_Join'>Stroke_Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002356
2357### Example
2358
Cary Clark2ade9972017-11-02 17:49:34 -04002359<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002360
Cary Clarka90ea222018-10-16 10:30:28 -04002361<a name='SkPaint_Join'></a>
2362
2363---
Cary Clark12799e12017-07-28 15:18:29 -04002364
Cary Clarka560c472017-11-27 10:44:06 -05002365<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002366 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04002367 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2368 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2369 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002370 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2371 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002372 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05002373
Cary Clarka90ea222018-10-16 10:30:28 -04002374</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002375
Cary Clarka90ea222018-10-16 10:30:28 -04002376<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002377 static constexpr int <a href='#SkPaint_kJoinCount'>kJoinCount</a> = <a href='#SkPaint_kLast_Join'>kLast_Join</a> + 1;
Cary Clark1a8d7622018-03-05 13:26:16 -05002378</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002379
Cary Clark777eede2018-11-09 16:04:58 -05002380<a href='#SkPaint_Join'>Join</a> specifies how corners are drawn when a shape is stroked. <a href='#SkPaint_Join'>Join</a>
2381affects the four corners of a stroked rectangle, and the connected segments in a
2382stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002383
Cary Clark777eede2018-11-09 16:04:58 -05002384Choose miter join to draw sharp corners. Choose round join to draw a <a href='undocumented#Circle'>circle</a> with a
2385radius equal to the <a href='#Stroke_Width'>stroke width</a> on top of the corner. Choose bevel join to minimally
2386connect the thick strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002387
Cary Clark777eede2018-11-09 16:04:58 -05002388The <a href='#Fill_Path'>fill path</a> constructed to describe the stroked <a href='SkPath_Reference#Path'>path</a> respects the join setting but may
2389not contain the actual join. For instance, a <a href='#Fill_Path'>fill path</a> constructed with round joins does
2390not necessarily include <a href='undocumented#Circle'>circles</a> at each connected segment.
Cary Clark12799e12017-07-28 15:18:29 -04002391
2392### Constants
2393
Cary Clark682c58d2018-05-16 07:07:07 -04002394<table style='border-collapse: collapse; width: 62.5em'>
2395 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2396<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2397<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2398 <tr style='background-color: #f0f0f0; '>
2399 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2400 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2401 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002402Extends the outside corner to the extent allowed by <a href='#Paint_Miter_Limit'>Miter_Limit</a>.
Cary Clark777eede2018-11-09 16:04:58 -05002403If the extension exceeds <a href='#Paint_Miter_Limit'>Miter_Limit</a>, <a href='#SkPaint_kBevel_Join'>kBevel_Join</a> is used instead.
Cary Clark1a8d7622018-03-05 13:26:16 -05002404</td>
Cary Clark12799e12017-07-28 15:18:29 -04002405 </tr>
2406 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002407 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2408 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2409 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002410Adds a <a href='undocumented#Circle'>circle</a> with a diameter of <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the sharp corner.
Cary Clark682c58d2018-05-16 07:07:07 -04002411</td>
2412 </tr>
2413 <tr style='background-color: #f0f0f0; '>
2414 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2415 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2416 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2417Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002418</td>
Cary Clark12799e12017-07-28 15:18:29 -04002419 </tr>
2420 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002421 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2422 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2423 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2424equivalent to the largest value for Stroke_Join</td>
2425 </tr>
2426 <tr style='background-color: #f0f0f0; '>
2427 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2428 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2429 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002430<a href='#Paint_Stroke_Join'>Stroke_Join</a> is set to <a href='#SkPaint_kMiter_Join'>kMiter_Join</a> by default.
Cary Clark1a8d7622018-03-05 13:26:16 -05002431</td>
Cary Clark12799e12017-07-28 15:18:29 -04002432 </tr>
2433 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002434 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2435 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2436 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002437May be used to verify that <a href='#Paint_Stroke_Join'>Stroke_Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002438</td>
Cary Clark12799e12017-07-28 15:18:29 -04002439 </tr>
2440</table>
2441
2442### Example
2443
2444<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2445
2446### See Also
2447
Cary Clark682c58d2018-05-16 07:07:07 -04002448<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 -04002449
Cary Clark682c58d2018-05-16 07:07:07 -04002450<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002451
2452---
Cary Clark12799e12017-07-28 15:18:29 -04002453
Cary Clark682c58d2018-05-16 07:07:07 -04002454<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002455<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002456</pre>
2457
Cary Clark80247e52018-07-11 16:18:41 -04002458Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002459
2460### Return Value
2461
Cary Clark09d80c02018-10-31 12:14:03 -04002462one 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 -04002463
2464### Example
2465
Cary Clark7f644ec2018-07-19 10:50:44 -04002466<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002467
2468#### Example Output
2469
2470~~~~
2471kMiter_Join == default stroke join
2472~~~~
2473
2474</fiddle-embed></div>
2475
2476### See Also
2477
Cary Clark77b3f3a2018-11-07 14:59:03 -05002478<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002479
Cary Clark682c58d2018-05-16 07:07:07 -04002480<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002481
2482---
Cary Clark12799e12017-07-28 15:18:29 -04002483
Cary Clark682c58d2018-05-16 07:07:07 -04002484<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002485void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002486</pre>
2487
Cary Clark80247e52018-07-11 16:18:41 -04002488Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002489
2490### Parameters
2491
Cary Clark682c58d2018-05-16 07:07:07 -04002492<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002493 <td>one 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>;</td>
Cary Clark12799e12017-07-28 15:18:29 -04002494 </tr>
2495</table>
2496
Cary Clark09d80c02018-10-31 12:14:03 -04002497otherwise, has no effect
2498
Cary Clark12799e12017-07-28 15:18:29 -04002499### Example
2500
2501<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2502
2503#### Example Output
2504
2505~~~~
2506kMiter_Join == paint.getStrokeJoin()
2507~~~~
2508
2509</fiddle-embed></div>
2510
2511### See Also
2512
Cary Clark77b3f3a2018-11-07 14:59:03 -05002513<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002514
Cary Clark12799e12017-07-28 15:18:29 -04002515### See Also
2516
Cary Clark77b3f3a2018-11-07 14:59:03 -05002517<a href='#Paint_Miter_Limit'>Miter_Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002518
Cary Clarka90ea222018-10-16 10:30:28 -04002519<a name='Fill_Path'></a>
2520
2521---
Cary Clark08895c42018-02-01 09:37:32 -05002522
Cary Clark777eede2018-11-09 16:04:58 -05002523<a href='#Paint_Fill_Path'>Fill_Path</a> creates a <a href='SkPath_Reference#Path'>Path</a> by applying the <a href='#Path_Effect'>Path_Effect</a>, followed by the <a href='#Paint_Style_Stroke'>Style_Stroke</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002524
Cary Clark777eede2018-11-09 16:04:58 -05002525If <a href='SkPaint_Reference#Paint'>Paint</a> contains <a href='#Path_Effect'>Path_Effect</a>, <a href='#Path_Effect'>Path_Effect</a> operates on the source <a href='SkPath_Reference#Path'>Path</a>; the result
2526replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2527destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002528
Cary Clark777eede2018-11-09 16:04:58 -05002529Fill <a href='SkPath_Reference#Path'>Path</a> can request the <a href='#Path_Effect'>Path_Effect</a> to restrict to a culling rectangle, but
2530the <a href='#Path_Effect'>Path_Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002531
Cary Clark777eede2018-11-09 16:04:58 -05002532If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
2533and <a href='#Paint_Stroke_Width'>Stroke_Width</a> is greater than zero, the <a href='#Paint_Stroke_Width'>Stroke_Width</a>, <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>, <a href='#Paint_Stroke_Join'>Stroke_Join</a>,
2534and <a href='#Paint_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 -04002535
Cary Clark777eede2018-11-09 16:04:58 -05002536Fill <a href='SkPath_Reference#Path'>Path</a> can specify the precision used by <a href='#Paint_Stroke_Width'>Stroke_Width</a> to approximate the stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002537
Cary Clark777eede2018-11-09 16:04:58 -05002538If the <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> and the <a href='#Paint_Stroke_Width'>Stroke_Width</a> is zero, <a href='#SkPaint_getFillPath'>getFillPath</a>
2539returns false since Hairline has no filled equivalent.
Cary Clarka90ea222018-10-16 10:30:28 -04002540
2541### See Also
2542
Cary Clark77b3f3a2018-11-07 14:59:03 -05002543<a href='#Paint_Style_Stroke'>Style_Stroke</a> <a href='#Paint_Stroke_Width'>Stroke_Width</a> <a href='#Path_Effect'>Path_Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002544
Cary Clark682c58d2018-05-16 07:07:07 -04002545<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002546
2547---
Cary Clark12799e12017-07-28 15:18:29 -04002548
Cary Clark682c58d2018-05-16 07:07:07 -04002549<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002550bool <a href='#SkPaint_getFillPath'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst, const <a href='SkRect_Reference#SkRect'>SkRect</a>* cullRect, <a href='undocumented#SkScalar'>SkScalar</a> resScale = 1)const
Cary Clark12799e12017-07-28 15:18:29 -04002551</pre>
2552
Cary Clark09d80c02018-10-31 12:14:03 -04002553Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002554
2555### Parameters
2556
Cary Clark682c58d2018-05-16 07:07:07 -04002557<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002558 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002559 </tr>
2560 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002561 <td>resulting <a href='SkPath_Reference#SkPath'>SkPath</a>; may be the same as <a href='#SkPaint_getFillPath_src'>src</a>, but may not be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002562 </tr>
2563 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002564 <td>optional limit passed to <a href='undocumented#SkPathEffect'>SkPathEffect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04002565 </tr>
2566 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002567 <td>if > 1, increase precision, else if (0 < <a href='#SkPaint_getFillPath_resScale'>resScale</a> < 1) reduce precision</td>
Cary Clark12799e12017-07-28 15:18:29 -04002568 </tr>
2569</table>
2570
Cary Clark09d80c02018-10-31 12:14:03 -04002571to favor speed and <a href='undocumented#Size'>size</a>
2572
Cary Clark12799e12017-07-28 15:18:29 -04002573### Return Value
2574
Cary Clark777eede2018-11-09 16:04:58 -05002575true if the <a href='SkPath_Reference#Path'>path</a> represents <a href='#Style_Fill'>style fill</a>, or false if it represents hairline
Cary Clark12799e12017-07-28 15:18:29 -04002576
2577### Example
2578
Cary Clark777eede2018-11-09 16:04:58 -05002579<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href='SkPath_Reference#Quad'>Quad</a> stroke is turned into a filled <a href='SkPath_Reference#Path'>path</a> with increasing levels of precision.
2580At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
2581At the highest precision, the filled <a href='SkPath_Reference#Path'>path</a> has high fidelity compared to the original stroke.
Cary Clark1a8d7622018-03-05 13:26:16 -05002582</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002583
Cary Clark682c58d2018-05-16 07:07:07 -04002584<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002585
Cary Clarka90ea222018-10-16 10:30:28 -04002586---
2587
Cary Clark682c58d2018-05-16 07:07:07 -04002588<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002589bool <a href='#SkPaint_getFillPath'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst)const
Cary Clark12799e12017-07-28 15:18:29 -04002590</pre>
2591
Cary Clark09d80c02018-10-31 12:14:03 -04002592Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002593
Cary Clark777eede2018-11-09 16:04:58 -05002594Replaces <a href='#SkPaint_getFillPath_2_dst'>dst</a> with the <a href='#SkPaint_getFillPath_2_src'>src</a> <a href='SkPath_Reference#Path'>path</a> modified by <a href='undocumented#SkPathEffect'>SkPathEffect</a> and <a href='#Style_Stroke'>style stroke</a>.
2595<a href='undocumented#SkPathEffect'>SkPathEffect</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 -04002596
2597### Parameters
2598
Cary Clark682c58d2018-05-16 07:07:07 -04002599<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002600 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002601 </tr>
2602 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002603 <td>resulting <a href='SkPath_Reference#SkPath'>SkPath</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 -04002604 </tr>
2605</table>
2606
2607### Return Value
2608
Cary Clark777eede2018-11-09 16:04:58 -05002609true if the <a href='SkPath_Reference#Path'>path</a> represents <a href='#Style_Fill'>style fill</a>, or false if it represents hairline
Cary Clark12799e12017-07-28 15:18:29 -04002610
2611### Example
2612
2613<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2614
Cary Clarka90ea222018-10-16 10:30:28 -04002615<a name='Shader_Methods'></a>
2616
Cary Clark12799e12017-07-28 15:18:29 -04002617---
2618
Cary Clark777eede2018-11-09 16:04:58 -05002619<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2620<a href='undocumented#Shader'>Shader</a> may be an <a href='SkImage_Reference#Image'>image</a>, a gradient, or a computed fill.
2621If <a href='SkPaint_Reference#Paint'>Paint</a> has no <a href='undocumented#Shader'>Shader</a>, then <a href='SkColor_Reference#Color'>Color</a> fills the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002622
Cary Clark777eede2018-11-09 16:04:58 -05002623<a href='undocumented#Shader'>Shader</a> is modulated by <a href='#Color_Alpha'>Color_Alpha</a> component of <a href='SkColor_Reference#Color'>Color</a>.
2624If <a href='undocumented#Shader'>Shader</a> object defines only <a href='#Color_Alpha'>Color_Alpha</a>, then <a href='SkColor_Reference#Color'>Color</a> modulated by <a href='#Color_Alpha'>Color_Alpha</a> describes
2625the fill.
Cary Clark12799e12017-07-28 15:18:29 -04002626
Cary Clark777eede2018-11-09 16:04:58 -05002627The drawn transparency can be modified without altering <a href='undocumented#Shader'>Shader</a>, by changing <a href='#Color_Alpha'>Color_Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002628
2629### Example
2630
2631<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2632
Cary Clark777eede2018-11-09 16:04:58 -05002633If <a href='undocumented#Shader'>Shader</a> generates only <a href='#Color_Alpha'>Color_Alpha</a> then all components of <a href='SkColor_Reference#Color'>Color</a> modulate the output.
Cary Clark12799e12017-07-28 15:18:29 -04002634
2635### Example
2636
skia-bookmaker525f9a92018-05-03 06:27:39 +00002637<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002638
Cary Clark682c58d2018-05-16 07:07:07 -04002639<a name='SkPaint_getShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002640
2641---
Cary Clark12799e12017-07-28 15:18:29 -04002642
Cary Clark682c58d2018-05-16 07:07:07 -04002643<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002644<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002645</pre>
2646
Cary Clark777eede2018-11-09 16:04:58 -05002647Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002648
Cary Clark09d80c02018-10-31 12:14:03 -04002649Does not alter <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002650
2651### Return Value
2652
Cary Clark777eede2018-11-09 16:04:58 -05002653<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002654
2655### Example
2656
2657<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2658
2659#### Example Output
2660
2661~~~~
2662nullptr == shader
2663nullptr != shader
2664~~~~
2665
2666</fiddle-embed></div>
2667
Cary Clark682c58d2018-05-16 07:07:07 -04002668<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002669
2670---
Cary Clark12799e12017-07-28 15:18:29 -04002671
Cary Clark682c58d2018-05-16 07:07:07 -04002672<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002673<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkShader'>SkShader</a>&gt; <a href='#SkPaint_refShader'>refShader</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002674</pre>
2675
Cary Clark777eede2018-11-09 16:04:58 -05002676Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002677
Cary Clark777eede2018-11-09 16:04:58 -05002678Increases <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002679
2680### Return Value
2681
Cary Clark777eede2018-11-09 16:04:58 -05002682<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002683
2684### Example
2685
2686<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2687
2688#### Example Output
2689
2690~~~~
2691shader unique: true
2692shader unique: false
2693~~~~
2694
2695</fiddle-embed></div>
2696
Cary Clark682c58d2018-05-16 07:07:07 -04002697<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002698
2699---
Cary Clark12799e12017-07-28 15:18:29 -04002700
Cary Clark682c58d2018-05-16 07:07:07 -04002701<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002702void <a href='#SkPaint_setShader'>setShader</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkShader'>SkShader</a>&gt; <a href='undocumented#Shader'>shader</a>)
Cary Clark12799e12017-07-28 15:18:29 -04002703</pre>
2704
Cary Clark777eede2018-11-09 16:04:58 -05002705Sets optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002706
Cary Clark777eede2018-11-09 16:04:58 -05002707Sets <a href='undocumented#SkShader'>SkShader</a> to <a href='#SkPaint_setShader_shader'>shader</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous <a href='undocumented#SkShader'>SkShader</a>.
2708Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002709
2710### Parameters
2711
Cary Clark682c58d2018-05-16 07:07:07 -04002712<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002713 <td>how geometry is filled with <a href='SkColor_Reference#Color'>color</a>; if nullptr, <a href='SkColor_Reference#Color'>color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002714 </tr>
2715</table>
2716
2717### Example
2718
skia-bookmakere0a458f2018-07-16 05:29:00 +00002719<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002720
Cary Clarka90ea222018-10-16 10:30:28 -04002721<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002722
Cary Clarka90ea222018-10-16 10:30:28 -04002723---
Cary Clark08895c42018-02-01 09:37:32 -05002724
Cary Clark777eede2018-11-09 16:04:58 -05002725<a href='#Color_Filter'>Color_Filter</a> alters the <a href='SkColor_Reference#Color'>color</a> used when drawing a shape.
2726<a href='#Color_Filter'>Color_Filter</a> may apply <a href='#Blend_Mode'>Blend_Mode</a>, transform the <a href='SkColor_Reference#Color'>color</a> through a <a href='SkMatrix_Reference#Matrix'>matrix</a>, or composite multiple filters.
2727If <a href='SkPaint_Reference#Paint'>Paint</a> has no <a href='#Color_Filter'>Color_Filter</a>, the <a href='SkColor_Reference#Color'>color</a> is unaltered.
Cary Clark12799e12017-07-28 15:18:29 -04002728
Cary Clark777eede2018-11-09 16:04:58 -05002729The drawn transparency can be modified without altering <a href='#Color_Filter'>Color_Filter</a>, by changing <a href='#Color_Alpha'>Color_Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002730
2731### Example
2732
2733<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2734
Cary Clark682c58d2018-05-16 07:07:07 -04002735<a name='SkPaint_getColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002736
2737---
Cary Clark12799e12017-07-28 15:18:29 -04002738
Cary Clark682c58d2018-05-16 07:07:07 -04002739<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002740<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002741</pre>
2742
Cary Clark777eede2018-11-09 16:04:58 -05002743Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002744Does not alter <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002745
2746### Return Value
2747
Cary Clark777eede2018-11-09 16:04:58 -05002748<a href='undocumented#SkColorFilter'>SkColorFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002749
2750### Example
2751
2752<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2753
2754#### Example Output
2755
2756~~~~
2757nullptr == color filter
2758nullptr != color filter
2759~~~~
2760
2761</fiddle-embed></div>
2762
Cary Clark682c58d2018-05-16 07:07:07 -04002763<a name='SkPaint_refColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002764
2765---
Cary Clark12799e12017-07-28 15:18:29 -04002766
Cary Clark682c58d2018-05-16 07:07:07 -04002767<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002768<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkColorFilter'>SkColorFilter</a>&gt; <a href='#SkPaint_refColorFilter'>refColorFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002769</pre>
2770
Cary Clark777eede2018-11-09 16:04:58 -05002771Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
2772Increases <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002773
2774### Return Value
2775
Cary Clark777eede2018-11-09 16:04:58 -05002776<a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002777
2778### Example
2779
2780<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2781
2782#### Example Output
2783
2784~~~~
2785color filter unique: true
2786color filter unique: false
2787~~~~
2788
2789</fiddle-embed></div>
2790
Cary Clark682c58d2018-05-16 07:07:07 -04002791<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002792
2793---
Cary Clark12799e12017-07-28 15:18:29 -04002794
Cary Clark682c58d2018-05-16 07:07:07 -04002795<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002796void <a href='#SkPaint_setColorFilter'>setColorFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkColorFilter'>SkColorFilter</a>&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002797</pre>
2798
Cary Clark777eede2018-11-09 16:04:58 -05002799Sets <a href='undocumented#SkColorFilter'>SkColorFilter</a> to filter, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
2800<a href='undocumented#SkColorFilter'>SkColorFilter</a>. Pass nullptr to clear <a href='undocumented#SkColorFilter'>SkColorFilter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04002801
Cary Clark777eede2018-11-09 16:04:58 -05002802Increments filter <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002803
2804### Parameters
2805
Cary Clark682c58d2018-05-16 07:07:07 -04002806<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002807 <td><a href='undocumented#SkColorFilter'>SkColorFilter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002808 </tr>
2809</table>
2810
2811### Example
2812
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002813<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002814
Cary Clarka90ea222018-10-16 10:30:28 -04002815<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002816
Cary Clarka90ea222018-10-16 10:30:28 -04002817---
Cary Clark08895c42018-02-01 09:37:32 -05002818
Cary Clark777eede2018-11-09 16:04:58 -05002819<a href='#Blend_Mode'>Blend_Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination <a href='SkColor_Reference#Color'>color</a>.
2820The default setting, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>, draws the source <a href='SkColor_Reference#Color'>color</a>
2821over the destination <a href='SkColor_Reference#Color'>color</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002822
2823### Example
2824
Cary Clark83647062018-07-18 16:21:51 -04002825<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002826
2827### See Also
2828
Cary Clark77b3f3a2018-11-07 14:59:03 -05002829<a href='#Blend_Mode'>Blend_Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002830
Cary Clark682c58d2018-05-16 07:07:07 -04002831<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002832
2833---
Cary Clark12799e12017-07-28 15:18:29 -04002834
Cary Clark682c58d2018-05-16 07:07:07 -04002835<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002836<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002837</pre>
2838
Cary Clark09d80c02018-10-31 12:14:03 -04002839Returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>.
2840By default, returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002841
2842### Return Value
2843
Cary Clark777eede2018-11-09 16:04:58 -05002844mode used to combine source <a href='SkColor_Reference#Color'>color</a> with destination <a href='SkColor_Reference#Color'>color</a>
Cary Clark12799e12017-07-28 15:18:29 -04002845
2846### Example
2847
skia-bookmaker525f9a92018-05-03 06:27:39 +00002848<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04002849
2850#### Example Output
2851
2852~~~~
2853kSrcOver == getBlendMode
2854kSrcOver != getBlendMode
2855~~~~
2856
2857</fiddle-embed></div>
2858
Cary Clark682c58d2018-05-16 07:07:07 -04002859<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002860
2861---
Cary Clark12799e12017-07-28 15:18:29 -04002862
Cary Clark682c58d2018-05-16 07:07:07 -04002863<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002864bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002865</pre>
2866
Cary Clark777eede2018-11-09 16:04:58 -05002867Returns true if <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> is <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04002868
2869### Return Value
2870
Cary Clark777eede2018-11-09 16:04:58 -05002871true if <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> is <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04002872
2873### Example
2874
2875<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2876
2877#### Example Output
2878
2879~~~~
2880isSrcOver == true
2881isSrcOver != true
2882~~~~
2883
2884</fiddle-embed></div>
2885
Cary Clark682c58d2018-05-16 07:07:07 -04002886<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002887
2888---
Cary Clark12799e12017-07-28 15:18:29 -04002889
Cary Clark682c58d2018-05-16 07:07:07 -04002890<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002891void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04002892</pre>
2893
Cary Clark777eede2018-11-09 16:04:58 -05002894Sets <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002895Does not check for valid input.
2896
2897### Parameters
2898
Cary Clark682c58d2018-05-16 07:07:07 -04002899<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002900 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source <a href='SkColor_Reference#Color'>color</a> and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04002901 </tr>
2902</table>
2903
2904### Example
2905
2906<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2907
2908#### Example Output
2909
2910~~~~
2911isSrcOver == true
2912isSrcOver != true
2913~~~~
2914
2915</fiddle-embed></div>
2916
Cary Clarka90ea222018-10-16 10:30:28 -04002917<a name='Path_Effect_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002918
Cary Clarka90ea222018-10-16 10:30:28 -04002919---
Cary Clark08895c42018-02-01 09:37:32 -05002920
Cary Clark777eede2018-11-09 16:04:58 -05002921<a href='#Path_Effect'>Path_Effect</a> modifies the <a href='SkPath_Reference#Path'>path</a> geometry before drawing it.
2922<a href='#Path_Effect'>Path_Effect</a> may implement dashing, custom fill effects and custom stroke effects.
2923If <a href='SkPaint_Reference#Paint'>Paint</a> has no <a href='#Path_Effect'>Path_Effect</a>, the <a href='SkPath_Reference#Path'>path</a> geometry is unaltered when filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002924
2925### Example
2926
2927<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
2928
2929### See Also
2930
Cary Clark77b3f3a2018-11-07 14:59:03 -05002931<a href='#Path_Effect'>Path_Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002932
Cary Clark682c58d2018-05-16 07:07:07 -04002933<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002934
2935---
Cary Clark12799e12017-07-28 15:18:29 -04002936
Cary Clark682c58d2018-05-16 07:07:07 -04002937<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002938<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002939</pre>
2940
Cary Clark777eede2018-11-09 16:04:58 -05002941Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002942Does not alter <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002943
2944### Return Value
2945
Cary Clark777eede2018-11-09 16:04:58 -05002946<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002947
2948### Example
2949
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002950<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04002951
2952#### Example Output
2953
2954~~~~
2955nullptr == path effect
2956nullptr != path effect
2957~~~~
2958
2959</fiddle-embed></div>
2960
Cary Clark682c58d2018-05-16 07:07:07 -04002961<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002962
2963---
Cary Clark12799e12017-07-28 15:18:29 -04002964
Cary Clark682c58d2018-05-16 07:07:07 -04002965<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002966<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkPathEffect'>SkPathEffect</a>&gt; <a href='#SkPaint_refPathEffect'>refPathEffect</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002967</pre>
2968
Cary Clark777eede2018-11-09 16:04:58 -05002969Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
2970Increases <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002971
2972### Return Value
2973
Cary Clark777eede2018-11-09 16:04:58 -05002974<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002975
2976### Example
2977
Cary Clark83647062018-07-18 16:21:51 -04002978<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04002979
2980#### Example Output
2981
2982~~~~
2983path effect unique: true
2984path effect unique: false
2985~~~~
2986
2987</fiddle-embed></div>
2988
Cary Clark682c58d2018-05-16 07:07:07 -04002989<a name='SkPaint_setPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002990
2991---
Cary Clark12799e12017-07-28 15:18:29 -04002992
Cary Clark682c58d2018-05-16 07:07:07 -04002993<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002994void <a href='#SkPaint_setPathEffect'>setPathEffect</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkPathEffect'>SkPathEffect</a>&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04002995</pre>
2996
Cary Clark777eede2018-11-09 16:04:58 -05002997Sets <a href='undocumented#SkPathEffect'>SkPathEffect</a> to <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
2998<a href='undocumented#SkPathEffect'>SkPathEffect</a>. Pass nullptr to leave the <a href='SkPath_Reference#Path'>path</a> geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04002999
Cary Clark777eede2018-11-09 16:04:58 -05003000Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003001
3002### Parameters
3003
Cary Clark682c58d2018-05-16 07:07:07 -04003004<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003005 <td>replace <a href='SkPath_Reference#SkPath'>SkPath</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003006 </tr>
3007</table>
3008
3009### Example
3010
3011<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3012
Cary Clarka90ea222018-10-16 10:30:28 -04003013<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003014
Cary Clarka90ea222018-10-16 10:30:28 -04003015---
Cary Clark08895c42018-02-01 09:37:32 -05003016
Cary Clark777eede2018-11-09 16:04:58 -05003017<a href='#Mask_Filter'>Mask_Filter</a> uses coverage of the shape drawn to create <a href='#Mask_Alpha'>Mask_Alpha</a>.
3018<a href='#Mask_Filter'>Mask_Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003019
Cary Clark777eede2018-11-09 16:04:58 -05003020<a href='#Mask_Filter'>Mask_Filter</a> may change the geometry and transparency of the shape, such as
3021creating a blur effect. Set <a href='#Mask_Filter'>Mask_Filter</a> to nullptr to prevent <a href='#Mask_Filter'>Mask_Filter</a> from
3022modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003023
3024### Example
3025
Cary Clark681287e2018-03-16 11:34:15 -04003026<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003027
Cary Clark682c58d2018-05-16 07:07:07 -04003028<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003029
3030---
Cary Clark12799e12017-07-28 15:18:29 -04003031
Cary Clark682c58d2018-05-16 07:07:07 -04003032<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003033<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003034</pre>
3035
Cary Clark777eede2018-11-09 16:04:58 -05003036Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003037Does not alter <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003038
3039### Return Value
3040
Cary Clark777eede2018-11-09 16:04:58 -05003041<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003042
3043### Example
3044
Cary Clark681287e2018-03-16 11:34:15 -04003045<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003046
3047#### Example Output
3048
3049~~~~
3050nullptr == mask filter
3051nullptr != mask filter
3052~~~~
3053
3054</fiddle-embed></div>
3055
Cary Clark682c58d2018-05-16 07:07:07 -04003056<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003057
3058---
Cary Clark12799e12017-07-28 15:18:29 -04003059
Cary Clark682c58d2018-05-16 07:07:07 -04003060<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003061<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>&gt; <a href='#SkPaint_refMaskFilter'>refMaskFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003062</pre>
3063
Cary Clark777eede2018-11-09 16:04:58 -05003064Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003065
Cary Clark777eede2018-11-09 16:04:58 -05003066Increases <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003067
3068### Return Value
3069
Cary Clark777eede2018-11-09 16:04:58 -05003070<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003071
3072### Example
3073
Cary Clark83647062018-07-18 16:21:51 -04003074<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003075
3076#### Example Output
3077
3078~~~~
3079mask filter unique: true
3080mask filter unique: false
3081~~~~
3082
3083</fiddle-embed></div>
3084
Cary Clark682c58d2018-05-16 07:07:07 -04003085<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003086
3087---
Cary Clark12799e12017-07-28 15:18:29 -04003088
Cary Clark682c58d2018-05-16 07:07:07 -04003089<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003090void <a href='#SkPaint_setMaskFilter'>setMaskFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003091</pre>
3092
Cary Clark777eede2018-11-09 16:04:58 -05003093Sets <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> to <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3094<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>. Pass nullptr to clear <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> and leave <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> effect on
Cary Clark09d80c02018-10-31 12:14:03 -04003095<a href='undocumented#Mask_Alpha'>mask alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003096
Cary Clark777eede2018-11-09 16:04:58 -05003097Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003098
3099### Parameters
3100
Cary Clark682c58d2018-05-16 07:07:07 -04003101<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3102 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003103 </tr>
3104</table>
3105
3106### Example
3107
Cary Clark681287e2018-03-16 11:34:15 -04003108<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003109
Cary Clarka90ea222018-10-16 10:30:28 -04003110<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003111
Cary Clarka90ea222018-10-16 10:30:28 -04003112---
Cary Clark08895c42018-02-01 09:37:32 -05003113
Cary Clarkcb6bef02018-11-29 12:05:25 -05003114<a href='undocumented#Typeface'>Typeface</a> identifies the <a href='SkFont_Reference#Font'>font</a> used when drawing and measuring <a href='undocumented#Text'>text</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003115<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a <a href='undocumented#Data'>data</a> <a href='SkStream_Reference#Stream'>stream</a>.
Cary Clarkcb6bef02018-11-29 12:05:25 -05003116The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default <a href='SkFont_Reference#Font'>font</a>
Cary Clark777eede2018-11-09 16:04:58 -05003117implementation.
Cary Clark12799e12017-07-28 15:18:29 -04003118
3119### Example
3120
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003121<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003122
Cary Clark682c58d2018-05-16 07:07:07 -04003123<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003124
3125---
Cary Clark12799e12017-07-28 15:18:29 -04003126
Cary Clark682c58d2018-05-16 07:07:07 -04003127<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003128<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003129</pre>
3130
Cary Clark777eede2018-11-09 16:04:58 -05003131Returns <a href='undocumented#SkTypeface'>SkTypeface</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003132Does not alter <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003133
3134### Return Value
3135
Cary Clark777eede2018-11-09 16:04:58 -05003136<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003137
3138### Example
3139
Cary Clarkf9603982018-07-17 08:20:27 -04003140<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003141
3142#### Example Output
3143
3144~~~~
3145nullptr == typeface
3146nullptr != typeface
3147~~~~
3148
3149</fiddle-embed></div>
3150
Cary Clark682c58d2018-05-16 07:07:07 -04003151<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003152
3153---
Cary Clark12799e12017-07-28 15:18:29 -04003154
Cary Clark682c58d2018-05-16 07:07:07 -04003155<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003156<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkTypeface'>SkTypeface</a>&gt; <a href='#SkPaint_refTypeface'>refTypeface</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003157</pre>
3158
Cary Clark777eede2018-11-09 16:04:58 -05003159Increases <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003160
3161### Return Value
3162
Cary Clark777eede2018-11-09 16:04:58 -05003163<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003164
3165### Example
3166
Cary Clark83647062018-07-18 16:21:51 -04003167<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003168
3169#### Example Output
3170
3171~~~~
3172typeface1 != typeface2
3173typeface1 == typeface2
3174~~~~
3175
3176</fiddle-embed></div>
3177
Cary Clark682c58d2018-05-16 07:07:07 -04003178<a name='SkPaint_setTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003179
3180---
Cary Clark12799e12017-07-28 15:18:29 -04003181
Cary Clark682c58d2018-05-16 07:07:07 -04003182<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003183void <a href='#SkPaint_setTypeface'>setTypeface</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkTypeface'>SkTypeface</a>&gt; <a href='undocumented#Typeface'>typeface</a>)
Cary Clark12799e12017-07-28 15:18:29 -04003184</pre>
3185
Cary Clark777eede2018-11-09 16:04:58 -05003186Sets <a href='undocumented#SkTypeface'>SkTypeface</a> to <a href='#SkPaint_setTypeface_typeface'>typeface</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous <a href='undocumented#SkTypeface'>SkTypeface</a>.
3187Pass nullptr to clear <a href='undocumented#SkTypeface'>SkTypeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3188<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003189
3190### Parameters
3191
Cary Clark682c58d2018-05-16 07:07:07 -04003192<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
Cary Clarkcb6bef02018-11-29 12:05:25 -05003193 <td><a href='SkFont_Reference#Font'>font</a> and style used to draw <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003194 </tr>
3195</table>
3196
3197### Example
3198
Cary Clark71961fb2018-01-05 14:21:59 -05003199<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003200
Cary Clarka90ea222018-10-16 10:30:28 -04003201<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003202
Cary Clarka90ea222018-10-16 10:30:28 -04003203---
Cary Clark08895c42018-02-01 09:37:32 -05003204
Cary Clark777eede2018-11-09 16:04:58 -05003205<a href='#Image_Filter'>Image_Filter</a> operates on the <a href='undocumented#Pixel'>pixel</a> representation of the shape, as modified by <a href='SkPaint_Reference#Paint'>Paint</a>
3206with <a href='#Blend_Mode'>Blend_Mode</a> set to <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>. <a href='#Image_Filter'>Image_Filter</a> creates a new <a href='SkBitmap_Reference#Bitmap'>bitmap</a>,
3207which is drawn to the <a href='undocumented#Device'>device</a> using the set <a href='#Blend_Mode'>Blend_Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003208
Cary Clark777eede2018-11-09 16:04:58 -05003209<a href='#Image_Filter'>Image_Filter</a> is higher level than <a href='#Mask_Filter'>Mask_Filter</a>; for instance, an <a href='#Image_Filter'>Image_Filter</a>
3210can operate on all channels of <a href='SkColor_Reference#Color'>Color</a>, while <a href='#Mask_Filter'>Mask_Filter</a> generates <a href='SkColor_Reference#Alpha'>Alpha</a> only.
3211<a href='#Image_Filter'>Image_Filter</a> operates independently of and can be used in combination with
Cary Clark77b3f3a2018-11-07 14:59:03 -05003212<a href='#Mask_Filter'>Mask_Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003213
3214### Example
3215
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003216<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003217
Cary Clark682c58d2018-05-16 07:07:07 -04003218<a name='SkPaint_getImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003219
3220---
Cary Clark12799e12017-07-28 15:18:29 -04003221
Cary Clark682c58d2018-05-16 07:07:07 -04003222<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003223<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003224</pre>
3225
Cary Clark777eede2018-11-09 16:04:58 -05003226Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003227Does not alter <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003228
3229### Return Value
3230
Cary Clark777eede2018-11-09 16:04:58 -05003231<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003232
3233### Example
3234
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003235<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003236
3237#### Example Output
3238
3239~~~~
3240nullptr == image filter
3241nullptr != image filter
3242~~~~
3243
3244</fiddle-embed></div>
3245
Cary Clark682c58d2018-05-16 07:07:07 -04003246<a name='SkPaint_refImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003247
3248---
Cary Clark12799e12017-07-28 15:18:29 -04003249
Cary Clark682c58d2018-05-16 07:07:07 -04003250<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003251<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkImageFilter'>SkImageFilter</a>&gt; <a href='#SkPaint_refImageFilter'>refImageFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003252</pre>
3253
Cary Clark777eede2018-11-09 16:04:58 -05003254Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
3255Increases <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003256
3257### Return Value
3258
Cary Clark777eede2018-11-09 16:04:58 -05003259<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003260
3261### Example
3262
3263<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3264
3265#### Example Output
3266
3267~~~~
3268image filter unique: true
3269image filter unique: false
3270~~~~
3271
3272</fiddle-embed></div>
3273
Cary Clark682c58d2018-05-16 07:07:07 -04003274<a name='SkPaint_setImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003275
3276---
Cary Clark12799e12017-07-28 15:18:29 -04003277
Cary Clark682c58d2018-05-16 07:07:07 -04003278<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003279void <a href='#SkPaint_setImageFilter'>setImageFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkImageFilter'>SkImageFilter</a>&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003280</pre>
3281
Cary Clark777eede2018-11-09 16:04:58 -05003282Sets <a href='undocumented#SkImageFilter'>SkImageFilter</a> to <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3283<a href='undocumented#SkImageFilter'>SkImageFilter</a>. Pass nullptr to clear <a href='undocumented#SkImageFilter'>SkImageFilter</a>, and remove <a href='undocumented#SkImageFilter'>SkImageFilter</a> effect
Cary Clark12799e12017-07-28 15:18:29 -04003284on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003285
Cary Clark777eede2018-11-09 16:04:58 -05003286Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003287
3288### Parameters
3289
Cary Clark682c58d2018-05-16 07:07:07 -04003290<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003291 <td>how <a href='SkImage_Reference#SkImage'>SkImage</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003292 </tr>
3293</table>
3294
3295### Example
3296
3297<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3298
Cary Clarka90ea222018-10-16 10:30:28 -04003299<a name='Draw_Looper_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003300
Cary Clarka90ea222018-10-16 10:30:28 -04003301---
Cary Clark08895c42018-02-01 09:37:32 -05003302
Cary Clark777eede2018-11-09 16:04:58 -05003303<a href='#Draw_Looper'>Draw_Looper</a> sets a modifier that communicates state from one <a href='#Draw_Layer'>Draw_Layer</a>
3304to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003305
Cary Clark777eede2018-11-09 16:04:58 -05003306<a href='#Draw_Looper'>Draw_Looper</a> draws one or more times, modifying the <a href='SkCanvas_Reference#Canvas'>canvas</a> and <a href='SkPaint_Reference#Paint'>paint</a> each time.
3307<a href='#Draw_Looper'>Draw_Looper</a> may be used to draw multiple colors or create a colored shadow.
3308Set <a href='#Draw_Looper'>Draw_Looper</a> to nullptr to prevent <a href='#Draw_Looper'>Draw_Looper</a> from modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003309
3310### Example
3311
3312<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3313
Cary Clark682c58d2018-05-16 07:07:07 -04003314<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003315
3316---
Cary Clark12799e12017-07-28 15:18:29 -04003317
Cary Clark682c58d2018-05-16 07:07:07 -04003318<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003319<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003320</pre>
3321
Cary Clark777eede2018-11-09 16:04:58 -05003322Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003323Does not alter <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003324
3325### Return Value
3326
Cary Clark777eede2018-11-09 16:04:58 -05003327<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003328
3329### Example
3330
3331<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3332
3333#### Example Output
3334
3335~~~~
3336nullptr == draw looper
3337nullptr != draw looper
3338~~~~
3339
3340</fiddle-embed></div>
3341
Cary Clark682c58d2018-05-16 07:07:07 -04003342<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003343
3344---
Cary Clark12799e12017-07-28 15:18:29 -04003345
Cary Clark682c58d2018-05-16 07:07:07 -04003346<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003347<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>&gt; <a href='#SkPaint_refDrawLooper'>refDrawLooper</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003348</pre>
3349
Cary Clark777eede2018-11-09 16:04:58 -05003350Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
3351Increases <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003352
3353### Return Value
3354
Cary Clark777eede2018-11-09 16:04:58 -05003355<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003356
3357### Example
3358
3359<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3360
3361#### Example Output
3362
3363~~~~
3364draw looper unique: true
3365draw looper unique: false
3366~~~~
3367
3368</fiddle-embed></div>
3369
Cary Clark682c58d2018-05-16 07:07:07 -04003370<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003371
3372---
Cary Clark12799e12017-07-28 15:18:29 -04003373
Cary Clark682c58d2018-05-16 07:07:07 -04003374<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkabaffd82018-11-15 08:25:12 -05003375void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003376</pre>
3377
Cary Clark777eede2018-11-09 16:04:58 -05003378Sets <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> to <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3379<a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>. Pass nullptr to clear <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> and leave <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> effect on
Cary Clark6fc50412017-09-21 12:31:06 -04003380drawing unaltered.
3381
Cary Clark777eede2018-11-09 16:04:58 -05003382Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003383
3384### Parameters
3385
Cary Clark682c58d2018-05-16 07:07:07 -04003386<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003387 <td>iterates through drawing one or more time, altering <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003388 </tr>
3389</table>
3390
3391### Example
3392
3393<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3394
Cary Clarka90ea222018-10-16 10:30:28 -04003395<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003396
Cary Clarka90ea222018-10-16 10:30:28 -04003397---
Cary Clark08895c42018-02-01 09:37:32 -05003398
Cary Clark777eede2018-11-09 16:04:58 -05003399<a href='#Paint_Text_Size'>Text_Size</a> adjusts the overall <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
3400<a href='#Paint_Text_Size'>Text_Size</a> can be set to any positive value or zero.
3401<a href='#Paint_Text_Size'>Text_Size</a> defaults to 12.
3402Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults_TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003403
3404### Example
3405
3406<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3407
Cary Clark682c58d2018-05-16 07:07:07 -04003408<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003409
3410---
Cary Clark12799e12017-07-28 15:18:29 -04003411
Cary Clark682c58d2018-05-16 07:07:07 -04003412<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003413<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003414</pre>
3415
Cary Clark777eede2018-11-09 16:04:58 -05003416Returns <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a> in <a href='SkPoint_Reference#Point'>points</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003417
3418### Return Value
3419
Cary Clark09d80c02018-10-31 12:14:03 -04003420typographic height of <a href='undocumented#Text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04003421
3422### Example
3423
skia-bookmaker233c6522018-07-04 05:33:26 +00003424<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003425
Cary Clark682c58d2018-05-16 07:07:07 -04003426<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003427
3428---
Cary Clark12799e12017-07-28 15:18:29 -04003429
Cary Clark682c58d2018-05-16 07:07:07 -04003430<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003431void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003432</pre>
3433
Cary Clark777eede2018-11-09 16:04:58 -05003434Sets <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
3435Has 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 -04003436
3437### Parameters
3438
Cary Clark682c58d2018-05-16 07:07:07 -04003439<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003440 <td>typographic height of <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003441 </tr>
3442</table>
3443
3444### Example
3445
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003446<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003447
Cary Clarka90ea222018-10-16 10:30:28 -04003448<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003449
Cary Clarka90ea222018-10-16 10:30:28 -04003450---
Cary Clark08895c42018-02-01 09:37:32 -05003451
Cary Clark777eede2018-11-09 16:04:58 -05003452<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal scale.
3453<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
3454is not available.
3455<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> can be set to any value.
3456<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003457
3458### Example
3459
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003460<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003461
Cary Clark682c58d2018-05-16 07:07:07 -04003462<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003463
3464---
Cary Clark12799e12017-07-28 15:18:29 -04003465
Cary Clark682c58d2018-05-16 07:07:07 -04003466<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003467<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003468</pre>
3469
Cary Clark777eede2018-11-09 16:04:58 -05003470Returns <a href='undocumented#Text'>text</a> scale on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003471Default value is 1.
3472
3473### Return Value
3474
Cary Clark777eede2018-11-09 16:04:58 -05003475<a href='undocumented#Text'>text</a> horizontal scale
Cary Clark12799e12017-07-28 15:18:29 -04003476
3477### Example
3478
3479<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3480
Cary Clark682c58d2018-05-16 07:07:07 -04003481<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003482
3483---
Cary Clark12799e12017-07-28 15:18:29 -04003484
Cary Clark682c58d2018-05-16 07:07:07 -04003485<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003486void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003487</pre>
3488
Cary Clark777eede2018-11-09 16:04:58 -05003489Sets <a href='undocumented#Text'>text scale</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003490Default value is 1.
3491
3492### Parameters
3493
Cary Clark682c58d2018-05-16 07:07:07 -04003494<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003495 <td><a href='undocumented#Text'>text</a> horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003496 </tr>
3497</table>
3498
3499### Example
3500
3501<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3502
Cary Clarka90ea222018-10-16 10:30:28 -04003503<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003504
Cary Clarka90ea222018-10-16 10:30:28 -04003505---
Cary Clark08895c42018-02-01 09:37:32 -05003506
Cary Clark777eede2018-11-09 16:04:58 -05003507<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal slant.
3508<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
3509is not available.
3510<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> can be set to any value.
3511<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003512
3513### Example
3514
3515<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3516
Cary Clark682c58d2018-05-16 07:07:07 -04003517<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003518
3519---
Cary Clark12799e12017-07-28 15:18:29 -04003520
Cary Clark682c58d2018-05-16 07:07:07 -04003521<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003522<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003523</pre>
3524
Cary Clark777eede2018-11-09 16:04:58 -05003525Returns <a href='undocumented#Text'>text</a> skew on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003526Default value is zero.
3527
3528### Return Value
3529
Cary Clark09d80c02018-10-31 12:14:03 -04003530additional shear on x-axis relative to y-axis
Cary Clark12799e12017-07-28 15:18:29 -04003531
3532### Example
3533
Cary Clark7f644ec2018-07-19 10:50:44 -04003534<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003535
Cary Clark682c58d2018-05-16 07:07:07 -04003536<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003537
3538---
Cary Clark12799e12017-07-28 15:18:29 -04003539
Cary Clark682c58d2018-05-16 07:07:07 -04003540<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003541void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003542</pre>
3543
Cary Clark777eede2018-11-09 16:04:58 -05003544Sets <a href='undocumented#Text'>text skew</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003545Default value is zero.
3546
3547### Parameters
3548
Cary Clark682c58d2018-05-16 07:07:07 -04003549<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003550 <td>additional shear on x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003551 </tr>
3552</table>
3553
3554### Example
3555
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003556<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003557
Cary Clarka90ea222018-10-16 10:30:28 -04003558<a name='Text_Encoding'></a>
3559
Cary Clark12799e12017-07-28 15:18:29 -04003560---
3561
Cary Clark12799e12017-07-28 15:18:29 -04003562### Example
3563
Cary Clark3e73dcf2018-12-06 08:41:14 -05003564<div><fiddle-embed name="767fa4e7b6300e16a419f9881f0f9d3d"><div>First <a href='undocumented#Line'>line</a> is encoded in UTF-8.
Cary Clark777eede2018-11-09 16:04:58 -05003565Second <a href='undocumented#Line'>line</a> is encoded in UTF-16.
3566Third <a href='undocumented#Line'>line</a> is encoded in UTF-32.
3567Fourth <a href='undocumented#Line'>line</a> has 16-bit <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003568</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003569
Cary Clark682c58d2018-05-16 07:07:07 -04003570<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003571
3572---
Cary Clark12799e12017-07-28 15:18:29 -04003573
Cary Clark682c58d2018-05-16 07:07:07 -04003574<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark3e73dcf2018-12-06 08:41:14 -05003575<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003576</pre>
3577
Cary Clark3e73dcf2018-12-06 08:41:14 -05003578Returns the <a href='undocumented#Text'>text</a> encoding. <a href='undocumented#Text'>Text</a> encoding describes how to interpret the <a href='undocumented#Text'>text</a> bytes pass
3579to methods like <a href='#SkPaint_measureText'>measureText</a>() and <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawText'>drawText</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003580
3581### Return Value
3582
Cary Clark3e73dcf2018-12-06 08:41:14 -05003583the <a href='undocumented#Text'>text</a> encoding
Cary Clark12799e12017-07-28 15:18:29 -04003584
3585### Example
3586
Cary Clark3e73dcf2018-12-06 08:41:14 -05003587<div><fiddle-embed name="0d21e968e9a4c78c902ae3ef494941a0">
Cary Clark12799e12017-07-28 15:18:29 -04003588
3589#### Example Output
3590
3591~~~~
Cary Clark3e73dcf2018-12-06 08:41:14 -05003592kUTF8_SkTextEncoding == text encoding
3593kGlyphID_SkTextEncoding == text encoding
Cary Clark12799e12017-07-28 15:18:29 -04003594~~~~
3595
3596</fiddle-embed></div>
3597
Cary Clark682c58d2018-05-16 07:07:07 -04003598<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003599
3600---
Cary Clark12799e12017-07-28 15:18:29 -04003601
Cary Clark682c58d2018-05-16 07:07:07 -04003602<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark3e73dcf2018-12-06 08:41:14 -05003603void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04003604</pre>
3605
Cary Clark3e73dcf2018-12-06 08:41:14 -05003606Sets the <a href='#Text_Encoding'>text encoding</a>. <a href='undocumented#Text'>Text</a> <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> describes how to interpret the <a href='undocumented#Text'>text</a> bytes pass
3607to methods like <a href='#SkPaint_measureText'>measureText</a>() and <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawText'>drawText</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003608
3609### Parameters
3610
Cary Clark682c58d2018-05-16 07:07:07 -04003611<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
Cary Clark3e73dcf2018-12-06 08:41:14 -05003612 <td>the new <a href='#Text_Encoding'>text encoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003613 </tr>
3614</table>
3615
3616### Example
3617
Cary Clark3e73dcf2018-12-06 08:41:14 -05003618<div><fiddle-embed name="a5d1ba0dbf42afb797ffdb07647b5cb9">
Cary Clark12799e12017-07-28 15:18:29 -04003619
3620#### Example Output
3621
3622~~~~
36234 != text encoding
3624~~~~
3625
3626</fiddle-embed></div>
3627
Cary Clark61313f32018-10-08 14:57:48 -04003628<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04003629
Cary Clarka90ea222018-10-16 10:30:28 -04003630---
3631
Cary Clark7e69c8f2018-11-06 20:40:45 -05003632<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003633
Cary Clark682c58d2018-05-16 07:07:07 -04003634<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003635
3636---
Cary Clark12799e12017-07-28 15:18:29 -04003637
Cary Clark682c58d2018-05-16 07:07:07 -04003638<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003639<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='undocumented#SkFontMetrics'>SkFontMetrics</a>* metrics)const
Cary Clark12799e12017-07-28 15:18:29 -04003640</pre>
3641
Cary Clark777eede2018-11-09 16:04:58 -05003642Returns <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> associated with <a href='undocumented#SkTypeface'>SkTypeface</a>.
3643The return value is the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>
Cary Clark12799e12017-07-28 15:18:29 -04003644descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003645If <a href='#SkPaint_getFontMetrics_metrics'>metrics</a> is not nullptr, <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> is copied to <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>.
3646Results are scaled by <a href='#Text_Size'>text size</a> but does not take into account
Cary Clark09d80c02018-10-31 12:14:03 -04003647dimensions 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>,
3648<a href='#Style_Stroke'>style stroke</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003649
3650### Parameters
3651
Cary Clark682c58d2018-05-16 07:07:07 -04003652<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003653 <td>storage for <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003654 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04003655</table>
3656
3657### Return Value
3658
Cary Clark09d80c02018-10-31 12:14:03 -04003659recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003660
3661### Example
3662
skia-bookmaker2dc1e342018-11-02 05:33:11 +00003663<div><fiddle-embed name="59d9b8249afa1c2af6186711250ce240"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003664
3665### See Also
3666
Cary Clark3e73dcf2018-12-06 08:41:14 -05003667<a href='#Font_Size'>Font_Size</a> <a href='undocumented#Typeface'>Typeface</a> <a href='#Paint_Typeface_Methods'>Typeface_Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04003668
Cary Clark682c58d2018-05-16 07:07:07 -04003669<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003670
3671---
Cary Clark12799e12017-07-28 15:18:29 -04003672
Cary Clark682c58d2018-05-16 07:07:07 -04003673<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003674<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003675</pre>
3676
Cary Clark777eede2018-11-09 16:04:58 -05003677Returns the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of metrics
Cary Clark12799e12017-07-28 15:18:29 -04003678descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003679Result is scaled by <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a> but does not take into account
Cary Clark09d80c02018-10-31 12:14:03 -04003680dimensions required by stroking and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
3681Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003682
3683### Return Value
3684
Cary Clark09d80c02018-10-31 12:14:03 -04003685recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003686
3687### Example
3688
3689<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
3690
3691#### Example Output
3692
3693~~~~
3694textSize: 12 fontSpacing: 13.9688
3695textSize: 18 fontSpacing: 20.9531
3696textSize: 24 fontSpacing: 27.9375
3697textSize: 32 fontSpacing: 37.25
3698~~~~
3699
3700</fiddle-embed></div>
3701
Cary Clark682c58d2018-05-16 07:07:07 -04003702<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003703
3704---
Cary Clark12799e12017-07-28 15:18:29 -04003705
Cary Clark682c58d2018-05-16 07:07:07 -04003706<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003707int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength, <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[])const
Cary Clark12799e12017-07-28 15:18:29 -04003708</pre>
3709
Cary Clark777eede2018-11-09 16:04:58 -05003710Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into <a href='undocumented#Glyph'>glyph</a> indices.
3711Returns the number of <a href='undocumented#Glyph'>glyph</a> indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003712<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> specifies how <a href='#SkPaint_textToGlyphs_text'>text</a> represents characters or <a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003713<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the <a href='undocumented#Glyph'>glyph</a> count.
Cary Clark12799e12017-07-28 15:18:29 -04003714
Cary Clark777eede2018-11-09 16:04:58 -05003715Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark12799e12017-07-28 15:18:29 -04003716
Cary Clark777eede2018-11-09 16:04:58 -05003717If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
3718If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003719
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003720If <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> is <a href='undocumented#kUTF8_SkTextEncoding'>kUTF8_SkTextEncoding</a> and
Cary Clark777eede2018-11-09 16:04:58 -05003721<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04003722
3723### Parameters
3724
Cary Clark682c58d2018-05-16 07:07:07 -04003725<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003726 <td>character storage encoded with <a href='undocumented#SkTextEncoding'>SkTextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003727 </tr>
3728 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
3729 <td>length of character storage in bytes</td>
3730 </tr>
3731 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003732 <td>storage for <a href='undocumented#Glyph'>glyph</a> indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003733 </tr>
3734</table>
3735
3736### Return Value
3737
Cary Clark777eede2018-11-09 16:04:58 -05003738number 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 -04003739
3740### Example
3741
Cary Clark3e73dcf2018-12-06 08:41:14 -05003742<div><fiddle-embed name="d11136d8a74f63009da2a7f550710823"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003743
Cary Clark682c58d2018-05-16 07:07:07 -04003744<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003745
3746---
Cary Clark12799e12017-07-28 15:18:29 -04003747
Cary Clark682c58d2018-05-16 07:07:07 -04003748<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003749int <a href='#SkPaint_countText'>countText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength)const
Cary Clark12799e12017-07-28 15:18:29 -04003750</pre>
3751
Cary Clark777eede2018-11-09 16:04:58 -05003752Returns the number of <a href='undocumented#Glyph'>glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003753Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to count the <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04003754Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003755
3756### Parameters
3757
Cary Clark682c58d2018-05-16 07:07:07 -04003758<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003759 <td>character storage encoded with <a href='undocumented#SkTextEncoding'>SkTextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003760 </tr>
3761 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
3762 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04003763 </tr>
3764</table>
3765
3766### Return Value
3767
Cary Clark777eede2018-11-09 16:04:58 -05003768number of <a href='undocumented#Glyph'>glyphs</a> represented by <a href='#SkPaint_countText_text'>text</a> of length <a href='#SkPaint_countText_byteLength'>byteLength</a>
Cary Clark12799e12017-07-28 15:18:29 -04003769
3770### Example
3771
Cary Clarkf9603982018-07-17 08:20:27 -04003772<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04003773
3774#### Example Output
3775
3776~~~~
3777count = 5
3778~~~~
3779
3780</fiddle-embed></div>
3781
Cary Clark682c58d2018-05-16 07:07:07 -04003782<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003783
3784---
Cary Clark12799e12017-07-28 15:18:29 -04003785
Cary Clark682c58d2018-05-16 07:07:07 -04003786<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003787bool <a href='#SkPaint_containsText'>containsText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength)const
Cary Clark12799e12017-07-28 15:18:29 -04003788</pre>
3789
Cary Clark777eede2018-11-09 16:04:58 -05003790Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index.
3791Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
Cary Clark09d80c02018-10-31 12:14:03 -04003792<a href='undocumented#SkTypeface'>SkTypeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003793
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003794If <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> is <a href='undocumented#kGlyphID_SkTextEncoding'>kGlyphID_SkTextEncoding</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003795returns true if all <a href='undocumented#Glyph'>glyph</a> indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
3796does not check to see if <a href='#SkPaint_containsText_text'>text</a> contains valid <a href='undocumented#Glyph'>glyph</a> indices for <a href='undocumented#SkTypeface'>SkTypeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003797
Cary Clark777eede2018-11-09 16:04:58 -05003798Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04003799
3800### Parameters
3801
Cary Clark682c58d2018-05-16 07:07:07 -04003802<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003803 <td>array of characters or <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003804 </tr>
3805 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003806 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04003807 </tr>
3808</table>
3809
3810### Return Value
3811
Cary Clark777eede2018-11-09 16:04:58 -05003812true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index
Cary Clark12799e12017-07-28 15:18:29 -04003813
Cary Clark777eede2018-11-09 16:04:58 -05003814<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a <a href='undocumented#Glyph'>glyph</a> index
3815corresponding to the Unicode surrogate code <a href='SkPoint_Reference#Point'>point</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003816</div>
Cary Clark12799e12017-07-28 15:18:29 -04003817
3818#### Example Output
3819
3820~~~~
38210x00b0 == has char
38220xd800 != has char
3823~~~~
3824
Cary Clark12799e12017-07-28 15:18:29 -04003825### Example
3826
Cary Clark3e73dcf2018-12-06 08:41:14 -05003827<div><fiddle-embed name="6a68cb3c8b81a5976c81ee004f559247"><div><a href='#SkPaint_containsText'>containsText</a> returns true that <a href='undocumented#Glyph'>glyph</a> index is greater than zero, not
Cary Clark777eede2018-11-09 16:04:58 -05003828that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003829</div>
Cary Clark12799e12017-07-28 15:18:29 -04003830
3831#### Example Output
3832
3833~~~~
38340x01ff == has glyph
38350x0000 != has glyph
38360xffff == has glyph
3837~~~~
3838
3839</fiddle-embed></div>
3840
3841### See Also
3842
Cary Clark682c58d2018-05-16 07:07:07 -04003843<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04003844
Cary Clark682c58d2018-05-16 07:07:07 -04003845<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003846
3847---
Cary Clark12799e12017-07-28 15:18:29 -04003848
Cary Clark682c58d2018-05-16 07:07:07 -04003849<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003850void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> <a href='undocumented#Text'>text</a>[])const
Cary Clark12799e12017-07-28 15:18:29 -04003851</pre>
3852
Cary Clark777eede2018-11-09 16:04:58 -05003853Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
3854<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
3855Uses the <a href='undocumented#SkTypeface'>SkTypeface</a>, but is unaffected
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003856by <a href='undocumented#SkTextEncoding'>SkTextEncoding</a>; the <a href='#SkPaint_glyphsToUnichars_text'>text</a> values returned are equivalent to <a href='undocumented#kUTF32_SkTextEncoding'>kUTF32_SkTextEncoding</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003857
Cary Clarkcb6bef02018-11-29 12:05:25 -05003858Only supported on platforms that use FreeType as the <a href='SkFont_Reference#Font_Engine'>font engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003859
3860### Parameters
3861
Cary Clark682c58d2018-05-16 07:07:07 -04003862<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clarkcb6bef02018-11-29 12:05:25 -05003863 <td>array of indices into <a href='SkFont_Reference#Font'>font</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003864 </tr>
3865 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003866 <td>length of <a href='undocumented#Glyph'>glyph</a> array</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003867 </tr>
3868 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003869 <td>storage for character codes, one per <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003870 </tr>
3871</table>
3872
3873### Example
3874
Cary Clark3e73dcf2018-12-06 08:41:14 -05003875<div><fiddle-embed name="79c550ec6c34054ab60fbcd1b81adc03"><div>Convert UTF-8 <a href='#SkPaint_glyphsToUnichars_text'>text</a> to <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a>; then convert <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> to Unichar code <a href='SkPoint_Reference#Point'>points</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003876</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003877
Cary Clarka90ea222018-10-16 10:30:28 -04003878<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003879
Cary Clark682c58d2018-05-16 07:07:07 -04003880<a name='SkPaint_measureText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003881
3882---
Cary Clark12799e12017-07-28 15:18:29 -04003883
Cary Clark682c58d2018-05-16 07:07:07 -04003884<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003885<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds)const
Cary Clark12799e12017-07-28 15:18:29 -04003886</pre>
3887
Cary Clark3aca39d2018-10-23 14:44:05 -04003888Returns the advance width of <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04003889The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003890Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_measureText_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003891and <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
3892<a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
3893Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
3894The 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 -04003895
3896### Parameters
3897
Cary Clark682c58d2018-05-16 07:07:07 -04003898<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003899 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003900 </tr>
3901 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003902 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003903 </tr>
3904 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
3905 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003906 </tr>
3907</table>
3908
3909### Return Value
3910
3911advance width or height
3912
3913### Example
3914
Cary Clark83647062018-07-18 16:21:51 -04003915<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003916
Cary Clark682c58d2018-05-16 07:07:07 -04003917<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05003918
Cary Clarka90ea222018-10-16 10:30:28 -04003919---
3920
Cary Clark682c58d2018-05-16 07:07:07 -04003921<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003922<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length)const
Cary Clark12799e12017-07-28 15:18:29 -04003923</pre>
3924
Cary Clark3aca39d2018-10-23 14:44:05 -04003925Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04003926The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003927Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_measureText_2_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003928and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04003929Does not scale the advance or bounds by <a href='#Fake_Bold'>fake bold</a> or <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003930
3931### Parameters
3932
Cary Clark682c58d2018-05-16 07:07:07 -04003933<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003934 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003935 </tr>
3936 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003937 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04003938 </tr>
3939</table>
3940
3941### Return Value
3942
3943advance width or height
3944
3945### Example
3946
3947<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
3948
3949#### Example Output
3950
3951~~~~
3952default width = 5
3953double width = 10
3954~~~~
3955
3956</fiddle-embed></div>
3957
Cary Clark682c58d2018-05-16 07:07:07 -04003958<a name='SkPaint_breakText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003959
3960---
Cary Clark12799e12017-07-28 15:18:29 -04003961
Cary Clark682c58d2018-05-16 07:07:07 -04003962<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003963size_t <a href='#SkPaint_breakText'>breakText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
Cary Clarkcb6bef02018-11-29 12:05:25 -05003964 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr)const
Cary Clark12799e12017-07-28 15:18:29 -04003965</pre>
3966
Cary Clark777eede2018-11-09 16:04:58 -05003967Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
3968The <a href='#SkPaint_breakText_text'>text</a> fragment fits if its advance width is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04003969Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003970Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003971Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_breakText_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003972and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04003973Does not scale the advance or bounds by <a href='#Fake_Bold'>fake bold</a> or <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003974
3975### Parameters
3976
Cary Clark682c58d2018-05-16 07:07:07 -04003977<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003978 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003979 </tr>
3980 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003981 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003982 </tr>
3983 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003984 <td>advance limit; <a href='#SkPaint_breakText_text'>text</a> is measured while advance is less than <a href='#SkPaint_breakText_maxWidth'>maxWidth</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003985 </tr>
3986 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003987 <td>returns 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 -04003988 </tr>
3989</table>
3990
3991### Return Value
3992
Cary Clark777eede2018-11-09 16:04:58 -05003993bytes 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 -04003994
3995### Example
3996
Cary Clark777eede2018-11-09 16:04:58 -05003997<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "Breakfast" shows desired width, shorter than available characters.
3998<a href='undocumented#Line'>Line</a> under "Bre" shows measured width after breaking <a href='#SkPaint_breakText_text'>text</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003999</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004000
Cary Clark682c58d2018-05-16 07:07:07 -04004001<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004002
4003---
Cary Clark12799e12017-07-28 15:18:29 -04004004
Cary Clark682c58d2018-05-16 07:07:07 -04004005<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004006int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength, <a href='undocumented#SkScalar'>SkScalar</a> widths[], <a href='SkRect_Reference#SkRect'>SkRect</a> bounds[] = nullptr)const
Cary Clark12799e12017-07-28 15:18:29 -04004007</pre>
4008
Cary Clark777eede2018-11-09 16:04:58 -05004009Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each <a href='undocumented#Glyph'>glyph</a> in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
4010the <a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4011Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4012If <a href='#SkPaint_getTextWidths_widths'>widths</a> is not nullptr, <a href='#SkPaint_getTextWidths_widths'>widths</a> must be an array of <a href='undocumented#Glyph'>glyph</a> count entries.
4013if <a href='#SkPaint_getTextWidths_bounds'>bounds</a> is not nullptr, <a href='#SkPaint_getTextWidths_bounds'>bounds</a> must be an array of <a href='undocumented#Glyph'>glyph</a> count entries.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004014Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_getTextWidths_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
Cary Clark777eede2018-11-09 16:04:58 -05004015and <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>.
Cary Clark09d80c02018-10-31 12:14:03 -04004016Does not scale the advance by <a href='#Fake_Bold'>fake bold</a> or <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004017Does include <a href='#Fake_Bold'>fake bold</a> and <a href='undocumented#SkPathEffect'>SkPathEffect</a> in the <a href='#SkPaint_getTextWidths_bounds'>bounds</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004018
4019### Parameters
4020
Cary Clark682c58d2018-05-16 07:07:07 -04004021<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004022 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004023 </tr>
4024 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004025 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004026 </tr>
4027 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004028 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each <a href='undocumented#Glyph'>glyph</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004029 </tr>
4030 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004031 <td>returns <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each <a href='undocumented#Glyph'>glyph</a> relative to (0, 0); may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004032 </tr>
4033</table>
4034
4035### Return Value
4036
Cary Clark777eede2018-11-09 16:04:58 -05004037<a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004038
4039### Example
4040
Cary Clark777eede2018-11-09 16:04:58 -05004041<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href='undocumented#Glyph'>Glyphs</a> increase for stroked <a href='#SkPaint_getTextWidths_text'>text</a>, but <a href='#SkPaint_getTextWidths_text'>text</a> advance remains the same.
4042The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004043</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004044
Cary Clarka90ea222018-10-16 10:30:28 -04004045<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004046
Cary Clark777eede2018-11-09 16:04:58 -05004047<a href='#Paint_Text_Path'>Text_Path</a> describes the geometry of <a href='undocumented#Glyph'>Glyphs</a> used to draw <a href='undocumented#Text'>text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004048
Cary Clark682c58d2018-05-16 07:07:07 -04004049<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004050
4051---
Cary Clark12799e12017-07-28 15:18:29 -04004052
Cary Clark682c58d2018-05-16 07:07:07 -04004053<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004054void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y, <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>)const
Cary Clark12799e12017-07-28 15:18:29 -04004055</pre>
4056
Cary Clark777eede2018-11-09 16:04:58 -05004057Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004058Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_getTextPath_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
Cary Clark777eede2018-11-09 16:04:58 -05004059and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4060All of the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a> are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
4061Uses <a href='#SkPaint_getTextPath_x'>x</a>, <a href='#SkPaint_getTextPath_y'>y</a>, to position <a href='#SkPaint_getTextPath_path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004062
4063### Parameters
4064
Cary Clark682c58d2018-05-16 07:07:07 -04004065<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004066 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004067 </tr>
4068 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4069 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4070 </tr>
4071 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004072 <td>x-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004073 </tr>
4074 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004075 <td>y-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004076 </tr>
4077 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004078 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004079 </tr>
4080</table>
4081
4082### Example
4083
Cary Clark777eede2018-11-09 16:04:58 -05004084<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
4085the offset location. The result is rendered with one draw call.
Cary Clark1a8d7622018-03-05 13:26:16 -05004086</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004087
Cary Clark682c58d2018-05-16 07:07:07 -04004088<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004089
4090---
Cary Clark12799e12017-07-28 15:18:29 -04004091
Cary Clark682c58d2018-05-16 07:07:07 -04004092<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004093void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>)const
Cary Clark12799e12017-07-28 15:18:29 -04004094</pre>
4095
Cary Clark777eede2018-11-09 16:04:58 -05004096Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004097Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_getPosTextPath_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
Cary Clark777eede2018-11-09 16:04:58 -05004098and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4099All of the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a> are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
4100Uses <a href='#SkPaint_getPosTextPath_pos'>pos</a> array to position <a href='#SkPaint_getPosTextPath_path'>path</a>.
4101<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each <a href='undocumented#Glyph'>glyph</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004102
4103### Parameters
4104
Cary Clark682c58d2018-05-16 07:07:07 -04004105<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004106 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004107 </tr>
4108 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4109 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4110 </tr>
4111 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004112 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004113 </tr>
4114 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004115 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004116 </tr>
4117</table>
4118
4119### Example
4120
Cary Clark777eede2018-11-09 16:04:58 -05004121<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three <a href='undocumented#Glyph'>Glyphs</a> to eliminate overlaps, and strokes the result.
Cary Clark1a8d7622018-03-05 13:26:16 -05004122</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004123
Cary Clarka90ea222018-10-16 10:30:28 -04004124<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004125
Cary Clark777eede2018-11-09 16:04:58 -05004126<a href='#Paint_Text_Intercepts'>Text_Intercepts</a> describe the intersection of drawn <a href='undocumented#Text'>text</a> <a href='undocumented#Glyph'>Glyphs</a> with a pair
4127of <a href='undocumented#Line'>lines</a> parallel to the <a href='undocumented#Text'>text</a> advance. <a href='#Paint_Text_Intercepts'>Text_Intercepts</a> permits creating a
4128underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004129
Cary Clark682c58d2018-05-16 07:07:07 -04004130<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004131
4132---
Cary Clark12799e12017-07-28 15:18:29 -04004133
Cary Clark682c58d2018-05-16 07:07:07 -04004134<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004135int <a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
Cary Clarkcb6bef02018-11-29 12:05:25 -05004136 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004137</pre>
4138
Cary Clark777eede2018-11-09 16:04:58 -05004139Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
4140<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of <a href='undocumented#Line'>lines</a> parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
4141The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
Cary Clark09d80c02018-10-31 12:14:03 -04004142the <a href='undocumented#String'>string</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004143Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_getTextIntercepts_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
Cary Clark777eede2018-11-09 16:04:58 -05004144and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4145Uses <a href='#SkPaint_getTextIntercepts_x'>x</a>, <a href='#SkPaint_getTextIntercepts_y'>y</a> to position <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004146
Cary Clark777eede2018-11-09 16:04:58 -05004147Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the <a href='undocumented#Size'>size</a> of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004148
Cary Clark777eede2018-11-09 16:04:58 -05004149<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004150
4151### Parameters
4152
Cary Clark682c58d2018-05-16 07:07:07 -04004153<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004154 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004155 </tr>
4156 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
4157 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
4158 </tr>
4159 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004160 <td>x-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004161 </tr>
4162 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004163 <td>y-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004164 </tr>
4165 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004166 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004167 </tr>
4168 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4169 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004170 </tr>
4171</table>
4172
4173### Return Value
4174
4175number of intersections; may be zero
4176
Cary Clarke9c5a152018-11-21 11:45:57 -05004177<div>Underline uses intercepts to draw on either side of the <a href='undocumented#Glyph'>glyph</a> Descender.
4178</div>
Cary Clark12799e12017-07-28 15:18:29 -04004179
Cary Clark682c58d2018-05-16 07:07:07 -04004180<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004181
4182---
Cary Clark12799e12017-07-28 15:18:29 -04004183
Cary Clark682c58d2018-05-16 07:07:07 -04004184<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004185int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
Cary Clarkcb6bef02018-11-29 12:05:25 -05004186 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004187</pre>
4188
Cary Clark777eede2018-11-09 16:04:58 -05004189Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
4190<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of <a href='undocumented#Line'>lines</a> parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
4191The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
Cary Clark09d80c02018-10-31 12:14:03 -04004192the <a href='undocumented#String'>string</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004193Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_getPosTextIntercepts_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
Cary Clark777eede2018-11-09 16:04:58 -05004194and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4195Uses <a href='#SkPaint_getPosTextIntercepts_pos'>pos</a> array to position <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004196
Cary Clark777eede2018-11-09 16:04:58 -05004197Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the <a href='undocumented#Size'>size</a> of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004198
Cary Clark777eede2018-11-09 16:04:58 -05004199<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004200
4201### Parameters
4202
Cary Clark682c58d2018-05-16 07:07:07 -04004203<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004204 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004205 </tr>
4206 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
4207 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
4208 </tr>
4209 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004210 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004211 </tr>
4212 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004213 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004214 </tr>
4215 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4216 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004217 </tr>
4218</table>
4219
4220### Return Value
4221
Cary Clarka523d2d2017-08-30 08:58:10 -04004222number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004223
Cary Clarke9c5a152018-11-21 11:45:57 -05004224<div><a href='undocumented#Text'>Text</a> intercepts draw on either side of, but not inside, <a href='undocumented#Glyph'>Glyphs</a> in a run.
4225</div>
Cary Clark12799e12017-07-28 15:18:29 -04004226
Cary Clark682c58d2018-05-16 07:07:07 -04004227<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004228
4229---
Cary Clark12799e12017-07-28 15:18:29 -04004230
Cary Clark682c58d2018-05-16 07:07:07 -04004231<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004232int <a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='undocumented#SkScalar'>SkScalar</a> xpos[], <a href='undocumented#SkScalar'>SkScalar</a> constY,
Cary Clarkcb6bef02018-11-29 12:05:25 -05004233 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004234</pre>
4235
Cary Clark777eede2018-11-09 16:04:58 -05004236Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
4237<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of <a href='undocumented#Line'>lines</a> parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
4238The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
Cary Clark09d80c02018-10-31 12:14:03 -04004239the <a href='undocumented#String'>string</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004240Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_getPosTextHIntercepts_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
Cary Clark777eede2018-11-09 16:04:58 -05004241and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4242Uses <a href='#SkPaint_getPosTextHIntercepts_xpos'>xpos</a> array, <a href='#SkPaint_getPosTextHIntercepts_constY'>constY</a> to position <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004243
Cary Clark777eede2018-11-09 16:04:58 -05004244Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the <a href='undocumented#Size'>size</a> of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004245
Cary Clark777eede2018-11-09 16:04:58 -05004246<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004247
4248### Parameters
4249
Cary Clark682c58d2018-05-16 07:07:07 -04004250<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004251 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004252 </tr>
4253 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
4254 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
4255 </tr>
4256 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004257 <td>positions of each <a href='undocumented#Glyph'>glyph</a> on x-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004258 </tr>
4259 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004260 <td>position of each <a href='undocumented#Glyph'>glyph</a> on y-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004261 </tr>
4262 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004263 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004264 </tr>
4265 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4266 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004267 </tr>
4268</table>
4269
4270### Return Value
4271
4272number of intersections; may be zero
4273
Cary Clarke9c5a152018-11-21 11:45:57 -05004274<div><a href='undocumented#Text'>Text</a> intercepts do not take stroke thickness into consideration.
4275</div>
Cary Clark12799e12017-07-28 15:18:29 -04004276
Cary Clark682c58d2018-05-16 07:07:07 -04004277<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004278
4279---
Cary Clark12799e12017-07-28 15:18:29 -04004280
Cary Clark682c58d2018-05-16 07:07:07 -04004281<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004282int <a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a>(const <a href='SkTextBlob_Reference#SkTextBlob'>SkTextBlob</a>* blob, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004283</pre>
4284
Cary Clark777eede2018-11-09 16:04:58 -05004285Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
4286<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of <a href='undocumented#Line'>lines</a> parallel to the <a href='undocumented#Text'>text</a> advance.
4287The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
Cary Clark09d80c02018-10-31 12:14:03 -04004288the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004289Uses <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
4290and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
skia-bookmakerf1ec3912018-11-03 05:34:02 +00004291Uses run array to position <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004292
Cary Clark3e73dcf2018-12-06 08:41:14 -05004293<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> must be set to <a href='undocumented#kGlyphID_SkTextEncoding'>kGlyphID_SkTextEncoding</a>.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004294
Cary Clark777eede2018-11-09 16:04:58 -05004295Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the <a href='undocumented#Size'>size</a> of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004296
Cary Clark777eede2018-11-09 16:04:58 -05004297<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004298
4299### Parameters
4300
Cary Clark682c58d2018-05-16 07:07:07 -04004301<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004302 <td><a href='undocumented#Glyph'>glyphs</a>, positions, and <a href='undocumented#Text'>text</a> <a href='SkPaint_Reference#Paint'>paint</a> attributes</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004303 </tr>
4304 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004305 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004306 </tr>
4307 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4308 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004309 </tr>
4310</table>
4311
4312### Return Value
4313
4314number of intersections; may be zero
4315
4316### Example
4317
skia-bookmaker53079c32018-11-25 04:03:02 +00004318<div><fiddle-embed name="728ea9089f233a71a1062e364b8c73fa"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004319
Cary Clark682c58d2018-05-16 07:07:07 -04004320<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004321
4322---
Cary Clark12799e12017-07-28 15:18:29 -04004323
Cary Clark682c58d2018-05-16 07:07:07 -04004324<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004325bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04004326</pre>
4327
Cary Clark777eede2018-11-09 16:04:58 -05004328Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing;
4329otherwise, the <a href='SkPaint_Reference#SkPaint'>SkPaint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004330
Cary Clark777eede2018-11-09 16:04:58 -05004331Returns true if, for example, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> combined with <a href='SkColor_Reference#Alpha'>alpha</a> computes a
4332new <a href='SkColor_Reference#Alpha'>alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004333
4334### Return Value
4335
Cary Clark777eede2018-11-09 16:04:58 -05004336true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004337
4338### Example
4339
Cary Clark83647062018-07-18 16:21:51 -04004340<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04004341
4342#### Example Output
4343
4344~~~~
4345initial nothing to draw: false
4346blend dst nothing to draw: true
4347blend src over nothing to draw: false
4348alpha 0 nothing to draw: true
4349~~~~
4350
4351</fiddle-embed></div>
4352
Cary Clarka90ea222018-10-16 10:30:28 -04004353<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05004354