blob: 531e005c7d3e88cfc6d0cf17523cf5be41d328e0 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
Cary Clark61313f32018-10-08 14:57:48 -04004<a name='SkPaint'></a>
Cary Clarke4aa3712017-09-15 02:56:12 -04005
Cary Clark61313f32018-10-08 14:57:48 -04006<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
7class <a href='#SkPaint'>SkPaint</a> {
8public:
9 <a href='#SkPaint_empty_constructor'>SkPaint()</a>;
10 <a href='#SkPaint_copy_const_SkPaint'>SkPaint(const SkPaint& paint)</a>;
11 <a href='#SkPaint_move_SkPaint'>SkPaint(SkPaint&& paint)</a>;
12 <a href='#SkPaint_destructor'>~SkPaint()</a>;
13 <a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>;
14 <a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>;
15 friend bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>;
16 friend bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>;
17 uint32_t <a href='#SkPaint_getHash'>getHash</a>() const;
18 void <a href='#SkPaint_reset'>reset</a>();
19
20 enum <a href='#SkPaint_Hinting'>Hinting</a> {
21 <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a> = 0,
22 <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a> = 1,
23 <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a> = 2,
24 <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a> = 3,
25 };
26
27 <a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const;
28 void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel);
29
30 enum <a href='#SkPaint_Flags'>Flags</a> {
31 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
32 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
33 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
34 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
35 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
36 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
37 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
38 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
39 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText_Flag</a> = 0x1000,
40 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
41 };
42
43 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
44 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText_ReserveFlag</a> = 0x08,
45 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText_ReserveFlag</a> = 0x10,
46 };
47
48 uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const;
49 void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags);
50 bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const;
51 void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa);
52 bool <a href='#SkPaint_isDither'>isDither</a>() const;
53 void <a href='#SkPaint_setDither'>setDither</a>(bool dither);
54 bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const;
55 void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText);
56 bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const;
57 void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText);
58 bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const;
59 void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText);
60 bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const;
61 void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText);
62 bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const;
63 void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter);
64 bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const;
65 void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText);
66 bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const;
67 void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText);
68 bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const;
69 void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool);
70 <a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const;
71 void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality);
72
73 enum <a href='#SkPaint_Style'>Style</a> {
74 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
75 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
76 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
77 };
78
79 static constexpr int <a href='#SkPaint_kStyleCount'>kStyleCount</a> = <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> + 1;
80
81 <a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const;
82 void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style);
83 <a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const;
84 <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const;
85 void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color);
86 void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& color, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace);
87 uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const;
88 void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a);
89 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);
90 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const;
91 void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width);
92 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const;
93 void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter);
94
95 enum <a href='#SkPaint_Cap'>Cap</a> {
96 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
97 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
98 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
99 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
100 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
101 };
102
103 static constexpr int <a href='#SkPaint_kCapCount'>kCapCount</a> = <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> + 1;
104
105 enum <a href='#SkPaint_Join'>Join</a> {
106 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
107 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
108 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
109 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
110 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
111 };
112
113 static constexpr int <a href='#SkPaint_kJoinCount'>kJoinCount</a> = <a href='#SkPaint_kLast_Join'>kLast_Join</a> + 1;
114
115 <a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const;
116 void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap);
117 <a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const;
118 void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join);
119 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,
120 <a href='undocumented#SkScalar'>SkScalar</a> resScale = 1) const;
121 bool <a href='#SkPaint_getFillPath_2'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst) const;
122 <a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const;
123 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkShader'>SkShader</a>> <a href='#SkPaint_refShader'>refShader</a>() const;
124 void <a href='#SkPaint_setShader'>setShader</a>(sk_sp<<a href='undocumented#SkShader'>SkShader</a>> shader);
125 <a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const;
126 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorFilter'>SkColorFilter</a>> <a href='#SkPaint_refColorFilter'>refColorFilter</a>() const;
127 void <a href='#SkPaint_setColorFilter'>setColorFilter</a>(sk_sp<<a href='undocumented#SkColorFilter'>SkColorFilter</a>> colorFilter);
128 <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const;
129 bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const;
130 void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode);
131 <a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const;
132 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkPathEffect'>SkPathEffect</a>> <a href='#SkPaint_refPathEffect'>refPathEffect</a>() const;
133 void <a href='#SkPaint_setPathEffect'>setPathEffect</a>(sk_sp<<a href='undocumented#SkPathEffect'>SkPathEffect</a>> pathEffect);
134 <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const;
135 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> <a href='#SkPaint_refMaskFilter'>refMaskFilter</a>() const;
136 void <a href='#SkPaint_setMaskFilter'>setMaskFilter</a>(sk_sp<<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> maskFilter);
137 <a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const;
138 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkTypeface'>SkTypeface</a>> <a href='#SkPaint_refTypeface'>refTypeface</a>() const;
139 void <a href='#SkPaint_setTypeface'>setTypeface</a>(sk_sp<<a href='undocumented#SkTypeface'>SkTypeface</a>> typeface);
140 <a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const;
141 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkImageFilter'>SkImageFilter</a>> <a href='#SkPaint_refImageFilter'>refImageFilter</a>() const;
142 void <a href='#SkPaint_setImageFilter'>setImageFilter</a>(sk_sp<<a href='undocumented#SkImageFilter'>SkImageFilter</a>> imageFilter);
143 <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const;
144 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> <a href='#SkPaint_refDrawLooper'>refDrawLooper</a>() const;
145 <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const;
146 void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(sk_sp<<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
147 void <a href='#SkPaint_setLooper'>setLooper</a>(sk_sp<<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
148
149 enum <a href='#SkPaint_Align'>Align</a> {
150 <a href='#SkPaint_kLeft_Align'>kLeft_Align</a>,
151 <a href='#SkPaint_kCenter_Align'>kCenter_Align</a>,
152 <a href='#SkPaint_kRight_Align'>kRight_Align</a>,
153 };
154
155 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
156
157 <a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const;
158 void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align);
159 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const;
160 void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize);
161 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const;
162 void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX);
163 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const;
164 void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX);
165
166 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
167 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
168 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
169 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
170 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
171 };
172
173 <a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const;
174 void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding);
175
176 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
177
178 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
179 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
180 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
181 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
182 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
183 };
184
185 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
186 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
187 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
188 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
189 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
190 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
191 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
192 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
193 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
194 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
195 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
196 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
197 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
198 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
199 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
200 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
201 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
202 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
203 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
204 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
205 };
206
207 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='#SkPaint_FontMetrics'>FontMetrics</a>* metrics, <a href='undocumented#SkScalar'>SkScalar</a> scale = 0) const;
208 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const;
209 int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* text, size_t byteLength,
210 <a href='undocumented#SkGlyphID'>SkGlyphID</a> glyphs[]) const;
211 bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const;
212 void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> glyphs[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> text[]) const;
213 int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const;
214 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* text, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const;
215 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText_2'>measureText</a>(const void* text, size_t length) const;
216 size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
217 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const;
218 int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* text, size_t byteLength, <a href='undocumented#SkScalar'>SkScalar</a> widths[],
219 <a href='SkRect_Reference#SkRect'>SkRect</a> bounds[] = nullptr) const;
220 void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
221 <a href='SkPath_Reference#SkPath'>SkPath</a>* path) const;
222 void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* text, size_t length,
223 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* path) const;
224 int <a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
225 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
226 int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
227 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
228 int <a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a>(const void* text, size_t length, const <a href='undocumented#SkScalar'>SkScalar</a> xpos[],
229 <a href='undocumented#SkScalar'>SkScalar</a> constY, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
230 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],
231 <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
232 <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const;
233 bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const;
234 bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const;
235 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastBounds'>computeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const;
236 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig,
237 <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const;
238 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage,
239 <a href='#SkPaint_Style'>Style</a> style) const;
240};
241</pre>
242
Cary Clark682c58d2018-05-16 07:07:07 -0400243<a href='#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='#Paint'>Paint</a> collects all
244options outside of the <a href='SkCanvas_Reference#Clip'>Canvas Clip</a> and <a href='SkCanvas_Reference#Matrix'>Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400245
Cary Clark7cfcbca2018-01-04 16:11:51 -0500246Various options apply to text, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -0400247
248Some options may not be implemented on all platforms; in these cases, setting
Cary Clark682c58d2018-05-16 07:07:07 -0400249the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -0400250functionality; for instance, text size is identical to matrix scale.
251
Cary Clark682c58d2018-05-16 07:07:07 -0400252<a href='#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
253pipeline and multiple pipeline stages may be affected by a single <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400254
Cary Clark682c58d2018-05-16 07:07:07 -0400255<a href='#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -0400256algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark682c58d2018-05-16 07:07:07 -0400257<a href='#Paint'>Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -0400258
Cary Clark682c58d2018-05-16 07:07:07 -0400259The objects contained by <a href='#Paint'>Paint</a> are opaque, and cannot be edited outside of the <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400260to affect it. The implementation is free to defer computations associated with the
Cary Clark682c58d2018-05-16 07:07:07 -0400261<a href='#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
Cary Clarkffb3d682018-05-17 12:17:28 -0400262<a href='SkPath_Reference#Path'>Path</a> geometries with <a href='#Anti_Alias'>Anti Aliasing</a>, regardless of how <a href='#SkPaint_kAntiAlias_Flag'>SkPaint::kAntiAlias Flag</a>
Cary Clark682c58d2018-05-16 07:07:07 -0400263is set in <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400264
Cary Clark682c58d2018-05-16 07:07:07 -0400265<a href='#Paint'>Paint</a> describes a single color, a single font, a single image quality, and so on.
Cary Clark12799e12017-07-28 15:18:29 -0400266Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark682c58d2018-05-16 07:07:07 -0400267<a href='undocumented#Shader'>Shader</a> attached to <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400268
Cary Clark682c58d2018-05-16 07:07:07 -0400269## <a name='Initializers'>Initializers</a>
270
271<a name='SkPaint_empty_constructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400272## SkPaint
273
Cary Clark682c58d2018-05-16 07:07:07 -0400274<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
275<a href='#SkPaint'>SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400276</pre>
277
Cary Clark682c58d2018-05-16 07:07:07 -0400278Constructs <a href='#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400279
280| attribute | default value |
281| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -0400282| <a href='#Anti_Alias'>Anti Alias</a> | false |
Cary Clark224c7002018-06-27 11:00:21 -0400283| <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> |
Cary Clark682c58d2018-05-16 07:07:07 -0400284| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
285| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
286| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
287| <a href='#Dither'>Dither</a> | false |
288| <a href='undocumented#Draw_Looper'>Draw Looper</a> | nullptr |
289| <a href='#Fake_Bold'>Fake Bold</a> | false |
290| <a href='undocumented#Filter_Quality'>Filter Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
291| <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> | false |
292| <a href='#Automatic_Hinting'>Automatic Hinting</a> | false |
293| <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> | false |
294| <a href='#SkPaint_Hinting'>Hinting</a> | <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> |
295| <a href='undocumented#Image_Filter'>Image Filter</a> | nullptr |
296| <a href='#LCD_Text'>LCD Text</a> | false |
297| <a href='#Linear_Text'>Linear Text</a> | false |
298| <a href='#Miter_Limit'>Miter Limit</a> | 4 |
299| <a href='undocumented#Mask_Filter'>Mask Filter</a> | nullptr |
300| <a href='undocumented#Path_Effect'>Path Effect</a> | nullptr |
301| <a href='undocumented#Shader'>Shader</a> | nullptr |
302| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill Style</a> |
303| <a href='#Text_Align'>Text Align</a> | <a href='#SkPaint_kLeft_Align'>kLeft Align</a> |
304| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
305| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
306| <a href='#Text_Size'>Text Size</a> | 12 |
307| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
308| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
309| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
310| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
311| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
312| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
313| <a href='#Vertical_Text'>Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400314
315The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500316paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400317build system.
318
319### Return Value
320
Cary Clark682c58d2018-05-16 07:07:07 -0400321default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400322
323### Example
324
325<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
326
327---
328
Cary Clark682c58d2018-05-16 07:07:07 -0400329<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400330## SkPaint
331
Cary Clark682c58d2018-05-16 07:07:07 -0400332<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
333<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400334</pre>
335
Cary Clark682c58d2018-05-16 07:07:07 -0400336Makes a shallow copy of <a href='#Paint'>Paint</a>. <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
337<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> are shared
338between the original <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a> and the copy. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400339their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400340
Cary Clark682c58d2018-05-16 07:07:07 -0400341The referenced objects <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
342<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
343This prevents objects with <a href='undocumented#Reference_Count'>Reference Count</a> from being modified once <a href='#Paint'>Paint</a> refers to them.
Cary Clark12799e12017-07-28 15:18:29 -0400344
345### Parameters
346
Cary Clark682c58d2018-05-16 07:07:07 -0400347<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
348 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400349 </tr>
350</table>
351
352### Return Value
353
Cary Clark682c58d2018-05-16 07:07:07 -0400354shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400355
356### Example
357
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000358<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400359
360#### Example Output
361
362~~~~
363SK_ColorRED == paint1.getColor()
364SK_ColorBLUE == paint2.getColor()
365~~~~
366
367</fiddle-embed></div>
368
369---
370
Cary Clark682c58d2018-05-16 07:07:07 -0400371<a name='SkPaint_move_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400372## SkPaint
373
Cary Clark682c58d2018-05-16 07:07:07 -0400374<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
375<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400376</pre>
377
Cary Clarkd0530ba2017-09-14 11:25:39 -0400378Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -0400379of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400380
Cary Clark682c58d2018-05-16 07:07:07 -0400381After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400382
383### Parameters
384
Cary Clark682c58d2018-05-16 07:07:07 -0400385<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
386 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400387 </tr>
388</table>
389
390### Return Value
391
Cary Clark682c58d2018-05-16 07:07:07 -0400392content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400393
394### Example
395
Cary Clark83647062018-07-18 16:21:51 -0400396<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -0400397
398#### Example Output
399
400~~~~
401path effect unique: true
402~~~~
403
404</fiddle-embed></div>
405
406---
407
Cary Clark682c58d2018-05-16 07:07:07 -0400408<a name='SkPaint_reset'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400409## reset
410
Cary Clark682c58d2018-05-16 07:07:07 -0400411<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
412void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400413</pre>
414
Cary Clark682c58d2018-05-16 07:07:07 -0400415Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
416<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400417
418### Example
419
420<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
421
422#### Example Output
423
424~~~~
425paint1 == paint2
426~~~~
427
428</fiddle-embed></div>
429
430---
431
Cary Clark682c58d2018-05-16 07:07:07 -0400432<a name='SkPaint_destructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400433## ~SkPaint
434
Cary Clark682c58d2018-05-16 07:07:07 -0400435<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
436<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400437</pre>
438
Cary Clark682c58d2018-05-16 07:07:07 -0400439Decreases <a href='#Paint'>Paint</a> <a href='undocumented#Reference_Count'>Reference Count</a> of owned objects: <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
440<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a>. If the
441objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400442
443---
444
Cary Clark682c58d2018-05-16 07:07:07 -0400445## <a name='Management'>Management</a>
Cary Clark12799e12017-07-28 15:18:29 -0400446
Cary Clark682c58d2018-05-16 07:07:07 -0400447<a name='SkPaint_copy_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400448## operator=
449
Cary Clark682c58d2018-05-16 07:07:07 -0400450<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
451<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400452</pre>
453
Cary Clark682c58d2018-05-16 07:07:07 -0400454Makes a shallow copy of <a href='#Paint'>Paint</a>. <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
455<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> are shared
456between the original <a href='#SkPaint_copy_operator_paint'>paint</a> and the copy. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the
Cary Clark12799e12017-07-28 15:18:29 -0400457prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -0400458resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
459are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400460
461### Parameters
462
Cary Clark682c58d2018-05-16 07:07:07 -0400463<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
464 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400465 </tr>
466</table>
467
468### Return Value
469
Cary Clark682c58d2018-05-16 07:07:07 -0400470content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400471
472### Example
473
474<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
475
476#### Example Output
477
478~~~~
479SK_ColorRED == paint1.getColor()
480SK_ColorRED == paint2.getColor()
481~~~~
482
483</fiddle-embed></div>
484
485---
486
Cary Clark682c58d2018-05-16 07:07:07 -0400487<a name='SkPaint_move_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400488## operator=
489
Cary Clark682c58d2018-05-16 07:07:07 -0400490<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
491<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400492</pre>
493
Cary Clark682c58d2018-05-16 07:07:07 -0400494Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
495of objects referenced by the <a href='#SkPaint_move_operator_paint'>paint</a> parameter. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -0400496prior destination are decreased by one; those objects are deleted if the resulting count
497is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400498
Cary Clark682c58d2018-05-16 07:07:07 -0400499After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400500
501### Parameters
502
Cary Clark682c58d2018-05-16 07:07:07 -0400503<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
504 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400505 </tr>
506</table>
507
508### Return Value
509
Cary Clark682c58d2018-05-16 07:07:07 -0400510content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400511
512### Example
513
Ravi Mistry874e22b2018-07-19 03:49:13 +0000514<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -0400515
516#### Example Output
517
518~~~~
519SK_ColorRED == paint2.getColor()
520~~~~
521
522</fiddle-embed></div>
523
524---
525
Cary Clark682c58d2018-05-16 07:07:07 -0400526<a name='SkPaint_equal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400527## operator==
528
Cary Clark682c58d2018-05-16 07:07:07 -0400529<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
530bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400531</pre>
532
Cary Clark682c58d2018-05-16 07:07:07 -0400533Compares <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
534if <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
535<a href='undocumented#Draw_Looper'>Draw Looper</a>, or <a href='undocumented#Image_Filter'>Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400536
537### Parameters
538
Cary Clark682c58d2018-05-16 07:07:07 -0400539<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
540 <td><a href='#Paint'>Paint</a> to compare</td>
541 </tr>
542 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
543 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400544 </tr>
545</table>
546
547### Return Value
548
Cary Clark682c58d2018-05-16 07:07:07 -0400549true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400550
551### Example
552
553<div><fiddle-embed name="7481a948e34672720337a631830586dd">
554
555#### Example Output
556
557~~~~
558paint1 == paint2
559paint1 != paint2
560~~~~
561
562</fiddle-embed></div>
563
Cary Clark06c20f32018-03-20 15:53:27 -0400564### See Also
565
Cary Clark682c58d2018-05-16 07:07:07 -0400566<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400567
Cary Clark12799e12017-07-28 15:18:29 -0400568---
569
Cary Clark682c58d2018-05-16 07:07:07 -0400570<a name='SkPaint_notequal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400571## operator!=
572
Cary Clark682c58d2018-05-16 07:07:07 -0400573<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
574bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400575</pre>
576
Cary Clark682c58d2018-05-16 07:07:07 -0400577Compares <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
578if <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
579<a href='undocumented#Draw_Looper'>Draw Looper</a>, or <a href='undocumented#Image_Filter'>Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400580
581### Parameters
582
Cary Clark682c58d2018-05-16 07:07:07 -0400583<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
584 <td><a href='#Paint'>Paint</a> to compare</td>
585 </tr>
586 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
587 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400588 </tr>
589</table>
590
591### Return Value
592
Cary Clark682c58d2018-05-16 07:07:07 -0400593true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400594
595### Example
596
skia-bookmakera717ca92018-07-08 05:32:09 +0000597<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -0400598
599#### Example Output
600
601~~~~
602paint1 == paint2
603paint1 == paint2
604~~~~
605
606</fiddle-embed></div>
607
Cary Clark06c20f32018-03-20 15:53:27 -0400608### See Also
609
Cary Clark682c58d2018-05-16 07:07:07 -0400610<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400611
Cary Clark12799e12017-07-28 15:18:29 -0400612---
613
Cary Clark682c58d2018-05-16 07:07:07 -0400614<a name='SkPaint_getHash'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400615## getHash
616
Cary Clark682c58d2018-05-16 07:07:07 -0400617<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
618uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400619</pre>
620
Cary Clark682c58d2018-05-16 07:07:07 -0400621Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400622Identical hashes guarantee that the paints are
623equivalent, but differing hashes do not guarantee that the paints have differing
624contents.
625
Cary Clark682c58d2018-05-16 07:07:07 -0400626If <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a> returns true for two paints,
Cary Clark12799e12017-07-28 15:18:29 -0400627their hashes are also equal.
628
629The hash returned is platform and implementation specific.
630
631### Return Value
632
633a shallow hash
634
635### Example
636
Cary Clark83647062018-07-18 16:21:51 -0400637<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -0400638
639#### Example Output
640
641~~~~
642paint1 == paint2
643paint1.getHash() == paint2.getHash()
644~~~~
645
646</fiddle-embed></div>
647
648---
649
Cary Clark682c58d2018-05-16 07:07:07 -0400650## <a name='Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -0400651
Cary Clark682c58d2018-05-16 07:07:07 -0400652## <a name='SkPaint_Hinting'>Enum SkPaint::Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -0400653
Cary Clarka560c472017-11-27 10:44:06 -0500654<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400655 enum <a href='#SkPaint_Hinting'>Hinting</a> {
Cary Clark61313f32018-10-08 14:57:48 -0400656 <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a> = 0,
657 <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a> = 1,
658 <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a> = 2,
659 <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -0400660 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500661</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400662
Cary Clark682c58d2018-05-16 07:07:07 -0400663<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
664look at a given point size on font engines that support it. <a href='#SkPaint_Hinting'>Hinting</a> may have a
Cary Clark12799e12017-07-28 15:18:29 -0400665muted effect or no effect at all depending on the platform.
666
Cary Clark7cfcbca2018-01-04 16:11:51 -0500667The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -0400668as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400669
670### Constants
671
Cary Clark682c58d2018-05-16 07:07:07 -0400672<table style='border-collapse: collapse; width: 62.5em'>
673 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
674<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
675<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
676 <tr style='background-color: #f0f0f0; '>
677 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
678 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
680Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500681With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
682bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400683outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -0500684to 26.6 fractional pixels.
685</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_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
689 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
690 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
691Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500692With FreeType, this is equivalent in spirit to the
693FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400694lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -0400695Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -0500696</td>
Cary Clark12799e12017-07-28 15:18:29 -0400697 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400698 <tr style='background-color: #f0f0f0; '>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
700 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
701 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
702Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500703With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
704choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -0500705gray-level rendering.
706</td>
Cary Clark12799e12017-07-28 15:18:29 -0400707 </tr>
708 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400709 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
710 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
711 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -0400712Modifies glyph outlines for maximum constrast. With FreeType, this selects
Cary Clark682c58d2018-05-16 07:07:07 -0400713FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is set.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500714FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
715horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -0500716variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
717</td>
Cary Clark12799e12017-07-28 15:18:29 -0400718 </tr>
719</table>
720
Cary Clark682c58d2018-05-16 07:07:07 -0400721On <a href='undocumented#OS_X'>OS X</a> and iOS, hinting controls whether <a href='undocumented#Core_Graphics'>Core Graphics</a> dilates the font outlines
Cary Clark137b8742018-05-30 09:21:49 -0400722to account for LCD text. No hinting uses <a href='undocumented#Core_Text'>Core Text</a> <a href='undocumented#Grayscale'>Grayscale</a> output.
Cary Clark682c58d2018-05-16 07:07:07 -0400723Normal hinting uses <a href='undocumented#Core_Text'>Core Text</a> LCD output. If <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is clear,
Cary Clark137b8742018-05-30 09:21:49 -0400724the LCD output is reduced to a single <a href='undocumented#Grayscale'>Grayscale</a> channel.
Cary Clark12799e12017-07-28 15:18:29 -0400725
Cary Clark682c58d2018-05-16 07:07:07 -0400726On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400727
Cary Clark682c58d2018-05-16 07:07:07 -0400728<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
729Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400730
Cary Clark682c58d2018-05-16 07:07:07 -0400731<a name='SkPaint_getHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400732## getHinting
733
Cary Clark682c58d2018-05-16 07:07:07 -0400734<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
735<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400736</pre>
737
738Returns level of glyph outline adjustment.
739
740### Return Value
741
Cary Clark682c58d2018-05-16 07:07:07 -0400742one of: <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -0400743
744### Example
745
Cary Clark83647062018-07-18 16:21:51 -0400746<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
Cary Clark12799e12017-07-28 15:18:29 -0400747
748#### Example Output
749
750~~~~
751SkPaint::kNormal_Hinting == paint.getHinting()
752~~~~
753
754</fiddle-embed></div>
755
756---
757
Cary Clark682c58d2018-05-16 07:07:07 -0400758<a name='SkPaint_setHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400759## setHinting
760
Cary Clark682c58d2018-05-16 07:07:07 -0400761<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
762void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400763</pre>
764
765Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400766Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400767
Cary Clark682c58d2018-05-16 07:07:07 -0400768| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400769| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -0400770| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
771| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
772| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
773| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400774
775### Parameters
776
Cary Clark682c58d2018-05-16 07:07:07 -0400777<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
778 <td>one of: <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400779 </tr>
780</table>
781
782### Example
783
784<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
785
786#### Example Output
787
788~~~~
789paint1 == paint2
790~~~~
791
792</fiddle-embed></div>
793
794---
795
Cary Clark682c58d2018-05-16 07:07:07 -0400796## <a name='Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400797
Cary Clark682c58d2018-05-16 07:07:07 -0400798## <a name='SkPaint_Flags'>Enum SkPaint::Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400799
Cary Clarka560c472017-11-27 10:44:06 -0500800<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400801 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clark61313f32018-10-08 14:57:48 -0400802 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
803 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
804 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
805 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
806 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
807 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
808 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
809 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
810 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText_Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -0400811
Cary Clark682c58d2018-05-16 07:07:07 -0400812 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400813 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500814
Cary Clark12799e12017-07-28 15:18:29 -0400815</pre>
816
Cary Clark682c58d2018-05-16 07:07:07 -0400817The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
818The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
819with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
820All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400821multiple settings at once.
822
823### Constants
824
Cary Clark682c58d2018-05-16 07:07:07 -0400825<table style='border-collapse: collapse; width: 62.5em'>
826 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
827<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
828<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
829 <tr style='background-color: #f0f0f0; '>
830 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
831 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
832 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400833mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400834 </tr>
835 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400836 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
837 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
838 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
839mask for setting Dither</td>
840 </tr>
841 <tr style='background-color: #f0f0f0; '>
842 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
843 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
844 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
845mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -0400846 </tr>
847 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400848 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
849 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
850 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
851mask for setting Linear_Text</td>
852 </tr>
853 <tr style='background-color: #f0f0f0; '>
854 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
855 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
856 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
857mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400858 </tr>
859 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400860 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
861 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
862 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
863mask for setting LCD_Text</td>
864 </tr>
865 <tr style='background-color: #f0f0f0; '>
866 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
867 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
868 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
869mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400870 </tr>
871 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400872 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
873 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
874 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
875mask for setting Automatic_Hinting</td>
876 </tr>
877 <tr style='background-color: #f0f0f0; '>
878 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kVerticalText_Flag'><code>SkPaint::kVerticalText_Flag</code></a></td>
879 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x1000</td>
880 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
881mask for setting Vertical_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400882 </tr>
883 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400884 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
885 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
886 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
887mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use</td>
Cary Clark12799e12017-07-28 15:18:29 -0400888 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400889<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
890</table>
Cary Clark12799e12017-07-28 15:18:29 -0400891
Cary Clark682c58d2018-05-16 07:07:07 -0400892## <a name='SkPaint_ReserveFlags'>Enum SkPaint::ReserveFlags</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400893
Cary Clarke8161dd2018-09-06 12:47:04 -0400894To be deprecated soon.
Cary Clark12799e12017-07-28 15:18:29 -0400895
Cary Clarke8161dd2018-09-06 12:47:04 -0400896Only valid for Android framework.
Cary Clark4855f782018-02-06 09:41:53 -0500897
Cary Clarka560c472017-11-27 10:44:06 -0500898<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400899 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -0400900 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText_ReserveFlag</a> = 0x08,
901 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText_ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -0400902 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500903</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400904
905### Constants
906
Cary Clark682c58d2018-05-16 07:07:07 -0400907<table style='border-collapse: collapse; width: 62.5em'>
908 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
909<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
910<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
911 <tr style='background-color: #f0f0f0; '>
912 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
913 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
914 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400915To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400916
Cary Clarke8161dd2018-09-06 12:47:04 -0400917</td>
Cary Clark12799e12017-07-28 15:18:29 -0400918 </tr>
919 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400920 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
921 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
922 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400923To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400924
Cary Clarke8161dd2018-09-06 12:47:04 -0400925</td>
Cary Clark12799e12017-07-28 15:18:29 -0400926 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400927</table>
Cary Clark4855f782018-02-06 09:41:53 -0500928
Cary Clark682c58d2018-05-16 07:07:07 -0400929<a name='SkPaint_getFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400930## getFlags
931
Cary Clark682c58d2018-05-16 07:07:07 -0400932<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
933uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400934</pre>
935
Cary Clark682c58d2018-05-16 07:07:07 -0400936Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
937bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400938
939### Return Value
940
Cary Clark682c58d2018-05-16 07:07:07 -0400941zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400942
943### Example
944
945<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
946
947#### Example Output
948
949~~~~
950(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
951~~~~
952
953</fiddle-embed></div>
954
955---
956
Cary Clark682c58d2018-05-16 07:07:07 -0400957<a name='SkPaint_setFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400958## setFlags
959
Cary Clark682c58d2018-05-16 07:07:07 -0400960<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
961void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400962</pre>
963
Cary Clark682c58d2018-05-16 07:07:07 -0400964Replaces <a href='#SkPaint_Flags'>Flags</a> with <a href='#SkPaint_setFlags_flags'>flags</a>, the union of the <a href='#SkPaint_Flags'>Flags</a> members.
965All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400966
967### Parameters
968
Cary Clark682c58d2018-05-16 07:07:07 -0400969<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
970 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400971 </tr>
972</table>
973
974### Example
975
976<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
977
978#### Example Output
979
980~~~~
981paint.isAntiAlias()
982paint.isDither()
983~~~~
984
985</fiddle-embed></div>
986
987---
988
Cary Clarkffb3d682018-05-17 12:17:28 -0400989## <a name='Anti_Alias'>Anti Alias</a>
Cary Clark08895c42018-02-01 09:37:32 -0500990
Cary Clarkffb3d682018-05-17 12:17:28 -0400991<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -0400992If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
993If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is set, pixels are drawn with <a href='SkColor_Reference#Alpha'>Color Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400994
Cary Clark682c58d2018-05-16 07:07:07 -0400995The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400996passing through the pixel center may, but is not required to, draw the pixel.
997
Cary Clark682c58d2018-05-16 07:07:07 -0400998<a href='undocumented#Raster_Engine'>Raster Engine</a> draws <a href='undocumented#Alias'>Aliased</a> pixels whose centers are on or to the right of the start of an
999active <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 -04001000
Cary Clarkffb3d682018-05-17 12:17:28 -04001001A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
1002<a href='undocumented#Supersampling'>Supersampling</a> to <a href='#Anti_Alias'>Anti Alias</a> all drawing, and have no mechanism to selectively
Cary Clark682c58d2018-05-16 07:07:07 -04001003<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001004
Cary Clarkffb3d682018-05-17 12:17:28 -04001005The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -04001006
Cary Clarkffb3d682018-05-17 12:17:28 -04001007<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
1008<a href='#Anti_Alias'>Anti Alias</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -04001009at compile time.
1010
1011### Example
1012
1013<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
1014A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -04001015The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
1016<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -05001017</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001018
Cary Clark682c58d2018-05-16 07:07:07 -04001019<a name='SkPaint_isAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001020## isAntiAlias
1021
Cary Clark682c58d2018-05-16 07:07:07 -04001022<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1023bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001024</pre>
1025
Cary Clark80247e52018-07-11 16:18:41 -04001026Returns true if pixels on the active edges of <a href='SkPath_Reference#Path'>Path</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -04001027
Cary Clark682c58d2018-05-16 07:07:07 -04001028Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001029
1030### Return Value
1031
Cary Clark682c58d2018-05-16 07:07:07 -04001032<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001033
1034### Example
1035
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001036<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -04001037
1038#### Example Output
1039
1040~~~~
1041paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1042paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1043~~~~
1044
1045</fiddle-embed></div>
1046
1047---
1048
Cary Clark682c58d2018-05-16 07:07:07 -04001049<a name='SkPaint_setAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001050## setAntiAlias
1051
Cary Clark682c58d2018-05-16 07:07:07 -04001052<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1053void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001054</pre>
1055
Cary Clark682c58d2018-05-16 07:07:07 -04001056Requests, but does not require, that <a href='SkPath_Reference#Path'>Path</a> edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -04001057partial transparency.
1058
Cary Clark682c58d2018-05-16 07:07:07 -04001059Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1060Clears <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 -04001061
1062### Parameters
1063
Cary Clark682c58d2018-05-16 07:07:07 -04001064<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1065 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001066 </tr>
1067</table>
1068
1069### Example
1070
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001071<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -04001072
1073#### Example Output
1074
1075~~~~
1076paint1 == paint2
1077~~~~
1078
1079</fiddle-embed></div>
1080
1081---
1082
Cary Clark682c58d2018-05-16 07:07:07 -04001083## <a name='Dither'>Dither</a>
Cary Clark08895c42018-02-01 09:37:32 -05001084
Cary Clark682c58d2018-05-16 07:07:07 -04001085<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001086This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001087Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1088and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1089and 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 -04001090
1091Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001092<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>.
1093<a href='#Dither'>Dither</a> cannot be enabled for <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and
1094<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 -04001095
Cary Clark682c58d2018-05-16 07:07:07 -04001096<a href='#Dither'>Dither</a> is disabled by default.
1097<a href='#Dither'>Dither</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -04001098at compile time.
1099
Cary Clark2be81cf2018-09-13 12:04:30 -04001100Some platform implementations may ignore dithering. Set <code>SK_IGNORE_GPU_DITHER</code>to ignore <a href='#Dither'>Dither</a> on <a href='undocumented#GPU_Surface'>GPU Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001101
1102### Example
1103
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001104<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
Cary Clark1a8d7622018-03-05 13:26:16 -05001105alternating nearby colors from pixel to pixel.
1106</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001107
1108### Example
1109
Cary Clarka619d452018-07-16 08:12:01 -04001110<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark224c7002018-06-27 11:00:21 -04001111Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001112dither, making it easier to see.
1113</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001114
Cary Clark682c58d2018-05-16 07:07:07 -04001115<a name='SkPaint_isDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001116## isDither
1117
Cary Clark682c58d2018-05-16 07:07:07 -04001118<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1119bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001120</pre>
1121
Cary Clark80247e52018-07-11 16:18:41 -04001122Returns true if color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001123
Cary Clark682c58d2018-05-16 07:07:07 -04001124Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001125
1126### Return Value
1127
Cary Clark682c58d2018-05-16 07:07:07 -04001128<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001129
1130### Example
1131
1132<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1133
1134#### Example Output
1135
1136~~~~
1137paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1138paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1139~~~~
1140
1141</fiddle-embed></div>
1142
1143---
1144
Cary Clark682c58d2018-05-16 07:07:07 -04001145<a name='SkPaint_setDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001146## setDither
1147
Cary Clark682c58d2018-05-16 07:07:07 -04001148<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1149void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001150</pre>
1151
1152Requests, but does not require, to distribute color error.
1153
Cary Clark682c58d2018-05-16 07:07:07 -04001154Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1155Clears <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 -04001156
1157### Parameters
1158
Cary Clark682c58d2018-05-16 07:07:07 -04001159<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1160 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001161 </tr>
1162</table>
1163
1164### Example
1165
1166<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1167
1168#### Example Output
1169
1170~~~~
1171paint1 == paint2
1172~~~~
1173
1174</fiddle-embed></div>
1175
1176### See Also
1177
Cary Clark682c58d2018-05-16 07:07:07 -04001178<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001179
1180---
1181
1182### See Also
1183
Cary Clarkffb3d682018-05-17 12:17:28 -04001184Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001185
Cary Clark682c58d2018-05-16 07:07:07 -04001186## <a name='Device_Text'>Device Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05001187
Cary Clark682c58d2018-05-16 07:07:07 -04001188<a href='#LCD_Text'>LCD Text</a> and <a href='#Subpixel_Text'>Subpixel Text</a> increase the precision of glyph position.
Cary Clark12799e12017-07-28 15:18:29 -04001189
Cary Clarkffb3d682018-05-17 12:17:28 -04001190When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> takes advantage of the organization of RGB stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001191create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001192on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001193<a href='#LCD_Text'>LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clarkffb3d682018-05-17 12:17:28 -04001194the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001195
Cary Clark682c58d2018-05-16 07:07:07 -04001196<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001197As the opaqueness
1198of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1199
1200Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001201<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1202<a href='#LCD_Text'>LCD Text</a> or <a href='#Subpixel_Text'>Subpixel Text</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
1203<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 -04001204
1205### Example
1206
Cary Clark682c58d2018-05-16 07:07:07 -04001207<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href='#LCD_Text'>LCD Text</a> and <a href='#Subpixel_Text'>Subpixel Text</a>.
1208When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1209When <a href='#Subpixel_Text'>Subpixel Text</a> is enabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are unique, but appear evenly spaced.
Cary Clark1a8d7622018-03-05 13:26:16 -05001210</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001211
Cary Clark682c58d2018-05-16 07:07:07 -04001212## <a name='Linear_Text'>Linear Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001213
Cary Clark682c58d2018-05-16 07:07:07 -04001214<a href='#Linear_Text'>Linear Text</a> selects whether text is rendered as a <a href='undocumented#Glyph'>Glyph</a> or as a <a href='SkPath_Reference#Path'>Path</a>.
1215If <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is set, it has the same effect as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1216If <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear, it is the same as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001217
Cary Clark682c58d2018-05-16 07:07:07 -04001218<a name='SkPaint_isLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001219## isLinearText
1220
Cary Clark682c58d2018-05-16 07:07:07 -04001221<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1222bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001223</pre>
1224
Cary Clark80247e52018-07-11 16:18:41 -04001225Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001226
Cary Clark682c58d2018-05-16 07:07:07 -04001227Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001228
1229### Return Value
1230
Cary Clark682c58d2018-05-16 07:07:07 -04001231<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001232
1233### Example
1234
1235<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1236
1237### See Also
1238
Cary Clark682c58d2018-05-16 07:07:07 -04001239<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001240
1241---
1242
Cary Clark682c58d2018-05-16 07:07:07 -04001243<a name='SkPaint_setLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001244## setLinearText
1245
Cary Clark682c58d2018-05-16 07:07:07 -04001246<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1247void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001248</pre>
1249
Cary Clark80247e52018-07-11 16:18:41 -04001250Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark682c58d2018-05-16 07:07:07 -04001251By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001252
Cary Clark682c58d2018-05-16 07:07:07 -04001253Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1254Clears <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 -04001255
1256### Parameters
1257
Cary Clark682c58d2018-05-16 07:07:07 -04001258<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1259 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001260 </tr>
1261</table>
1262
1263### Example
1264
Cary Clark83647062018-07-18 16:21:51 -04001265<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001266
1267### See Also
1268
Cary Clark682c58d2018-05-16 07:07:07 -04001269<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001270
1271---
1272
Cary Clark682c58d2018-05-16 07:07:07 -04001273## <a name='Subpixel_Text'>Subpixel Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001274
Cary Clark682c58d2018-05-16 07:07:07 -04001275<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001276As the opaqueness
1277of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1278
Cary Clark682c58d2018-05-16 07:07:07 -04001279<a name='SkPaint_isSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001280## isSubpixelText
1281
Cary Clark682c58d2018-05-16 07:07:07 -04001282<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1283bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001284</pre>
1285
Cary Clark80247e52018-07-11 16:18:41 -04001286Returns true if <a href='undocumented#Glyph'>Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001287
Cary Clark682c58d2018-05-16 07:07:07 -04001288Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001289
1290### Return Value
1291
Cary Clark682c58d2018-05-16 07:07:07 -04001292<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001293
1294### Example
1295
1296<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1297
1298#### Example Output
1299
1300~~~~
1301paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1302paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1303~~~~
1304
1305</fiddle-embed></div>
1306
1307---
1308
Cary Clark682c58d2018-05-16 07:07:07 -04001309<a name='SkPaint_setSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001310## setSubpixelText
1311
Cary Clark682c58d2018-05-16 07:07:07 -04001312<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1313void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001314</pre>
1315
Cary Clark682c58d2018-05-16 07:07:07 -04001316Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001317
Cary Clark682c58d2018-05-16 07:07:07 -04001318Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1319Clears <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 -04001320
1321### Parameters
1322
Cary Clark682c58d2018-05-16 07:07:07 -04001323<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1324 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001325 </tr>
1326</table>
1327
1328### Example
1329
1330<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1331
1332#### Example Output
1333
1334~~~~
1335paint1 == paint2
1336~~~~
1337
1338</fiddle-embed></div>
1339
1340---
1341
Cary Clark682c58d2018-05-16 07:07:07 -04001342## <a name='LCD_Text'>LCD Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001343
Cary Clarkffb3d682018-05-17 12:17:28 -04001344When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> takes advantage of the organization of RGB stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001345create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001346on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001347<a href='#LCD_Text'>LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clarkffb3d682018-05-17 12:17:28 -04001348the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001349
Cary Clark682c58d2018-05-16 07:07:07 -04001350<a name='SkPaint_isLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001351## isLCDRenderText
1352
Cary Clark682c58d2018-05-16 07:07:07 -04001353<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1354bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001355</pre>
1356
Cary Clark80247e52018-07-11 16:18:41 -04001357Returns true if <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001358
Cary Clark682c58d2018-05-16 07:07:07 -04001359Returns true if <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is set.
Cary Clark12799e12017-07-28 15:18:29 -04001360
1361### Return Value
1362
Cary Clark682c58d2018-05-16 07:07:07 -04001363<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001364
1365### Example
1366
skia-bookmakera391c722018-07-09 05:28:19 +00001367<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001368
1369#### Example Output
1370
1371~~~~
1372paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1373paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1374~~~~
1375
1376</fiddle-embed></div>
1377
1378---
1379
Cary Clark682c58d2018-05-16 07:07:07 -04001380<a name='SkPaint_setLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001381## setLCDRenderText
1382
Cary Clark682c58d2018-05-16 07:07:07 -04001383<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1384void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001385</pre>
1386
Cary Clark682c58d2018-05-16 07:07:07 -04001387Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001388
Cary Clark682c58d2018-05-16 07:07:07 -04001389Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1390Clears <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 -04001391
1392### Parameters
1393
Cary Clark682c58d2018-05-16 07:07:07 -04001394<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
1395 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001396 </tr>
1397</table>
1398
1399### Example
1400
skia-bookmakere0a458f2018-07-16 05:29:00 +00001401<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001402
1403#### Example Output
1404
1405~~~~
1406paint1 == paint2
1407~~~~
1408
1409</fiddle-embed></div>
1410
1411---
1412
Cary Clark682c58d2018-05-16 07:07:07 -04001413## <a name='Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a>
Cary Clark08895c42018-02-01 09:37:32 -05001414
Cary Clark682c58d2018-05-16 07:07:07 -04001415<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
1416<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> when set chooses an embedded bitmap glyph over an outline contained
Cary Clark7cfcbca2018-01-04 16:11:51 -05001417in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001418
Cary Clark682c58d2018-05-16 07:07:07 -04001419FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
1420the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001421Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04001422<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001423
Cary Clark682c58d2018-05-16 07:07:07 -04001424<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
1425<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
1426<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001427
1428### Example
1429
Cary Clarka560c472017-11-27 10:44:06 -05001430<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001431<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001432 includes an embedded bitmap Glyph at odd font sizes. This example works
1433 on platforms that use FreeType as their Font_Engine.
1434 Windows may, but is not required to, return a bitmap glyph if
1435 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1436 bitmap.allocN32Pixels(30, 15);
1437 bitmap.eraseColor(0);
1438 SkCanvas offscreen(bitmap);
1439 SkPaint paint;
1440 paint.setAntiAlias(true);
1441 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001442 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001443 for (bool embedded : { false, true}) {
1444 paint.setEmbeddedBitmapText(embedded);
1445 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1446 }
1447 canvas->drawBitmap(bitmap, 0, 0);
1448 canvas->scale(10, 10);
1449 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001450
Cary Clarka560c472017-11-27 10:44:06 -05001451</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001452
Cary Clark682c58d2018-05-16 07:07:07 -04001453<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001454## isEmbeddedBitmapText
1455
Cary Clark682c58d2018-05-16 07:07:07 -04001456<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1457bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001458</pre>
1459
Cary Clark80247e52018-07-11 16:18:41 -04001460Returns true if <a href='undocumented#Engine'>Font Engine</a> may return <a href='undocumented#Glyph'>Glyphs</a> from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001461
Cary Clark682c58d2018-05-16 07:07:07 -04001462Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001463
1464### Return Value
1465
Cary Clark682c58d2018-05-16 07:07:07 -04001466<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001467
1468### Example
1469
1470<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1471
1472#### Example Output
1473
1474~~~~
1475paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1476paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1477~~~~
1478
1479</fiddle-embed></div>
1480
1481---
1482
Cary Clark682c58d2018-05-16 07:07:07 -04001483<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001484## setEmbeddedBitmapText
1485
Cary Clark682c58d2018-05-16 07:07:07 -04001486<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1487void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001488</pre>
1489
1490Requests, but does not require, to use bitmaps in fonts instead of outlines.
1491
Cary Clark682c58d2018-05-16 07:07:07 -04001492Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1493Clears <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 -04001494
1495### Parameters
1496
Cary Clark682c58d2018-05-16 07:07:07 -04001497<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
1498 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001499 </tr>
1500</table>
1501
1502### Example
1503
1504<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1505
1506#### Example Output
1507
1508~~~~
1509paint1 == paint2
1510~~~~
1511
1512</fiddle-embed></div>
1513
1514---
1515
Cary Clark682c58d2018-05-16 07:07:07 -04001516## <a name='Automatic_Hinting'>Automatic Hinting</a>
Cary Clark08895c42018-02-01 09:37:32 -05001517
Cary Clark682c58d2018-05-16 07:07:07 -04001518If <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, <a href='#Automatic_Hinting'>Automatic Hinting</a>
1519instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
1520<a href='#Automatic_Hinting'>Automatic Hinting</a> has no effect if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> or
1521<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001522
Cary Clark682c58d2018-05-16 07:07:07 -04001523<a href='#Automatic_Hinting'>Automatic Hinting</a> only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001524
Cary Clark682c58d2018-05-16 07:07:07 -04001525<a name='SkPaint_isAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001526## isAutohinted
1527
Cary Clark682c58d2018-05-16 07:07:07 -04001528<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1529bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001530</pre>
1531
Cary Clark80247e52018-07-11 16:18:41 -04001532Returns true if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, and if
1533platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>. If true, instructs
1534the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001535
Cary Clark682c58d2018-05-16 07:07:07 -04001536Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001537
1538### Return Value
1539
Cary Clark682c58d2018-05-16 07:07:07 -04001540<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001541
1542### Example
1543
1544<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1545
1546#### Example Output
1547
1548~~~~
1549paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1550paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1551~~~~
1552
1553</fiddle-embed></div>
1554
1555### See Also
1556
Cary Clark682c58d2018-05-16 07:07:07 -04001557<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001558
1559---
1560
Cary Clark682c58d2018-05-16 07:07:07 -04001561<a name='SkPaint_setAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001562## setAutohinted
1563
Cary Clark682c58d2018-05-16 07:07:07 -04001564<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1565void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001566</pre>
1567
Cary Clark80247e52018-07-11 16:18:41 -04001568Sets whether to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001569If <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> and <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is set,
Cary Clark80247e52018-07-11 16:18:41 -04001570instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001571<a href='#Automatic_Hinting'>Automatic Hinting</a> has no effect if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> or
1572<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001573
Cary Clark682c58d2018-05-16 07:07:07 -04001574Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001575
Cary Clark682c58d2018-05-16 07:07:07 -04001576Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1577Clears <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 -04001578
1579### Parameters
1580
Cary Clark682c58d2018-05-16 07:07:07 -04001581<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
1582 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001583 </tr>
1584</table>
1585
1586### Example
1587
1588<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1589
1590### See Also
1591
Cary Clark682c58d2018-05-16 07:07:07 -04001592<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001593
1594---
1595
Cary Clark682c58d2018-05-16 07:07:07 -04001596## <a name='Vertical_Text'>Vertical Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05001597
Cary Clark682c58d2018-05-16 07:07:07 -04001598<a href='undocumented#Text'>Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
1599using <a href='undocumented#Advance'>Font Advance</a> to position subsequent <a href='undocumented#Glyph'>Glyphs</a>. By default, each successive glyph
1600is positioned to the right of the preceding glyph. <a href='#Vertical_Text'>Vertical Text</a> sets successive
1601<a href='undocumented#Glyph'>Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001602
Cary Clark682c58d2018-05-16 07:07:07 -04001603Skia can translate text character codes as a series of <a href='undocumented#Glyph'>Glyphs</a>, but does not implement
Cary Clark7cfcbca2018-01-04 16:11:51 -05001604font substitution,
Cary Clark137b8742018-05-30 09:21:49 -04001605textual substitution, line layout, or contextual spacing like <a href='undocumented#Kerning'>Kerning</a> pairs. Use
Cary Clark682c58d2018-05-16 07:07:07 -04001606a text shaping engine like <a href='https://harfbuzz.org/'>HarfBuzz</a></a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001607into glyph series.
1608
Cary Clark682c58d2018-05-16 07:07:07 -04001609<a href='#Vertical_Text'>Vertical Text</a> is clear if text is drawn left to right or set if drawn from top to bottom.
Cary Clark12799e12017-07-28 15:18:29 -04001610
Cary Clark682c58d2018-05-16 07:07:07 -04001611<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if clear draws text left to right.
1612<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if set draws text top to bottom.
Cary Clark12799e12017-07-28 15:18:29 -04001613
Cary Clark682c58d2018-05-16 07:07:07 -04001614<a href='#Vertical_Text'>Vertical Text</a> is clear by default.
1615<a href='#Vertical_Text'>Vertical Text</a> can be set by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
1616<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001617
1618### Example
1619
1620<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1621
Cary Clark682c58d2018-05-16 07:07:07 -04001622<a name='SkPaint_isVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001623## isVerticalText
1624
Cary Clark682c58d2018-05-16 07:07:07 -04001625<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1626bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001627</pre>
1628
Cary Clark80247e52018-07-11 16:18:41 -04001629Returns true if <a href='undocumented#Glyph'>Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001630
Cary Clark682c58d2018-05-16 07:07:07 -04001631Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001632
1633### Return Value
1634
Cary Clark682c58d2018-05-16 07:07:07 -04001635<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001636
1637### Example
1638
1639<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1640
1641#### Example Output
1642
1643~~~~
1644paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1645paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1646~~~~
1647
1648</fiddle-embed></div>
1649
1650---
1651
Cary Clark682c58d2018-05-16 07:07:07 -04001652<a name='SkPaint_setVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001653## setVerticalText
1654
Cary Clark682c58d2018-05-16 07:07:07 -04001655<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1656void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText)
Cary Clark12799e12017-07-28 15:18:29 -04001657</pre>
1658
Cary Clark80247e52018-07-11 16:18:41 -04001659Returns true if text advance positions the next glyph below the previous glyph instead of to the
Cary Clark12799e12017-07-28 15:18:29 -04001660right of previous glyph.
1661
Cary Clark682c58d2018-05-16 07:07:07 -04001662Sets <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is true.
1663Clears <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001664
1665### Parameters
1666
Cary Clark682c58d2018-05-16 07:07:07 -04001667<table> <tr> <td><a name='SkPaint_setVerticalText_verticalText'><code><strong>verticalText</strong></code></a></td>
1668 <td>setting for <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001669 </tr>
1670</table>
1671
1672### Example
1673
1674<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1675
1676#### Example Output
1677
1678~~~~
1679paint1 == paint2
1680~~~~
1681
1682</fiddle-embed></div>
1683
1684---
1685
Cary Clark682c58d2018-05-16 07:07:07 -04001686## <a name='Fake_Bold'>Fake Bold</a>
Cary Clark08895c42018-02-01 09:37:32 -05001687
Cary Clark682c58d2018-05-16 07:07:07 -04001688<a href='#Fake_Bold'>Fake Bold</a> approximates the bold font style accompanying a normal font when a bold font face
Cary Clark7cfcbca2018-01-04 16:11:51 -05001689is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04001690bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001691
Cary Clark682c58d2018-05-16 07:07:07 -04001692Use <a href='#Text_Skew_X'>Text Skew X</a> to approximate an italic font style when the italic font face
Cary Clark12799e12017-07-28 15:18:29 -04001693is not available.
1694
Cary Clark7cfcbca2018-01-04 16:11:51 -05001695A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04001696the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
1697by increasing the stroke width and setting the <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a> as needed.
Cary Clark12799e12017-07-28 15:18:29 -04001698
Cary Clark682c58d2018-05-16 07:07:07 -04001699<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001700
1701### Example
1702
1703<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1704
Cary Clark682c58d2018-05-16 07:07:07 -04001705<a name='SkPaint_isFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001706## isFakeBoldText
1707
Cary Clark682c58d2018-05-16 07:07:07 -04001708<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1709bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001710</pre>
1711
Cary Clark80247e52018-07-11 16:18:41 -04001712Returns true if approximate bold by increasing the stroke width when creating glyph bitmaps
Cary Clark12799e12017-07-28 15:18:29 -04001713from outlines.
1714
Cary Clark682c58d2018-05-16 07:07:07 -04001715Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001716
1717### Return Value
1718
Cary Clark682c58d2018-05-16 07:07:07 -04001719<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001720
1721### Example
1722
1723<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1724
1725#### Example Output
1726
1727~~~~
1728paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1729paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1730~~~~
1731
1732</fiddle-embed></div>
1733
1734---
1735
Cary Clark682c58d2018-05-16 07:07:07 -04001736<a name='SkPaint_setFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001737## setFakeBoldText
1738
Cary Clark682c58d2018-05-16 07:07:07 -04001739<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1740void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001741</pre>
1742
Cary Clark80247e52018-07-11 16:18:41 -04001743Increases stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001744
Cary Clark682c58d2018-05-16 07:07:07 -04001745Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1746Clears <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 -04001747
1748### Parameters
1749
Cary Clark682c58d2018-05-16 07:07:07 -04001750<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
1751 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001752 </tr>
1753</table>
1754
1755### Example
1756
1757<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1758
1759#### Example Output
1760
1761~~~~
1762paint1 == paint2
1763~~~~
1764
1765</fiddle-embed></div>
1766
1767---
1768
Cary Clark682c58d2018-05-16 07:07:07 -04001769## <a name='Full_Hinting_Spacing'>Full Hinting Spacing</a>
Cary Clark08895c42018-02-01 09:37:32 -05001770
Cary Clark682c58d2018-05-16 07:07:07 -04001771if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> adjusts the character
Cary Clark137b8742018-05-30 09:21:49 -04001772spacing by the difference of the hinted and <a href='undocumented#Unhinted'>Unhinted</a> <a href='undocumented#Left_Side_Bearing'>Left Side Bearing</a> and
Cary Clark682c58d2018-05-16 07:07:07 -04001773<a href='undocumented#Right_Side_Bearing'>Right Side Bearing</a>. <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> only applies to platforms that use
1774FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001775
Cary Clark137b8742018-05-30 09:21:49 -04001776<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text <a href='undocumented#Kerning'>Kerning</a>, where the space between
1777a specific pair of characters is adjusted using data in the font <a href='undocumented#Kerning'>Kerning</a> tables.
Cary Clark12799e12017-07-28 15:18:29 -04001778
Cary Clark682c58d2018-05-16 07:07:07 -04001779<a name='SkPaint_isDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001780## isDevKernText
1781
Cary Clark682c58d2018-05-16 07:07:07 -04001782<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1783bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001784</pre>
1785
Cary Clark682c58d2018-05-16 07:07:07 -04001786Deprecated.
1787
Cary Clark12799e12017-07-28 15:18:29 -04001788---
1789
Cary Clark682c58d2018-05-16 07:07:07 -04001790<a name='SkPaint_setDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001791## setDevKernText
1792
Cary Clark682c58d2018-05-16 07:07:07 -04001793<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1794void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04001795</pre>
1796
Cary Clark682c58d2018-05-16 07:07:07 -04001797Deprecated.
1798
Cary Clark12799e12017-07-28 15:18:29 -04001799---
1800
Cary Clark682c58d2018-05-16 07:07:07 -04001801## <a name='Filter_Quality_Methods'>Filter Quality Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05001802
Cary Clark682c58d2018-05-16 07:07:07 -04001803<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
1804A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
1805A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
1806If the image is drawn without scaling, the <a href='undocumented#Filter_Quality'>Filter Quality</a> choice will not result
Cary Clarkce101242017-09-01 15:51:02 -04001807in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001808
Cary Clark682c58d2018-05-16 07:07:07 -04001809<a href='undocumented#Filter_Quality'>Filter Quality</a> is used in <a href='#Paint'>Paint</a> passed as a parameter to
Cary Clark12799e12017-07-28 15:18:29 -04001810
1811<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001812 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
1813 </tr> <tr>
1814 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
1815 </tr> <tr>
1816 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
1817 </tr> <tr>
1818 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
1819 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001820</table>
1821
Cary Clark682c58d2018-05-16 07:07:07 -04001822and when <a href='#Paint'>Paint</a> has a <a href='undocumented#Shader'>Shader</a> specialization that uses <a href='SkImage_Reference#Image'>Image</a> or <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001823
Cary Clark682c58d2018-05-16 07:07:07 -04001824<a href='undocumented#Filter_Quality'>Filter Quality</a> is <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04001825
1826### Example
1827
skia-bookmaker525f9a92018-05-03 06:27:39 +00001828<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001829
Cary Clark682c58d2018-05-16 07:07:07 -04001830<a name='SkPaint_getFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001831## getFilterQuality
1832
Cary Clark682c58d2018-05-16 07:07:07 -04001833<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1834<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001835</pre>
1836
Cary Clark682c58d2018-05-16 07:07:07 -04001837Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001838draws faster; a higher setting looks better when the image is scaled.
1839
1840### Return Value
1841
Cary Clark682c58d2018-05-16 07:07:07 -04001842one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
1843<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001844
1845### Example
1846
1847<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1848
1849#### Example Output
1850
1851~~~~
1852kNone_SkFilterQuality == paint.getFilterQuality()
1853~~~~
1854
1855</fiddle-embed></div>
1856
1857---
1858
Cary Clark682c58d2018-05-16 07:07:07 -04001859<a name='SkPaint_setFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001860## setFilterQuality
1861
Cary Clark682c58d2018-05-16 07:07:07 -04001862<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1863void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001864</pre>
1865
Cary Clark682c58d2018-05-16 07:07:07 -04001866Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001867draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04001868Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001869
1870### Parameters
1871
Cary Clark682c58d2018-05-16 07:07:07 -04001872<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
1873 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
1874<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001875 </tr>
1876</table>
1877
1878### Example
1879
1880<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1881
1882#### Example Output
1883
1884~~~~
1885kHigh_SkFilterQuality == paint.getFilterQuality()
1886~~~~
1887
1888</fiddle-embed></div>
1889
1890### See Also
1891
Cary Clark682c58d2018-05-16 07:07:07 -04001892<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001893
1894---
1895
Cary Clark682c58d2018-05-16 07:07:07 -04001896## <a name='Color_Methods'>Color Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04001897
Cary Clarkab2621d2018-01-30 10:08:57 -05001898| name | description |
1899| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04001900| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
1901| <a href='#SkPaint_setColor'>setColor</a> | sets <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
Cary Clark12799e12017-07-28 15:18:29 -04001902
Cary Clarkffb3d682018-05-17 12:17:28 -04001903<a href='SkColor_Reference#Color'>Color</a> specifies the red, blue, green, and <a href='SkColor_Reference#Alpha'>Color Alpha</a>
Cary Clarkab2621d2018-01-30 10:08:57 -05001904values used to draw a filled or stroked shape in a 32-bit value. Each component
1905occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1906All values in any combination are valid.
1907
Cary Clark682c58d2018-05-16 07:07:07 -04001908<a href='SkColor_Reference#Color'>Color</a> is not <a href='undocumented#Premultiply'>Premultiplied</a>; <a href='SkColor_Reference#Alpha'>Color Alpha</a> sets the transparency independent of
Cary Clarkffb3d682018-05-17 12:17:28 -04001909RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001910
Cary Clarkffb3d682018-05-17 12:17:28 -04001911The bit positions of <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB are independent of the bit
Cary Clarkab2621d2018-01-30 10:08:57 -05001912positions on the output device, which may have more or fewer bits, and may have
1913a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001914
Cary Clarkffb3d682018-05-17 12:17:28 -04001915| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001916| --- | --- | --- | --- | --- |
1917| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1918
1919### Example
1920
Ravi Mistry874e22b2018-07-19 03:49:13 +00001921<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001922
Cary Clark682c58d2018-05-16 07:07:07 -04001923<a name='SkPaint_getColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001924## getColor
1925
Cary Clark682c58d2018-05-16 07:07:07 -04001926<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1927<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001928</pre>
1929
Cary Clarkffb3d682018-05-17 12:17:28 -04001930Retrieves <a href='SkColor_Reference#Alpha'>Alpha</a> and RGB, <a href='undocumented#Unpremultiply'>Unpremultiplied</a>, packed into 32 bits.
Cary Clark682c58d2018-05-16 07:07:07 -04001931Use helpers <a href='SkColor_Reference#SkColorGetA'>SkColorGetA</a>, <a href='SkColor_Reference#SkColorGetR'>SkColorGetR</a>, <a href='SkColor_Reference#SkColorGetG'>SkColorGetG</a>, and <a href='SkColor_Reference#SkColorGetB'>SkColorGetB</a> to extract
Cary Clark12799e12017-07-28 15:18:29 -04001932a color component.
1933
1934### Return Value
1935
Cary Clarkffb3d682018-05-17 12:17:28 -04001936<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001937
1938### Example
1939
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001940<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001941
1942#### Example Output
1943
1944~~~~
1945Yellow is 100% red, 100% green, and 0% blue.
1946~~~~
1947
1948</fiddle-embed></div>
1949
1950### See Also
1951
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001952<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1953
1954---
1955
1956<a name='SkPaint_getColor4f'></a>
1957## getColor4f
1958
1959<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1960<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const
1961</pre>
1962
1963Retrieves alpha and RGB, unpmreultiplied, as four floating point values. RGB are
1964are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1965
1966### Return Value
1967
1968<a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA
1969
1970### Example
1971
1972<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1973
1974#### Example Output
1975
1976~~~~
1977Yellow is 100% red, 100% green, and 0% blue.
1978~~~~
1979
1980</fiddle-embed></div>
1981
1982### See Also
1983
1984<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001985
1986---
1987
Cary Clark682c58d2018-05-16 07:07:07 -04001988<a name='SkPaint_setColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001989## setColor
1990
Cary Clark682c58d2018-05-16 07:07:07 -04001991<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1992void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04001993</pre>
1994
Cary Clarkffb3d682018-05-17 12:17:28 -04001995Sets <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,
1996<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 -04001997
1998### Parameters
1999
Cary Clark682c58d2018-05-16 07:07:07 -04002000<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002001 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04002002 </tr>
2003</table>
2004
2005### Example
2006
skia-bookmaker233c6522018-07-04 05:33:26 +00002007<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04002008
2009#### Example Output
2010
2011~~~~
2012green1 == green2
2013~~~~
2014
2015</fiddle-embed></div>
2016
2017### See Also
2018
Cary Clarkbbe8ff92018-09-05 11:39:01 -04002019<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>
2020
2021---
2022
2023<a name='SkPaint_setColor4f'></a>
2024## setColor4f
2025
2026<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2027void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& color, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
2028</pre>
2029
2030Sets alpha and RGB used when stroking and filling. The <a href='#SkPaint_setColor4f_color'>color</a> is four floating
2031point values, unpremultiplied. The <a href='#SkPaint_setColor4f_color'>color</a> values are interpreted as being in
2032the <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
2033sRGB <a href='#SkPaint_setColor4f_color'>color</a> space.
2034
2035### Parameters
2036
2037<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
2038 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA</td>
2039 </tr>
2040 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
2041 <td><a href='undocumented#Color_Space'>Color Space</a> describing the encoding of <a href='#SkPaint_setColor4f_color'>color</a></td>
2042 </tr>
2043</table>
2044
2045### Example
2046
2047<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
2048
2049#### Example Output
2050
2051~~~~
2052green1 == green2
2053~~~~
2054
2055</fiddle-embed></div>
2056
2057### See Also
2058
2059<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 -04002060
2061---
2062
Cary Clark682c58d2018-05-16 07:07:07 -04002063## <a name='Alpha_Methods'>Alpha Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002064
Cary Clarkffb3d682018-05-17 12:17:28 -04002065<a href='SkColor_Reference#Alpha'>Color Alpha</a> sets the transparency independent of RGB: red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04002066
Cary Clark682c58d2018-05-16 07:07:07 -04002067<a name='SkPaint_getAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002068## getAlpha
2069
Cary Clark682c58d2018-05-16 07:07:07 -04002070<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2071uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002072</pre>
2073
Cary Clark682c58d2018-05-16 07:07:07 -04002074Retrieves <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 -04002075
2076### Return Value
2077
Cary Clark682c58d2018-05-16 07:07:07 -04002078<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04002079
2080### Example
2081
Cary Clark83647062018-07-18 16:21:51 -04002082<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04002083
2084#### Example Output
2085
2086~~~~
2087255 == paint.getAlpha()
2088~~~~
2089
2090</fiddle-embed></div>
2091
2092---
2093
Cary Clark682c58d2018-05-16 07:07:07 -04002094<a name='SkPaint_setAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002095## setAlpha
2096
Cary Clark682c58d2018-05-16 07:07:07 -04002097<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2098void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04002099</pre>
2100
Cary Clarkffb3d682018-05-17 12:17:28 -04002101Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04002102unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04002103build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
2104<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 -04002105fully opaque.
2106
2107### Parameters
2108
Cary Clark682c58d2018-05-16 07:07:07 -04002109<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
2110 <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 -04002111 </tr>
2112</table>
2113
2114### Example
2115
Ravi Mistry874e22b2018-07-19 03:49:13 +00002116<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04002117
2118#### Example Output
2119
2120~~~~
21210x44112233 == paint.getColor()
2122~~~~
2123
2124</fiddle-embed></div>
2125
2126---
2127
Cary Clark682c58d2018-05-16 07:07:07 -04002128<a name='SkPaint_setARGB'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002129## setARGB
2130
Cary Clark682c58d2018-05-16 07:07:07 -04002131<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2132void <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 -04002133</pre>
2134
Cary Clark682c58d2018-05-16 07:07:07 -04002135Sets <a href='SkColor_Reference#Color'>Color</a> used when drawing solid fills. The color components range from 0 to 255.
Cary Clarkffb3d682018-05-17 12:17:28 -04002136The color 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 -04002137
2138### Parameters
2139
Cary Clark682c58d2018-05-16 07:07:07 -04002140<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2141 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2142 </tr>
2143 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002144 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002145 </tr>
2146 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002147 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002148 </tr>
2149 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002150 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002151 </tr>
2152</table>
2153
2154### Example
2155
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002156<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04002157
2158#### Example Output
2159
2160~~~~
2161transRed1 == transRed2
2162~~~~
2163
2164</fiddle-embed></div>
2165
2166### See Also
2167
Cary Clark682c58d2018-05-16 07:07:07 -04002168<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002169
2170---
2171
Cary Clark682c58d2018-05-16 07:07:07 -04002172## <a name='Style'>Style</a>
Cary Clark08895c42018-02-01 09:37:32 -05002173
Cary Clark682c58d2018-05-16 07:07:07 -04002174<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2175Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002176
Cary Clark682c58d2018-05-16 07:07:07 -04002177Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kFill_Style'>kFill Style</a> to fill the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002178The fill covers the area inside the geometry for most shapes.
2179
Cary Clark682c58d2018-05-16 07:07:07 -04002180Set <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 -04002181
Cary Clark682c58d2018-05-16 07:07:07 -04002182## <a name='Style_Fill'>Style Fill</a>
Cary Clark12799e12017-07-28 15:18:29 -04002183
2184### See Also
2185
Cary Clark682c58d2018-05-16 07:07:07 -04002186<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002187
Cary Clark682c58d2018-05-16 07:07:07 -04002188## <a name='Style_Stroke'>Style Stroke</a>
Cary Clark12799e12017-07-28 15:18:29 -04002189
Cary Clarkbc5697d2017-10-04 14:31:33 -04002190The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002191<a href='#Stroke_Width'>Stroke Width</a>. The area covered where the shape starts and stops is described by <a href='#Stroke_Cap'>Stroke Cap</a>.
2192The area covered where the shape turns a corner is described by <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002193The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002194
Cary Clark682c58d2018-05-16 07:07:07 -04002195As <a href='#Stroke_Width'>Stroke Width</a> gets smaller, the drawn path frame is thinner. <a href='#Stroke_Width'>Stroke Width</a> less than one
2196may have gaps, and if <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is set, <a href='SkColor_Reference#Alpha'>Color Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04002197
Cary Clark682c58d2018-05-16 07:07:07 -04002198## <a name='Style_Hairline'>Style Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002199
Cary Clark682c58d2018-05-16 07:07:07 -04002200<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Style_Hairline'>Hairline</a>.
2201<a href='#Style_Hairline'>Hairline</a> draws the thinnest continuous frame. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, adjacent pixels
Cary Clark7cfcbca2018-01-04 16:11:51 -05002202flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002203
Cary Clark682c58d2018-05-16 07:07:07 -04002204<a href='SkPath_Reference#Path'>Path</a> drawing with <a href='#Style_Hairline'>Hairline</a> may hit the same pixel more than once. For instance, <a href='SkPath_Reference#Path'>Path</a> containing
Cary Clark61313f32018-10-08 14:57:48 -04002205two lines in one <a href='SkPath_Overview#Contour'>Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
Cary Clark682c58d2018-05-16 07:07:07 -04002206pixel. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
Cary Clark7cfcbca2018-01-04 16:11:51 -05002207GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002208while stroking.
2209
Cary Clark682c58d2018-05-16 07:07:07 -04002210## <a name='SkPaint_Style'>Enum SkPaint::Style</a>
Cary Clark12799e12017-07-28 15:18:29 -04002211
Cary Clarka560c472017-11-27 10:44:06 -05002212<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002213 enum <a href='#SkPaint_Style'>Style</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002214 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
2215 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
2216 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002217 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002218
Cary Clark61313f32018-10-08 14:57:48 -04002219 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 -05002220</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002221
Cary Clark682c58d2018-05-16 07:07:07 -04002222Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002223The stroke and fill
2224share all paint attributes; for instance, they are drawn with the same color.
2225
Cary Clark682c58d2018-05-16 07:07:07 -04002226Use <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a> to avoid hitting the same pixels twice with a stroke draw and
Cary Clark12799e12017-07-28 15:18:29 -04002227a fill draw.
2228
2229### Constants
2230
Cary Clark682c58d2018-05-16 07:07:07 -04002231<table style='border-collapse: collapse; width: 62.5em'>
2232 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2233<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2234<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2235 <tr style='background-color: #f0f0f0; '>
2236 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2237 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2238 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002239Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#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>.
2240<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
Cary Clark682c58d2018-05-16 07:07:07 -04002241<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2242The <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> specifies additional rules to fill the area outside the path edge,
Cary Clark12799e12017-07-28 15:18:29 -04002243and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002244<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 -05002245</td>
Cary Clark12799e12017-07-28 15:18:29 -04002246 </tr>
2247 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002248 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2249 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2250 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002251Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#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>.
Cary Clark682c58d2018-05-16 07:07:07 -04002252<a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Line'>Lines</a>, and points, are always drawn as if <a href='#SkPaint_kStroke_Style'>kStroke Style</a> is set,
2253and ignore the set <a href='#SkPaint_Style'>Style</a>.
2254The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2255</td>
2256 </tr>
2257 <tr style='background-color: #f0f0f0; '>
2258 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2259 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2260 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002261Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#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>.
Cary Clark682c58d2018-05-16 07:07:07 -04002262<a href='SkPath_Reference#Path'>Path</a> is treated as if it is set to <a href='SkPath_Reference#SkPath_kWinding_FillType'>SkPath::kWinding FillType</a>,
2263and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002264</td>
Cary Clark12799e12017-07-28 15:18:29 -04002265 </tr>
2266 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002267 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2268 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2269 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2270May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002271</td>
Cary Clark12799e12017-07-28 15:18:29 -04002272 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002273</table>
Cary Clark12799e12017-07-28 15:18:29 -04002274
Cary Clark682c58d2018-05-16 07:07:07 -04002275<a name='SkPaint_getStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002276## getStyle
2277
Cary Clark682c58d2018-05-16 07:07:07 -04002278<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2279<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002280</pre>
2281
Cary Clark80247e52018-07-11 16:18:41 -04002282Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002283
2284### Return Value
2285
Cary Clark682c58d2018-05-16 07:07:07 -04002286one 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 -04002287
2288### Example
2289
2290<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2291
2292#### Example Output
2293
2294~~~~
2295SkPaint::kFill_Style == paint.getStyle()
2296~~~~
2297
2298</fiddle-embed></div>
2299
2300### See Also
2301
Cary Clark682c58d2018-05-16 07:07:07 -04002302<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002303
2304---
2305
Cary Clark682c58d2018-05-16 07:07:07 -04002306<a name='SkPaint_setStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002307## setStyle
2308
Cary Clark682c58d2018-05-16 07:07:07 -04002309<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2310void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002311</pre>
2312
2313Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002314Has no effect if <a href='#SkPaint_setStyle_style'>style</a> is not a legal <a href='#SkPaint_Style'>Style</a> value.
Cary Clark12799e12017-07-28 15:18:29 -04002315
2316### Parameters
2317
Cary Clark682c58d2018-05-16 07:07:07 -04002318<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2319 <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 -04002320 </tr>
2321</table>
2322
2323### Example
2324
2325<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2326
2327### See Also
2328
Cary Clark682c58d2018-05-16 07:07:07 -04002329<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002330
2331---
2332
2333### See Also
2334
Cary Clark682c58d2018-05-16 07:07:07 -04002335<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> <a href='undocumented#Path_Effect'>Path Effect</a> <a href='#Style_Fill'>Style Fill</a> <a href='#Style_Stroke'>Style Stroke</a>
Cary Clark12799e12017-07-28 15:18:29 -04002336
Cary Clark682c58d2018-05-16 07:07:07 -04002337## <a name='Stroke_Width'>Stroke Width</a>
Cary Clark08895c42018-02-01 09:37:32 -05002338
Cary Clark682c58d2018-05-16 07:07:07 -04002339<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002340of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002341set 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 -04002342
2343When width is greater than zero, the stroke encompasses as many pixels partially
2344or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002345the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002346
Cary Clark682c58d2018-05-16 07:07:07 -04002347The stroke dimensions are scaled by the canvas matrix, but <a href='#Style_Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002348remains one pixel wide regardless of scaling.
2349
2350The default width for the paint is zero.
2351
2352### Example
2353
skia-bookmaker525f9a92018-05-03 06:27:39 +00002354<div><fiddle-embed name="5112c7209a19e035c61cef33a624a652" gpu="true"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clark1a8d7622018-03-05 13:26:16 -05002355line and the platform implementation.
2356</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002357
Cary Clark682c58d2018-05-16 07:07:07 -04002358<a name='SkPaint_getStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002359## getStrokeWidth
2360
Cary Clark682c58d2018-05-16 07:07:07 -04002361<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2362<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002363</pre>
2364
Cary Clark682c58d2018-05-16 07:07:07 -04002365Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002366outline the shape.
2367
2368### Return Value
2369
Cary Clark682c58d2018-05-16 07:07:07 -04002370zero for <a href='#Style_Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002371
2372### Example
2373
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002374<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002375
2376#### Example Output
2377
2378~~~~
23790 == paint.getStrokeWidth()
2380~~~~
2381
2382</fiddle-embed></div>
2383
2384---
2385
Cary Clark682c58d2018-05-16 07:07:07 -04002386<a name='SkPaint_setStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002387## setStrokeWidth
2388
Cary Clark682c58d2018-05-16 07:07:07 -04002389<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2390void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002391</pre>
2392
2393Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002394outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002395Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002396
2397### Parameters
2398
Cary Clark682c58d2018-05-16 07:07:07 -04002399<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
2400 <td>zero thickness for <a href='#Style_Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002401 </tr>
2402</table>
2403
2404### Example
2405
2406<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2407
2408#### Example Output
2409
2410~~~~
24115 == paint.getStrokeWidth()
2412~~~~
2413
2414</fiddle-embed></div>
2415
2416---
2417
Cary Clark682c58d2018-05-16 07:07:07 -04002418## <a name='Miter_Limit'>Miter Limit</a>
Cary Clark08895c42018-02-01 09:37:32 -05002419
Cary Clark682c58d2018-05-16 07:07:07 -04002420<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002421relative to the stroke width.
2422
Cary Clark682c58d2018-05-16 07:07:07 -04002423<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
2424is 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>
2425or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002426
Cary Clark682c58d2018-05-16 07:07:07 -04002427If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
2428is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002429
Cary Clark2be81cf2018-09-13 12:04:30 -04002430<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle using:
2431<code>miter limit&nbsp;=&nbsp;1&nbsp;/&nbsp;sin&nbsp;\(&nbsp;angle&nbsp;/&nbsp;2&nbsp;\)</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002432
Cary Clark2be81cf2018-09-13 12:04:30 -04002433<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
Cary Clark682c58d2018-05-16 07:07:07 -04002434The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002435in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002436
2437Here are some miter limits and the angles that triggers them.
2438
2439| miter limit | angle in degrees |
2440| --- | --- |
2441| 10 | 11.48 |
2442| 9 | 12.76 |
2443| 8 | 14.36 |
2444| 7 | 16.43 |
2445| 6 | 19.19 |
2446| 5 | 23.07 |
2447| 4 | 28.96 |
2448| 3 | 38.94 |
2449| 2 | 60 |
2450| 1 | 180 |
2451
2452### Example
2453
Cary Clarka619d452018-07-16 08:12:01 -04002454<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark12799e12017-07-28 15:18:29 -04002455When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002456by a bevel join.
2457</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002458
Cary Clark682c58d2018-05-16 07:07:07 -04002459<a name='SkPaint_getStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002460## getStrokeMiter
2461
Cary Clark682c58d2018-05-16 07:07:07 -04002462<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2463<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002464</pre>
2465
Cary Clark80247e52018-07-11 16:18:41 -04002466Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002467
2468### Return Value
2469
Cary Clark682c58d2018-05-16 07:07:07 -04002470zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002471
2472### Example
2473
2474<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2475
2476#### Example Output
2477
2478~~~~
2479default miter limit == 4
2480~~~~
2481
2482</fiddle-embed></div>
2483
2484### See Also
2485
Cary Clark682c58d2018-05-16 07:07:07 -04002486<a href='#Miter_Limit'>Miter Limit</a> <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002487
2488---
2489
Cary Clark682c58d2018-05-16 07:07:07 -04002490<a name='SkPaint_setStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002491## setStrokeMiter
2492
Cary Clark682c58d2018-05-16 07:07:07 -04002493<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2494void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002495</pre>
2496
Cary Clark80247e52018-07-11 16:18:41 -04002497Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002498Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04002499Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002500
2501### Parameters
2502
Cary Clark682c58d2018-05-16 07:07:07 -04002503<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
2504 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002505 </tr>
2506</table>
2507
2508### Example
2509
skia-bookmakera717ca92018-07-08 05:32:09 +00002510<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002511
2512#### Example Output
2513
2514~~~~
2515default miter limit == 8
2516~~~~
2517
2518</fiddle-embed></div>
2519
2520### See Also
2521
Cary Clark682c58d2018-05-16 07:07:07 -04002522<a href='#Miter_Limit'>Miter Limit</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002523
2524---
2525
Cary Clark682c58d2018-05-16 07:07:07 -04002526## <a name='Stroke_Cap'>Stroke Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002527
Cary Clark682c58d2018-05-16 07:07:07 -04002528## <a name='SkPaint_Cap'>Enum SkPaint::Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002529
Cary Clarka560c472017-11-27 10:44:06 -05002530<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002531 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002532 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2533 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2534 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002535
Cary Clark61313f32018-10-08 14:57:48 -04002536 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2537 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002538 };
Cary Clark6fc50412017-09-21 12:31:06 -04002539
Cary Clark61313f32018-10-08 14:57:48 -04002540 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 -05002541</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002542
Cary Clark61313f32018-10-08 14:57:48 -04002543<a href='#Stroke_Cap'>Stroke Cap</a> draws at the beginning and end of an open <a href='SkPath_Overview#Contour'>Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002544
2545### Constants
2546
Cary Clark682c58d2018-05-16 07:07:07 -04002547<table style='border-collapse: collapse; width: 62.5em'>
2548 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2549<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2550<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2551 <tr style='background-color: #f0f0f0; '>
2552 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2553 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2554 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2555Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002556</td>
Cary Clark12799e12017-07-28 15:18:29 -04002557 </tr>
2558 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002559 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2560 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2561 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2562Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05002563and end.
2564</td>
Cary Clark12799e12017-07-28 15:18:29 -04002565 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002566 <tr style='background-color: #f0f0f0; '>
2567 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2568 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2569 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2570Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04002571and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002572of the stroke.
2573</td>
Cary Clark12799e12017-07-28 15:18:29 -04002574 </tr>
2575 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002576 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2577 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2578 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2579Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
2580</td>
2581 </tr>
2582 <tr style='background-color: #f0f0f0; '>
2583 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2584 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2585 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2586<a href='#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 -05002587</td>
Cary Clark12799e12017-07-28 15:18:29 -04002588 </tr>
2589 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002590 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2591 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2592 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2593May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002594</td>
Cary Clark12799e12017-07-28 15:18:29 -04002595 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002596</table>
Cary Clark12799e12017-07-28 15:18:29 -04002597
Cary Clark682c58d2018-05-16 07:07:07 -04002598Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002599follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002600
Cary Clark61313f32018-10-08 14:57:48 -04002601If the <a href='SkPath_Overview#Contour'>Path Contour</a> is not terminated by <a href='SkPath_Reference#SkPath_kClose_Verb'>SkPath::kClose Verb</a>, the contour has a
Cary Clark12799e12017-07-28 15:18:29 -04002602visible beginning and end.
2603
Cary Clark61313f32018-10-08 14:57:48 -04002604<a href='SkPath_Overview#Contour'>Path Contour</a> may start and end at the same point; defining <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002605
Cary Clark61313f32018-10-08 14:57:48 -04002606<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
2607<a href='#SkPaint_kRound_Cap'>kRound Cap</a> and <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a> draws a circle of diameter <a href='#Stroke_Width'>Stroke Width</a>
Cary Clark12799e12017-07-28 15:18:29 -04002608at the contour point.
Cary Clark61313f32018-10-08 14:57:48 -04002609<a href='#SkPaint_kSquare_Cap'>kSquare Cap</a> and <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a> draws an upright square with a side of
Cary Clark682c58d2018-05-16 07:07:07 -04002610<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002611
Cary Clark682c58d2018-05-16 07:07:07 -04002612<a href='#Stroke_Cap'>Stroke Cap</a> is <a href='#SkPaint_kButt_Cap'>kButt Cap</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04002613
Cary Clark12799e12017-07-28 15:18:29 -04002614### Example
2615
Cary Clark2ade9972017-11-02 17:49:34 -04002616<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002617
Cary Clark682c58d2018-05-16 07:07:07 -04002618<a name='SkPaint_getStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002619## getStrokeCap
2620
Cary Clark682c58d2018-05-16 07:07:07 -04002621<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2622<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002623</pre>
2624
Cary Clark80247e52018-07-11 16:18:41 -04002625Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002626
2627### Return Value
2628
Cary Clark682c58d2018-05-16 07:07:07 -04002629one 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 -04002630
2631### Example
2632
2633<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2634
2635#### Example Output
2636
2637~~~~
2638kButt_Cap == default stroke cap
2639~~~~
2640
2641</fiddle-embed></div>
2642
2643### See Also
2644
Cary Clark682c58d2018-05-16 07:07:07 -04002645<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002646
2647---
2648
Cary Clark682c58d2018-05-16 07:07:07 -04002649<a name='SkPaint_setStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002650## setStrokeCap
2651
Cary Clark682c58d2018-05-16 07:07:07 -04002652<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2653void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002654</pre>
2655
Cary Clark80247e52018-07-11 16:18:41 -04002656Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002657
2658### Parameters
2659
Cary Clark682c58d2018-05-16 07:07:07 -04002660<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
2661 <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>;
2662has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002663 </tr>
2664</table>
2665
2666### Example
2667
2668<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2669
2670#### Example Output
2671
2672~~~~
2673kRound_Cap == paint.getStrokeCap()
2674~~~~
2675
2676</fiddle-embed></div>
2677
2678### See Also
2679
Cary Clark682c58d2018-05-16 07:07:07 -04002680<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002681
2682---
2683
Cary Clark682c58d2018-05-16 07:07:07 -04002684## <a name='Stroke_Join'>Stroke Join</a>
Cary Clark08895c42018-02-01 09:37:32 -05002685
Cary Clark61313f32018-10-08 14:57:48 -04002686<a href='#Stroke_Join'>Stroke Join</a> draws at the sharp corners of an open or closed <a href='SkPath_Overview#Contour'>Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002687
Cary Clark682c58d2018-05-16 07:07:07 -04002688Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002689follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002690
2691If the contour direction changes abruptly, because the tangent direction leading
2692to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04002693the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002694
2695### Example
2696
Cary Clark2ade9972017-11-02 17:49:34 -04002697<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002698
Cary Clark682c58d2018-05-16 07:07:07 -04002699## <a name='SkPaint_Join'>Enum SkPaint::Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002700
Cary Clarka560c472017-11-27 10:44:06 -05002701<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002702 enum <a href='#SkPaint_Join'>Join</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002703 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2704 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2705 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002706
Cary Clark61313f32018-10-08 14:57:48 -04002707 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2708 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002709 };
Cary Clark6fc50412017-09-21 12:31:06 -04002710
Cary Clark61313f32018-10-08 14:57:48 -04002711 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 -05002712</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002713
Cary Clark682c58d2018-05-16 07:07:07 -04002714<a href='#SkPaint_Join'>Join</a> specifies how corners are drawn when a shape is stroked. <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002715affects the four corners of a stroked rectangle, and the connected segments in a
2716stroked path.
2717
2718Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2719radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2720connect the thick strokes.
2721
Cary Clark7cfcbca2018-01-04 16:11:51 -05002722The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002723not contain the actual join. For instance, a fill path constructed with round joins does
2724not necessarily include circles at each connected segment.
2725
2726### Constants
2727
Cary Clark682c58d2018-05-16 07:07:07 -04002728<table style='border-collapse: collapse; width: 62.5em'>
2729 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2730<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2731<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2732 <tr style='background-color: #f0f0f0; '>
2733 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2734 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2736Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
2737If the extension exceeds <a href='#Miter_Limit'>Miter Limit</a>, <a href='#SkPaint_kBevel_Join'>kBevel Join</a> is used instead.
Cary Clark1a8d7622018-03-05 13:26:16 -05002738</td>
Cary Clark12799e12017-07-28 15:18:29 -04002739 </tr>
2740 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002741 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2742 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2744Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
2745</td>
2746 </tr>
2747 <tr style='background-color: #f0f0f0; '>
2748 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2749 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2750 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2751Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002752</td>
Cary Clark12799e12017-07-28 15:18:29 -04002753 </tr>
2754 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002755 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2756 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2757 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2758equivalent to the largest value for Stroke_Join</td>
2759 </tr>
2760 <tr style='background-color: #f0f0f0; '>
2761 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2762 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2763 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2764<a href='#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 -05002765</td>
Cary Clark12799e12017-07-28 15:18:29 -04002766 </tr>
2767 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002768 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2769 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2770 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2771May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002772</td>
Cary Clark12799e12017-07-28 15:18:29 -04002773 </tr>
2774</table>
2775
2776### Example
2777
2778<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2779
2780### See Also
2781
Cary Clark682c58d2018-05-16 07:07:07 -04002782<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 -04002783
Cary Clark682c58d2018-05-16 07:07:07 -04002784<a name='SkPaint_getStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002785## getStrokeJoin
2786
Cary Clark682c58d2018-05-16 07:07:07 -04002787<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2788<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002789</pre>
2790
Cary Clark80247e52018-07-11 16:18:41 -04002791Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002792
2793### Return Value
2794
Cary Clark682c58d2018-05-16 07:07:07 -04002795one 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 -04002796
2797### Example
2798
Cary Clark7f644ec2018-07-19 10:50:44 -04002799<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002800
2801#### Example Output
2802
2803~~~~
2804kMiter_Join == default stroke join
2805~~~~
2806
2807</fiddle-embed></div>
2808
2809### See Also
2810
Cary Clark682c58d2018-05-16 07:07:07 -04002811<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002812
2813---
2814
Cary Clark682c58d2018-05-16 07:07:07 -04002815<a name='SkPaint_setStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002816## setStrokeJoin
2817
Cary Clark682c58d2018-05-16 07:07:07 -04002818<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2819void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002820</pre>
2821
Cary Clark80247e52018-07-11 16:18:41 -04002822Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002823
2824### Parameters
2825
Cary Clark682c58d2018-05-16 07:07:07 -04002826<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
2827 <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>;
Cary Clarkbad5ad72017-08-03 17:14:08 -04002828otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002829 </tr>
2830</table>
2831
2832### Example
2833
2834<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2835
2836#### Example Output
2837
2838~~~~
2839kMiter_Join == paint.getStrokeJoin()
2840~~~~
2841
2842</fiddle-embed></div>
2843
2844### See Also
2845
Cary Clark682c58d2018-05-16 07:07:07 -04002846<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002847
2848---
2849
2850### See Also
2851
Cary Clark682c58d2018-05-16 07:07:07 -04002852<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002853
Cary Clark682c58d2018-05-16 07:07:07 -04002854## <a name='Fill_Path'>Fill Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05002855
Cary Clark682c58d2018-05-16 07:07:07 -04002856<a href='#Fill_Path'>Fill Path</a> creates a <a href='SkPath_Reference#Path'>Path</a> by applying the <a href='undocumented#Path_Effect'>Path Effect</a>, followed by the <a href='#Style_Stroke'>Style Stroke</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002857
Cary Clark682c58d2018-05-16 07:07:07 -04002858If <a href='#Paint'>Paint</a> contains <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Path_Effect'>Path Effect</a> operates on the source <a href='SkPath_Reference#Path'>Path</a>; the result
2859replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2860destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002861
Cary Clark682c58d2018-05-16 07:07:07 -04002862Fill <a href='SkPath_Reference#Path'>Path</a> can request the <a href='undocumented#Path_Effect'>Path Effect</a> to restrict to a culling rectangle, but
2863the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002864
Cary Clark682c58d2018-05-16 07:07:07 -04002865If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
2866and <a href='#Stroke_Width'>Stroke Width</a> is greater than zero, the <a href='#Stroke_Width'>Stroke Width</a>, <a href='#Stroke_Cap'>Stroke Cap</a>, <a href='#Stroke_Join'>Stroke Join</a>,
2867and <a href='#Miter_Limit'>Miter Limit</a> operate on the destination <a href='SkPath_Reference#Path'>Path</a>, replacing it.
Cary Clark12799e12017-07-28 15:18:29 -04002868
Cary Clark682c58d2018-05-16 07:07:07 -04002869Fill <a href='SkPath_Reference#Path'>Path</a> can specify the precision used by <a href='#Stroke_Width'>Stroke Width</a> to approximate the stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002870
Cary Clark682c58d2018-05-16 07:07:07 -04002871If the <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> and the <a href='#Stroke_Width'>Stroke Width</a> is zero, <a href='#SkPaint_getFillPath'>getFillPath</a>
2872returns false since <a href='#Style_Hairline'>Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002873
Cary Clark682c58d2018-05-16 07:07:07 -04002874<a name='SkPaint_getFillPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002875## getFillPath
2876
Cary Clark682c58d2018-05-16 07:07:07 -04002877<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2878bool <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 -04002879</pre>
2880
Cary Clark80247e52018-07-11 16:18:41 -04002881Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04002882
2883### Parameters
2884
Cary Clark682c58d2018-05-16 07:07:07 -04002885<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
2886 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
2887 </tr>
2888 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
2889 <td>resulting <a href='SkPath_Reference#Path'>Path</a>; may be the same as <a href='#SkPaint_getFillPath_src'>src</a>, but may not be nullptr</td>
2890 </tr>
2891 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
2892 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
2893 </tr>
2894 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
2895 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04002896to favor speed and size</td>
2897 </tr>
2898</table>
2899
2900### Return Value
2901
Cary Clark682c58d2018-05-16 07:07:07 -04002902true if the path represents <a href='#Style_Fill'>Style Fill</a>, or false if it represents <a href='#Style_Hairline'>Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002903
2904### Example
2905
Cary Clark682c58d2018-05-16 07:07:07 -04002906<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href='SkPath_Reference#Quad'>Quad</a> stroke is turned into a filled path with increasing levels of precision.
2907At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002908At the highest precision, the filled path has high fidelity compared to the original stroke.
2909</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002910
2911---
2912
Cary Clark682c58d2018-05-16 07:07:07 -04002913<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002914
Cary Clark682c58d2018-05-16 07:07:07 -04002915<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2916bool <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 -04002917</pre>
2918
Cary Clark80247e52018-07-11 16:18:41 -04002919Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04002920
Cary Clark682c58d2018-05-16 07:07:07 -04002921Replaces <a href='#SkPaint_getFillPath_2_dst'>dst</a> with the <a href='#SkPaint_getFillPath_2_src'>src</a> path modified by <a href='undocumented#Path_Effect'>Path Effect</a> and <a href='#Style_Stroke'>Style Stroke</a>.
2922<a href='undocumented#Path_Effect'>Path Effect</a>, if any, is not culled. <a href='#Stroke_Width'>Stroke Width</a> is created with default precision.
Cary Clark12799e12017-07-28 15:18:29 -04002923
2924### Parameters
2925
Cary Clark682c58d2018-05-16 07:07:07 -04002926<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
2927 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
2928 </tr>
2929 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
2930 <td>resulting <a href='SkPath_Reference#Path'>Path</a> <a href='#SkPaint_getFillPath_2_dst'>dst</a> may be the same as <a href='#SkPaint_getFillPath_2_src'>src</a>, but may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04002931 </tr>
2932</table>
2933
2934### Return Value
2935
Cary Clark682c58d2018-05-16 07:07:07 -04002936true if the path represents <a href='#Style_Fill'>Style Fill</a>, or false if it represents <a href='#Style_Hairline'>Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002937
2938### Example
2939
2940<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2941
2942---
2943
2944### See Also
2945
Cary Clark682c58d2018-05-16 07:07:07 -04002946<a href='#Style_Stroke'>Style Stroke</a> <a href='#Stroke_Width'>Stroke Width</a> <a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002947
Cary Clark682c58d2018-05-16 07:07:07 -04002948## <a name='Shader_Methods'>Shader Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05002949
Cary Clark682c58d2018-05-16 07:07:07 -04002950<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2951<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
2952If <a href='#Paint'>Paint</a> has no <a href='undocumented#Shader'>Shader</a>, then <a href='SkColor_Reference#Color'>Color</a> fills the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002953
Cary Clark682c58d2018-05-16 07:07:07 -04002954<a href='undocumented#Shader'>Shader</a> is modulated by <a href='SkColor_Reference#Alpha'>Color Alpha</a> component of <a href='SkColor_Reference#Color'>Color</a>.
2955If <a href='undocumented#Shader'>Shader</a> object defines only <a href='SkColor_Reference#Alpha'>Color Alpha</a>, then <a href='SkColor_Reference#Color'>Color</a> modulated by <a href='SkColor_Reference#Alpha'>Color Alpha</a> describes
Cary Clark12799e12017-07-28 15:18:29 -04002956the fill.
2957
Cary Clark682c58d2018-05-16 07:07:07 -04002958The drawn transparency can be modified without altering <a href='undocumented#Shader'>Shader</a>, by changing <a href='SkColor_Reference#Alpha'>Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002959
2960### Example
2961
2962<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2963
Cary Clark682c58d2018-05-16 07:07:07 -04002964If <a href='undocumented#Shader'>Shader</a> generates only <a href='SkColor_Reference#Alpha'>Color Alpha</a> then all components of <a href='SkColor_Reference#Color'>Color</a> modulate the output.
Cary Clark12799e12017-07-28 15:18:29 -04002965
2966### Example
2967
skia-bookmaker525f9a92018-05-03 06:27:39 +00002968<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002969
Cary Clark682c58d2018-05-16 07:07:07 -04002970<a name='SkPaint_getShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002971## getShader
2972
Cary Clark682c58d2018-05-16 07:07:07 -04002973<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2974<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002975</pre>
2976
Cary Clark80247e52018-07-11 16:18:41 -04002977Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002978
Cary Clark682c58d2018-05-16 07:07:07 -04002979Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002980
2981### Return Value
2982
Cary Clark682c58d2018-05-16 07:07:07 -04002983<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002984
2985### Example
2986
2987<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2988
2989#### Example Output
2990
2991~~~~
2992nullptr == shader
2993nullptr != shader
2994~~~~
2995
2996</fiddle-embed></div>
2997
2998---
2999
Cary Clark682c58d2018-05-16 07:07:07 -04003000<a name='SkPaint_refShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003001## refShader
3002
Cary Clark682c58d2018-05-16 07:07:07 -04003003<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3004<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 -04003005</pre>
3006
Cary Clark80247e52018-07-11 16:18:41 -04003007Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003008
Cary Clark682c58d2018-05-16 07:07:07 -04003009Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003010
3011### Return Value
3012
Cary Clark682c58d2018-05-16 07:07:07 -04003013<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003014
3015### Example
3016
3017<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
3018
3019#### Example Output
3020
3021~~~~
3022shader unique: true
3023shader unique: false
3024~~~~
3025
3026</fiddle-embed></div>
3027
3028---
3029
Cary Clark682c58d2018-05-16 07:07:07 -04003030<a name='SkPaint_setShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003031## setShader
3032
Cary Clark682c58d2018-05-16 07:07:07 -04003033<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3034void <a href='#SkPaint_setShader'>setShader</a>(<a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkShader'>SkShader</a>&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04003035</pre>
3036
Cary Clark80247e52018-07-11 16:18:41 -04003037Sets optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003038
Cary Clark682c58d2018-05-16 07:07:07 -04003039Sets <a href='undocumented#Shader'>Shader</a> to <a href='#SkPaint_setShader_shader'>shader</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous <a href='undocumented#Shader'>Shader</a>.
3040Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003041
3042### Parameters
3043
Cary Clark682c58d2018-05-16 07:07:07 -04003044<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
3045 <td>how geometry is filled with color; if nullptr, <a href='SkColor_Reference#Color'>Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04003046 </tr>
3047</table>
3048
3049### Example
3050
skia-bookmakere0a458f2018-07-16 05:29:00 +00003051<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003052
3053---
3054
Cary Clark682c58d2018-05-16 07:07:07 -04003055## <a name='Color_Filter_Methods'>Color Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003056
Cary Clark682c58d2018-05-16 07:07:07 -04003057<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
Cary Clark224c7002018-06-27 11:00:21 -04003058<a href='undocumented#Color_Filter'>Color Filter</a> may apply <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
Cary Clark682c58d2018-05-16 07:07:07 -04003059If <a href='#Paint'>Paint</a> has no <a href='undocumented#Color_Filter'>Color Filter</a>, the color is unaltered.
Cary Clark12799e12017-07-28 15:18:29 -04003060
Cary Clark682c58d2018-05-16 07:07:07 -04003061The drawn transparency can be modified without altering <a href='undocumented#Color_Filter'>Color Filter</a>, by changing <a href='SkColor_Reference#Alpha'>Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003062
3063### Example
3064
3065<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
3066
Cary Clark682c58d2018-05-16 07:07:07 -04003067<a name='SkPaint_getColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003068## getColorFilter
3069
Cary Clark682c58d2018-05-16 07:07:07 -04003070<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3071<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003072</pre>
3073
Cary Clark682c58d2018-05-16 07:07:07 -04003074Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3075Does not alter <a href='undocumented#Color_Filter'>Color Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003076
3077### Return Value
3078
Cary Clark682c58d2018-05-16 07:07:07 -04003079<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003080
3081### Example
3082
3083<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
3084
3085#### Example Output
3086
3087~~~~
3088nullptr == color filter
3089nullptr != color filter
3090~~~~
3091
3092</fiddle-embed></div>
3093
3094---
3095
Cary Clark682c58d2018-05-16 07:07:07 -04003096<a name='SkPaint_refColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003097## refColorFilter
3098
Cary Clark682c58d2018-05-16 07:07:07 -04003099<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3100<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 -04003101</pre>
3102
Cary Clark682c58d2018-05-16 07:07:07 -04003103Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3104Increases <a href='undocumented#Color_Filter'>Color Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003105
3106### Return Value
3107
Cary Clark682c58d2018-05-16 07:07:07 -04003108<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04003109
3110### Example
3111
3112<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
3113
3114#### Example Output
3115
3116~~~~
3117color filter unique: true
3118color filter unique: false
3119~~~~
3120
3121</fiddle-embed></div>
3122
3123---
3124
Cary Clark682c58d2018-05-16 07:07:07 -04003125<a name='SkPaint_setColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003126## setColorFilter
3127
Cary Clark682c58d2018-05-16 07:07:07 -04003128<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3129void <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 -04003130</pre>
3131
Cary Clark682c58d2018-05-16 07:07:07 -04003132Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3133<a href='undocumented#Color_Filter'>Color Filter</a>. Pass nullptr to clear <a href='undocumented#Color_Filter'>Color Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003134
Cary Clark682c58d2018-05-16 07:07:07 -04003135Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003136
3137### Parameters
3138
Cary Clark682c58d2018-05-16 07:07:07 -04003139<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3140 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003141 </tr>
3142</table>
3143
3144### Example
3145
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003146<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003147
3148---
3149
Cary Clark682c58d2018-05-16 07:07:07 -04003150## <a name='Blend_Mode_Methods'>Blend Mode Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003151
Cary Clark224c7002018-06-27 11:00:21 -04003152<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3153The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003154over the destination color.
3155
3156### Example
3157
Cary Clark83647062018-07-18 16:21:51 -04003158<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003159
3160### See Also
3161
Cary Clark224c7002018-06-27 11:00:21 -04003162<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003163
Cary Clark682c58d2018-05-16 07:07:07 -04003164<a name='SkPaint_getBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003165## getBlendMode
3166
Cary Clark682c58d2018-05-16 07:07:07 -04003167<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003168<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003169</pre>
3170
Cary Clark224c7002018-06-27 11:00:21 -04003171Returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
3172By default, returns <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003173
3174### Return Value
3175
3176mode used to combine source color with destination color
3177
3178### Example
3179
skia-bookmaker525f9a92018-05-03 06:27:39 +00003180<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003181
3182#### Example Output
3183
3184~~~~
3185kSrcOver == getBlendMode
3186kSrcOver != getBlendMode
3187~~~~
3188
3189</fiddle-embed></div>
3190
3191---
3192
Cary Clark682c58d2018-05-16 07:07:07 -04003193<a name='SkPaint_isSrcOver'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003194## isSrcOver
3195
Cary Clark682c58d2018-05-16 07:07:07 -04003196<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3197bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003198</pre>
3199
Cary Clark224c7002018-06-27 11:00:21 -04003200Returns true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04003201
3202### Return Value
3203
Cary Clark224c7002018-06-27 11:00:21 -04003204true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003205
3206### Example
3207
3208<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3209
3210#### Example Output
3211
3212~~~~
3213isSrcOver == true
3214isSrcOver != true
3215~~~~
3216
3217</fiddle-embed></div>
3218
3219---
3220
Cary Clark682c58d2018-05-16 07:07:07 -04003221<a name='SkPaint_setBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003222## setBlendMode
3223
Cary Clark682c58d2018-05-16 07:07:07 -04003224<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003225void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003226</pre>
3227
Cary Clark224c7002018-06-27 11:00:21 -04003228Sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003229Does not check for valid input.
3230
3231### Parameters
3232
Cary Clark682c58d2018-05-16 07:07:07 -04003233<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark224c7002018-06-27 11:00:21 -04003234 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003235 </tr>
3236</table>
3237
3238### Example
3239
3240<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3241
3242#### Example Output
3243
3244~~~~
3245isSrcOver == true
3246isSrcOver != true
3247~~~~
3248
3249</fiddle-embed></div>
3250
3251---
3252
Cary Clark682c58d2018-05-16 07:07:07 -04003253## <a name='Path_Effect_Methods'>Path Effect Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003254
Cary Clark682c58d2018-05-16 07:07:07 -04003255<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3256<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3257If <a href='#Paint'>Paint</a> has no <a href='undocumented#Path_Effect'>Path Effect</a>, the path geometry is unaltered when filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04003258
3259### Example
3260
3261<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3262
3263### See Also
3264
Cary Clark682c58d2018-05-16 07:07:07 -04003265<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003266
Cary Clark682c58d2018-05-16 07:07:07 -04003267<a name='SkPaint_getPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003268## getPathEffect
3269
Cary Clark682c58d2018-05-16 07:07:07 -04003270<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3271<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003272</pre>
3273
Cary Clark682c58d2018-05-16 07:07:07 -04003274Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3275Does not alter <a href='undocumented#Path_Effect'>Path Effect</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003276
3277### Return Value
3278
Cary Clark682c58d2018-05-16 07:07:07 -04003279<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003280
3281### Example
3282
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003283<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003284
3285#### Example Output
3286
3287~~~~
3288nullptr == path effect
3289nullptr != path effect
3290~~~~
3291
3292</fiddle-embed></div>
3293
3294---
3295
Cary Clark682c58d2018-05-16 07:07:07 -04003296<a name='SkPaint_refPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003297## refPathEffect
3298
Cary Clark682c58d2018-05-16 07:07:07 -04003299<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3300<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 -04003301</pre>
3302
Cary Clark682c58d2018-05-16 07:07:07 -04003303Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3304Increases <a href='undocumented#Path_Effect'>Path Effect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003305
3306### Return Value
3307
Cary Clark682c58d2018-05-16 07:07:07 -04003308<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003309
3310### Example
3311
Cary Clark83647062018-07-18 16:21:51 -04003312<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003313
3314#### Example Output
3315
3316~~~~
3317path effect unique: true
3318path effect unique: false
3319~~~~
3320
3321</fiddle-embed></div>
3322
3323---
3324
Cary Clark682c58d2018-05-16 07:07:07 -04003325<a name='SkPaint_setPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003326## setPathEffect
3327
Cary Clark682c58d2018-05-16 07:07:07 -04003328<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3329void <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 -04003330</pre>
3331
Cary Clark682c58d2018-05-16 07:07:07 -04003332Sets <a href='undocumented#Path_Effect'>Path Effect</a> to <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3333<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003334
Cary Clark682c58d2018-05-16 07:07:07 -04003335Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003336
3337### Parameters
3338
Cary Clark682c58d2018-05-16 07:07:07 -04003339<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3340 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003341 </tr>
3342</table>
3343
3344### Example
3345
3346<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3347
3348---
3349
Cary Clark682c58d2018-05-16 07:07:07 -04003350## <a name='Mask_Filter_Methods'>Mask Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003351
Cary Clark682c58d2018-05-16 07:07:07 -04003352<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3353<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003354
Cary Clark682c58d2018-05-16 07:07:07 -04003355<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3356creating a blur effect. Set <a href='undocumented#Mask_Filter'>Mask Filter</a> to nullptr to prevent <a href='undocumented#Mask_Filter'>Mask Filter</a> from
Cary Clark6fc50412017-09-21 12:31:06 -04003357modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003358
3359### Example
3360
Cary Clark681287e2018-03-16 11:34:15 -04003361<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003362
Cary Clark682c58d2018-05-16 07:07:07 -04003363<a name='SkPaint_getMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003364## getMaskFilter
3365
Cary Clark682c58d2018-05-16 07:07:07 -04003366<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3367<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003368</pre>
3369
Cary Clark682c58d2018-05-16 07:07:07 -04003370Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
3371Does not alter <a href='undocumented#Mask_Filter'>Mask Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003372
3373### Return Value
3374
Cary Clark682c58d2018-05-16 07:07:07 -04003375<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003376
3377### Example
3378
Cary Clark681287e2018-03-16 11:34:15 -04003379<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003380
3381#### Example Output
3382
3383~~~~
3384nullptr == mask filter
3385nullptr != mask filter
3386~~~~
3387
3388</fiddle-embed></div>
3389
3390---
3391
Cary Clark682c58d2018-05-16 07:07:07 -04003392<a name='SkPaint_refMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003393## refMaskFilter
3394
Cary Clark682c58d2018-05-16 07:07:07 -04003395<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3396<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 -04003397</pre>
3398
Cary Clark682c58d2018-05-16 07:07:07 -04003399Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003400
Cary Clark682c58d2018-05-16 07:07:07 -04003401Increases <a href='undocumented#Mask_Filter'>Mask Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003402
3403### Return Value
3404
Cary Clark682c58d2018-05-16 07:07:07 -04003405<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003406
3407### Example
3408
Cary Clark83647062018-07-18 16:21:51 -04003409<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003410
3411#### Example Output
3412
3413~~~~
3414mask filter unique: true
3415mask filter unique: false
3416~~~~
3417
3418</fiddle-embed></div>
3419
3420---
3421
Cary Clark682c58d2018-05-16 07:07:07 -04003422<a name='SkPaint_setMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003423## setMaskFilter
3424
Cary Clark682c58d2018-05-16 07:07:07 -04003425<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3426void <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 -04003427</pre>
3428
Cary Clark682c58d2018-05-16 07:07:07 -04003429Sets <a href='undocumented#Mask_Filter'>Mask Filter</a> to <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3430<a href='undocumented#Mask_Filter'>Mask Filter</a>. Pass nullptr to clear <a href='undocumented#Mask_Filter'>Mask Filter</a> and leave <a href='undocumented#Mask_Filter'>Mask Filter</a> effect on
3431<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003432
Cary Clark682c58d2018-05-16 07:07:07 -04003433Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003434
3435### Parameters
3436
Cary Clark682c58d2018-05-16 07:07:07 -04003437<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3438 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003439 </tr>
3440</table>
3441
3442### Example
3443
Cary Clark681287e2018-03-16 11:34:15 -04003444<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003445
3446---
3447
Cary Clark682c58d2018-05-16 07:07:07 -04003448## <a name='Typeface_Methods'>Typeface Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003449
Cary Clark682c58d2018-05-16 07:07:07 -04003450<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
3451<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
3452The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003453implementation.
3454
3455### Example
3456
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003457<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003458
Cary Clark682c58d2018-05-16 07:07:07 -04003459<a name='SkPaint_getTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003460## getTypeface
3461
Cary Clark682c58d2018-05-16 07:07:07 -04003462<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3463<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003464</pre>
3465
Cary Clark682c58d2018-05-16 07:07:07 -04003466Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
Cary Clark81abc432018-06-25 16:30:08 -04003467Does not alter <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003468
3469### Return Value
3470
Cary Clark682c58d2018-05-16 07:07:07 -04003471<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003472
3473### Example
3474
Cary Clarkf9603982018-07-17 08:20:27 -04003475<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003476
3477#### Example Output
3478
3479~~~~
3480nullptr == typeface
3481nullptr != typeface
3482~~~~
3483
3484</fiddle-embed></div>
3485
3486---
3487
Cary Clark682c58d2018-05-16 07:07:07 -04003488<a name='SkPaint_refTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003489## refTypeface
3490
Cary Clark682c58d2018-05-16 07:07:07 -04003491<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3492<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 -04003493</pre>
3494
Cary Clark682c58d2018-05-16 07:07:07 -04003495Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003496
3497### Return Value
3498
Cary Clark682c58d2018-05-16 07:07:07 -04003499<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003500
3501### Example
3502
Cary Clark83647062018-07-18 16:21:51 -04003503<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003504
3505#### Example Output
3506
3507~~~~
3508typeface1 != typeface2
3509typeface1 == typeface2
3510~~~~
3511
3512</fiddle-embed></div>
3513
3514---
3515
Cary Clark682c58d2018-05-16 07:07:07 -04003516<a name='SkPaint_setTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003517## setTypeface
3518
Cary Clark682c58d2018-05-16 07:07:07 -04003519<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3520void <a href='#SkPaint_setTypeface'>setTypeface</a>(<a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkTypeface'>SkTypeface</a>&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003521</pre>
3522
Cary Clark682c58d2018-05-16 07:07:07 -04003523Sets <a href='undocumented#Typeface'>Typeface</a> to <a href='#SkPaint_setTypeface_typeface'>typeface</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous <a href='undocumented#Typeface'>Typeface</a>.
3524Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3525<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003526
3527### Parameters
3528
Cary Clark682c58d2018-05-16 07:07:07 -04003529<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
3530 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04003531 </tr>
3532</table>
3533
3534### Example
3535
Cary Clark71961fb2018-01-05 14:21:59 -05003536<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003537
3538---
3539
Cary Clark682c58d2018-05-16 07:07:07 -04003540## <a name='Image_Filter_Methods'>Image Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003541
Cary Clark682c58d2018-05-16 07:07:07 -04003542<a href='undocumented#Image_Filter'>Image Filter</a> operates on the pixel representation of the shape, as modified by <a href='#Paint'>Paint</a>
Cary Clark224c7002018-06-27 11:00:21 -04003543with <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> set to <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>. <a href='undocumented#Image_Filter'>Image Filter</a> creates a new bitmap,
3544which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003545
Cary Clark682c58d2018-05-16 07:07:07 -04003546<a href='undocumented#Image_Filter'>Image Filter</a> is higher level than <a href='undocumented#Mask_Filter'>Mask Filter</a>; for instance, an <a href='undocumented#Image_Filter'>Image Filter</a>
3547can operate on all channels of <a href='SkColor_Reference#Color'>Color</a>, while <a href='undocumented#Mask_Filter'>Mask Filter</a> generates <a href='SkColor_Reference#Alpha'>Alpha</a> only.
3548<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
3549<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003550
3551### Example
3552
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003553<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003554
Cary Clark682c58d2018-05-16 07:07:07 -04003555<a name='SkPaint_getImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003556## getImageFilter
3557
Cary Clark682c58d2018-05-16 07:07:07 -04003558<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3559<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003560</pre>
3561
Cary Clark682c58d2018-05-16 07:07:07 -04003562Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
3563Does not alter <a href='undocumented#Image_Filter'>Image Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003564
3565### Return Value
3566
Cary Clark682c58d2018-05-16 07:07:07 -04003567<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003568
3569### Example
3570
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003571<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003572
3573#### Example Output
3574
3575~~~~
3576nullptr == image filter
3577nullptr != image filter
3578~~~~
3579
3580</fiddle-embed></div>
3581
3582---
3583
Cary Clark682c58d2018-05-16 07:07:07 -04003584<a name='SkPaint_refImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003585## refImageFilter
3586
Cary Clark682c58d2018-05-16 07:07:07 -04003587<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3588<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 -04003589</pre>
3590
Cary Clark682c58d2018-05-16 07:07:07 -04003591Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
3592Increases <a href='undocumented#Image_Filter'>Image Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003593
3594### Return Value
3595
Cary Clark682c58d2018-05-16 07:07:07 -04003596<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003597
3598### Example
3599
3600<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3601
3602#### Example Output
3603
3604~~~~
3605image filter unique: true
3606image filter unique: false
3607~~~~
3608
3609</fiddle-embed></div>
3610
3611---
3612
Cary Clark682c58d2018-05-16 07:07:07 -04003613<a name='SkPaint_setImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003614## setImageFilter
3615
Cary Clark682c58d2018-05-16 07:07:07 -04003616<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3617void <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 -04003618</pre>
3619
Cary Clark682c58d2018-05-16 07:07:07 -04003620Sets <a href='undocumented#Image_Filter'>Image Filter</a> to <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3621<a href='undocumented#Image_Filter'>Image Filter</a>. Pass nullptr to clear <a href='undocumented#Image_Filter'>Image Filter</a>, and remove <a href='undocumented#Image_Filter'>Image Filter</a> effect
Cary Clark12799e12017-07-28 15:18:29 -04003622on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003623
Cary Clark682c58d2018-05-16 07:07:07 -04003624Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003625
3626### Parameters
3627
Cary Clark682c58d2018-05-16 07:07:07 -04003628<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
3629 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003630 </tr>
3631</table>
3632
3633### Example
3634
3635<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3636
3637---
3638
Cary Clark682c58d2018-05-16 07:07:07 -04003639## <a name='Draw_Looper_Methods'>Draw Looper Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003640
Cary Clark682c58d2018-05-16 07:07:07 -04003641<a href='undocumented#Draw_Looper'>Draw Looper</a> sets a modifier that communicates state from one <a href='undocumented#Draw_Layer'>Draw Layer</a>
Cary Clark12799e12017-07-28 15:18:29 -04003642to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003643
Cary Clark682c58d2018-05-16 07:07:07 -04003644<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3645<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3646Set <a href='undocumented#Draw_Looper'>Draw Looper</a> to nullptr to prevent <a href='undocumented#Draw_Looper'>Draw Looper</a> from modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003647
3648### Example
3649
3650<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3651
Cary Clark682c58d2018-05-16 07:07:07 -04003652<a name='SkPaint_getDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003653## getDrawLooper
3654
Cary Clark682c58d2018-05-16 07:07:07 -04003655<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3656<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003657</pre>
3658
Cary Clark682c58d2018-05-16 07:07:07 -04003659Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
3660Does not alter <a href='undocumented#Draw_Looper'>Draw Looper</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003661
3662### Return Value
3663
Cary Clark682c58d2018-05-16 07:07:07 -04003664<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003665
3666### Example
3667
3668<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3669
3670#### Example Output
3671
3672~~~~
3673nullptr == draw looper
3674nullptr != draw looper
3675~~~~
3676
3677</fiddle-embed></div>
3678
3679---
3680
Cary Clark682c58d2018-05-16 07:07:07 -04003681<a name='SkPaint_refDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003682## refDrawLooper
3683
Cary Clark682c58d2018-05-16 07:07:07 -04003684<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3685<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 -04003686</pre>
3687
Cary Clark682c58d2018-05-16 07:07:07 -04003688Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
3689Increases <a href='undocumented#Draw_Looper'>Draw Looper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003690
3691### Return Value
3692
Cary Clark682c58d2018-05-16 07:07:07 -04003693<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003694
3695### Example
3696
3697<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3698
3699#### Example Output
3700
3701~~~~
3702draw looper unique: true
3703draw looper unique: false
3704~~~~
3705
3706</fiddle-embed></div>
3707
3708---
3709
Cary Clark682c58d2018-05-16 07:07:07 -04003710<a name='SkPaint_getLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003711## getLooper
3712
Cary Clark682c58d2018-05-16 07:07:07 -04003713<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3714<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003715</pre>
3716
Cary Clark682c58d2018-05-16 07:07:07 -04003717Deprecated.
3718
Cary Clark12799e12017-07-28 15:18:29 -04003719---
3720
Cary Clark682c58d2018-05-16 07:07:07 -04003721<a name='SkPaint_setDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003722## setDrawLooper
3723
Cary Clark682c58d2018-05-16 07:07:07 -04003724<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3725void <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 -04003726</pre>
3727
Cary Clark682c58d2018-05-16 07:07:07 -04003728Sets <a href='undocumented#Draw_Looper'>Draw Looper</a> to <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3729<a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>. Pass nullptr to clear <a href='undocumented#Draw_Looper'>Draw Looper</a> and leave <a href='undocumented#Draw_Looper'>Draw Looper</a> effect on
Cary Clark6fc50412017-09-21 12:31:06 -04003730drawing unaltered.
3731
Cary Clark682c58d2018-05-16 07:07:07 -04003732Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003733
3734### Parameters
3735
Cary Clark682c58d2018-05-16 07:07:07 -04003736<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
3737 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003738 </tr>
3739</table>
3740
3741### Example
3742
3743<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3744
3745---
3746
Cary Clark682c58d2018-05-16 07:07:07 -04003747<a name='SkPaint_setLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003748## setLooper
3749
Cary Clark682c58d2018-05-16 07:07:07 -04003750<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3751void <a href='#SkPaint_setLooper'>setLooper</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 -04003752</pre>
3753
Cary Clark682c58d2018-05-16 07:07:07 -04003754Deprecated.
3755
Cary Clark12799e12017-07-28 15:18:29 -04003756---
3757
Cary Clark682c58d2018-05-16 07:07:07 -04003758## <a name='Text_Align'>Text Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04003759
Cary Clark682c58d2018-05-16 07:07:07 -04003760## <a name='SkPaint_Align'>Enum SkPaint::Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04003761
Cary Clarka560c472017-11-27 10:44:06 -05003762<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003763 enum <a href='#SkPaint_Align'>Align</a> {
Cary Clark61313f32018-10-08 14:57:48 -04003764 <a href='#SkPaint_kLeft_Align'>kLeft_Align</a>,
3765 <a href='#SkPaint_kCenter_Align'>kCenter_Align</a>,
3766 <a href='#SkPaint_kRight_Align'>kRight_Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003767 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04003768
Cary Clark682c58d2018-05-16 07:07:07 -04003769 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05003770</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003771
Cary Clark682c58d2018-05-16 07:07:07 -04003772<a href='#SkPaint_Align'>Align</a> adjusts the text relative to the text position.
3773<a href='#SkPaint_Align'>Align</a> affects <a href='undocumented#Glyph'>Glyphs</a> drawn with: <a href='SkCanvas_Reference#SkCanvas_drawText'>SkCanvas::drawText</a>, <a href='SkCanvas_Reference#SkCanvas_drawPosText'>SkCanvas::drawPosText</a>,
Cary Clark153e76d2018-08-28 11:48:28 -04003774<a href='SkCanvas_Reference#SkCanvas_drawPosTextH'>SkCanvas::drawPosTextH</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextRSXform'>SkCanvas::drawTextRSXform</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextBlob'>SkCanvas::drawTextBlob</a>,
Cary Clark682c58d2018-05-16 07:07:07 -04003775and <a href='SkCanvas_Reference#SkCanvas_drawString'>SkCanvas::drawString</a>;
3776as well as calls that place text <a href='undocumented#Glyph'>Glyphs</a> like <a href='#SkPaint_getTextWidths'>getTextWidths</a> and <a href='#SkPaint_getTextPath'>getTextPath</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003777
3778The text position is set by the font for both horizontal and vertical text.
3779Typically, for horizontal text, the position is to the left side of the glyph on the
3780base line; and for vertical text, the position is the horizontal center of the glyph
3781at the caps height.
3782
Cary Clark682c58d2018-05-16 07:07:07 -04003783<a href='#SkPaint_Align'>Align</a> adjusts the glyph position to center it or move it to abut the position
Cary Clark12799e12017-07-28 15:18:29 -04003784using the metrics returned by the font.
3785
Cary Clark682c58d2018-05-16 07:07:07 -04003786<a href='#SkPaint_Align'>Align</a> defaults to <a href='#SkPaint_kLeft_Align'>kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003787
3788### Constants
3789
Cary Clark682c58d2018-05-16 07:07:07 -04003790<table style='border-collapse: collapse; width: 62.5em'>
3791 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3792<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3793<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3794 <tr style='background-color: #f0f0f0; '>
3795 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
3796 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3797 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3798Leaves the glyph at the position computed by the font offset by the text position.
Cary Clark1a8d7622018-03-05 13:26:16 -05003799</td>
Cary Clark12799e12017-07-28 15:18:29 -04003800 </tr>
3801 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003802 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
3803 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3804 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3805Moves the glyph half its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear, and
3806half its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
3807</td>
3808 </tr>
3809 <tr style='background-color: #f0f0f0; '>
3810 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
3811 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3812 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3813Moves the glyph by its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear,
3814and by its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
Cary Clark1a8d7622018-03-05 13:26:16 -05003815</td>
Cary Clark12799e12017-07-28 15:18:29 -04003816 </tr>
3817 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003818 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
3819 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3820 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04003821May be used to verify that <a href='#SkPaint_Align'>Align</a> is a legal value.
3822</td>
Cary Clark12799e12017-07-28 15:18:29 -04003823 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003824</table>
Cary Clark12799e12017-07-28 15:18:29 -04003825
3826### Example
3827
Cary Clark1a8d7622018-03-05 13:26:16 -05003828<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
3829</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003830
3831### Example
3832
Cary Clark682c58d2018-05-16 07:07:07 -04003833<div><fiddle-embed name="f1cbbbafe6b3c52b81309cccbf96a308"><div><a href='#Vertical_Text'>Vertical Text</a> treats <a href='#SkPaint_kLeft_Align'>kLeft Align</a> as top align, and <a href='#SkPaint_kRight_Align'>kRight Align</a> as bottom align.
Cary Clark1a8d7622018-03-05 13:26:16 -05003834</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003835
Cary Clark682c58d2018-05-16 07:07:07 -04003836<a name='SkPaint_getTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003837## getTextAlign
3838
Cary Clark682c58d2018-05-16 07:07:07 -04003839<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3840<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003841</pre>
3842
Cary Clark682c58d2018-05-16 07:07:07 -04003843Returns <a href='#Text_Align'>Text Align</a>.
3844Returns <a href='#SkPaint_kLeft_Align'>kLeft Align</a> if <a href='#Text_Align'>Text Align</a> has not been set.
Cary Clark12799e12017-07-28 15:18:29 -04003845
3846### Return Value
3847
3848text placement relative to position
3849
3850### Example
3851
3852<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3853
3854#### Example Output
3855
3856~~~~
3857kLeft_Align == default
3858~~~~
3859
3860</fiddle-embed></div>
3861
3862---
3863
Cary Clark682c58d2018-05-16 07:07:07 -04003864<a name='SkPaint_setTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003865## setTextAlign
3866
Cary Clark682c58d2018-05-16 07:07:07 -04003867<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3868void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04003869</pre>
3870
Cary Clark682c58d2018-05-16 07:07:07 -04003871Sets <a href='#Text_Align'>Text Align</a> to <a href='#SkPaint_setTextAlign_align'>align</a>.
3872Has no effect if <a href='#SkPaint_setTextAlign_align'>align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003873
3874### Parameters
3875
Cary Clark682c58d2018-05-16 07:07:07 -04003876<table> <tr> <td><a name='SkPaint_setTextAlign_align'><code><strong>align</strong></code></a></td>
3877 <td>text placement relative to position</td>
Cary Clark12799e12017-07-28 15:18:29 -04003878 </tr>
3879</table>
3880
3881### Example
3882
Cary Clark682c58d2018-05-16 07:07:07 -04003883<div><fiddle-embed name="d37540afd918506ac2594665ca63979b"><div><a href='undocumented#Text'>Text</a> is left-aligned by default, and then set to center. Setting the
Cary Clark1a8d7622018-03-05 13:26:16 -05003884alignment out of range has no effect.
3885</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003886
3887---
3888
Cary Clark682c58d2018-05-16 07:07:07 -04003889## <a name='Text_Size'>Text Size</a>
Cary Clark08895c42018-02-01 09:37:32 -05003890
Cary Clark682c58d2018-05-16 07:07:07 -04003891<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
3892<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
3893<a href='#Text_Size'>Text Size</a> defaults to 12.
3894Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003895
3896### Example
3897
3898<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3899
Cary Clark682c58d2018-05-16 07:07:07 -04003900<a name='SkPaint_getTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003901## getTextSize
3902
Cary Clark682c58d2018-05-16 07:07:07 -04003903<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3904<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003905</pre>
3906
Cary Clark682c58d2018-05-16 07:07:07 -04003907Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003908
3909### Return Value
3910
3911typographic height of text
3912
3913### Example
3914
skia-bookmaker233c6522018-07-04 05:33:26 +00003915<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003916
3917---
3918
Cary Clark682c58d2018-05-16 07:07:07 -04003919<a name='SkPaint_setTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003920## setTextSize
3921
Cary Clark682c58d2018-05-16 07:07:07 -04003922<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3923void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003924</pre>
3925
Cary Clark682c58d2018-05-16 07:07:07 -04003926Sets <a href='#Text_Size'>Text Size</a> in points.
3927Has 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 -04003928
3929### Parameters
3930
Cary Clark682c58d2018-05-16 07:07:07 -04003931<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
3932 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04003933 </tr>
3934</table>
3935
3936### Example
3937
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003938<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003939
3940---
3941
Cary Clark682c58d2018-05-16 07:07:07 -04003942## <a name='Text_Scale_X'>Text Scale X</a>
Cary Clark08895c42018-02-01 09:37:32 -05003943
Cary Clark682c58d2018-05-16 07:07:07 -04003944<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
3945<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003946is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003947<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
3948<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003949
3950### Example
3951
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003952<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003953
Cary Clark682c58d2018-05-16 07:07:07 -04003954<a name='SkPaint_getTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003955## getTextScaleX
3956
Cary Clark682c58d2018-05-16 07:07:07 -04003957<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3958<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003959</pre>
3960
Cary Clark682c58d2018-05-16 07:07:07 -04003961Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003962Default value is 1.
3963
3964### Return Value
3965
3966text horizontal scale
3967
3968### Example
3969
3970<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3971
3972---
3973
Cary Clark682c58d2018-05-16 07:07:07 -04003974<a name='SkPaint_setTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003975## setTextScaleX
3976
Cary Clark682c58d2018-05-16 07:07:07 -04003977<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3978void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003979</pre>
3980
Cary Clark682c58d2018-05-16 07:07:07 -04003981Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003982Default value is 1.
3983
3984### Parameters
3985
Cary Clark682c58d2018-05-16 07:07:07 -04003986<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
3987 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003988 </tr>
3989</table>
3990
3991### Example
3992
3993<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3994
3995---
3996
Cary Clark682c58d2018-05-16 07:07:07 -04003997## <a name='Text_Skew_X'>Text Skew X</a>
Cary Clark08895c42018-02-01 09:37:32 -05003998
Cary Clark682c58d2018-05-16 07:07:07 -04003999<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
4000<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004001is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004002<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
4003<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04004004
4005### Example
4006
4007<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
4008
Cary Clark682c58d2018-05-16 07:07:07 -04004009<a name='SkPaint_getTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004010## getTextSkewX
4011
Cary Clark682c58d2018-05-16 07:07:07 -04004012<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4013<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004014</pre>
4015
Cary Clark682c58d2018-05-16 07:07:07 -04004016Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004017Default value is zero.
4018
4019### Return Value
4020
4021additional shear in x-axis relative to y-axis
4022
4023### Example
4024
Cary Clark7f644ec2018-07-19 10:50:44 -04004025<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004026
4027---
4028
Cary Clark682c58d2018-05-16 07:07:07 -04004029<a name='SkPaint_setTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004030## setTextSkewX
4031
Cary Clark682c58d2018-05-16 07:07:07 -04004032<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4033void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04004034</pre>
4035
Cary Clark682c58d2018-05-16 07:07:07 -04004036Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004037Default value is zero.
4038
4039### Parameters
4040
Cary Clark682c58d2018-05-16 07:07:07 -04004041<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
4042 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04004043 </tr>
4044</table>
4045
4046### Example
4047
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004048<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004049
4050---
4051
Cary Clark682c58d2018-05-16 07:07:07 -04004052## <a name='Text_Encoding'>Text Encoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004053
Cary Clark682c58d2018-05-16 07:07:07 -04004054## <a name='SkPaint_TextEncoding'>Enum SkPaint::TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004055
Cary Clarka560c472017-11-27 10:44:06 -05004056<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004057 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004058 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
4059 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
4060 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
4061 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004062 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004063</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004064
Cary Clark682c58d2018-05-16 07:07:07 -04004065<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
4066size, or glyph indices. Characters are encoded as specified by the <a href='https://unicode.org/standard/standard.html'>Unicode standard</a></a> .
Cary Clark6fc50412017-09-21 12:31:06 -04004067
Cary Clarka560c472017-11-27 10:44:06 -05004068Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004069All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04004070in the total storage required.
4071
Cary Clark682c58d2018-05-16 07:07:07 -04004072<a href='https://tools.ietf.org/html/rfc3629'>UTF-8 (RFC 3629)</a></a> encodes each character as one or more 8-bit bytes.
Cary Clark6fc50412017-09-21 12:31:06 -04004073
Cary Clark682c58d2018-05-16 07:07:07 -04004074<a href='https://tools.ietf.org/html/rfc2781'>UTF-16 (RFC 2781)</a></a> encodes each character as one or two 16-bit words.
Cary Clark6fc50412017-09-21 12:31:06 -04004075
Cary Clark682c58d2018-05-16 07:07:07 -04004076<a href='https://www.unicode.org/versions/Unicode5.0.0/ch03.pdf'>UTF-32</a></a> encodes each character as one 32-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04004077
Cary Clark682c58d2018-05-16 07:07:07 -04004078<a href='undocumented#Font_Manager'>Font Manager</a> uses font data to convert character code points into glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004079A glyph index is a 16-bit word.
4080
Cary Clark682c58d2018-05-16 07:07:07 -04004081<a href='#SkPaint_TextEncoding'>TextEncoding</a> is set to <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04004082
4083### Constants
4084
Cary Clark682c58d2018-05-16 07:07:07 -04004085<table style='border-collapse: collapse; width: 62.5em'>
4086 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4087<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4088<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4089 <tr style='background-color: #f0f0f0; '>
4090 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
4091 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4092 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4093uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04004094 </tr>
4095 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004096 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
4097 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4098 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4099uses two byte words to represent most of Unicode</td>
4100 </tr>
4101 <tr style='background-color: #f0f0f0; '>
4102 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
4103 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4104 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4105uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04004106 </tr>
4107 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004108 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
4109 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4110 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4111uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04004112 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004113</table>
Cary Clark12799e12017-07-28 15:18:29 -04004114
4115### Example
4116
Cary Clarka560c472017-11-27 10:44:06 -05004117<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4118Second line is encoded in UTF-16.
4119Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04004120Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05004121</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004122
Cary Clark682c58d2018-05-16 07:07:07 -04004123<a name='SkPaint_getTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004124## getTextEncoding
4125
Cary Clark682c58d2018-05-16 07:07:07 -04004126<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4127<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004128</pre>
4129
Cary Clark682c58d2018-05-16 07:07:07 -04004130Returns <a href='#Text_Encoding'>Text Encoding</a>.
4131<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004132
4133### Return Value
4134
Cary Clark682c58d2018-05-16 07:07:07 -04004135one of: <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>, <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>, <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>, or
4136<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004137
4138### Example
4139
skia-bookmaker525f9a92018-05-03 06:27:39 +00004140<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04004141
4142#### Example Output
4143
4144~~~~
4145kUTF8_TextEncoding == text encoding
4146kGlyphID_TextEncoding == text encoding
4147~~~~
4148
4149</fiddle-embed></div>
4150
4151---
4152
Cary Clark682c58d2018-05-16 07:07:07 -04004153<a name='SkPaint_setTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004154## setTextEncoding
4155
Cary Clark682c58d2018-05-16 07:07:07 -04004156<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4157void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004158</pre>
4159
Cary Clark682c58d2018-05-16 07:07:07 -04004160Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4161<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4162Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004163
4164### Parameters
4165
Cary Clark682c58d2018-05-16 07:07:07 -04004166<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4167 <td>one of: <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>, <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>, <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>, or
4168<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004169 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004170#
4171
Cary Clark12799e12017-07-28 15:18:29 -04004172</table>
4173
4174### Example
4175
Cary Clark75fd4492018-06-20 12:45:16 -04004176<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004177
4178#### Example Output
4179
4180~~~~
41814 != text encoding
4182~~~~
4183
4184</fiddle-embed></div>
4185
4186---
4187
Cary Clark682c58d2018-05-16 07:07:07 -04004188## <a name='Font_Metrics'>Font Metrics</a>
Cary Clark08895c42018-02-01 09:37:32 -05004189
Cary Clark682c58d2018-05-16 07:07:07 -04004190<a href='#Font_Metrics'>Font Metrics</a> describe dimensions common to the <a href='undocumented#Glyph'>Glyphs</a> in <a href='undocumented#Typeface'>Typeface</a>.
4191The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4192<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004193
Cary Clark682c58d2018-05-16 07:07:07 -04004194<a href='undocumented#Font'>Font</a> dimensions specify the anchor to the left of the glyph at baseline as the origin.
Cary Clark12799e12017-07-28 15:18:29 -04004195X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4196are positive.
4197Y-axis values above the baseline are negative, and below the baseline are positive.
4198
4199### Example
4200
Ben Wagnere5806492017-11-09 12:08:31 -05004201<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004202
Cary Clark61313f32018-10-08 14:57:48 -04004203<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04004204
Cary Clarka560c472017-11-27 10:44:06 -05004205<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004206 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4207 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004208 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4209 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4210 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4211 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004212 };
Cary Clark12799e12017-07-28 15:18:29 -04004213
Cary Clark682c58d2018-05-16 07:07:07 -04004214 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4215 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4216 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4217 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4218 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4219 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4220 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4221 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4222 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4223 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4224 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4225 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4226 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4227 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4228 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4229 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004230
Cary Clark61313f32018-10-08 14:57:48 -04004231 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4232 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
4233 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4234 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
Cary Clark186d08f2018-04-03 08:43:27 -04004235 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004236</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004237
Cary Clark682c58d2018-05-16 07:07:07 -04004238<a href='#SkPaint_FontMetrics'>FontMetrics</a> is filled out by <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>. <a href='#SkPaint_FontMetrics'>FontMetrics</a> contents reflect the values
4239computed by <a href='undocumented#Font_Manager'>Font Manager</a> using <a href='undocumented#Typeface'>Typeface</a>. Values are set to zero if they are
Cary Clark154beea2017-10-26 07:58:48 -04004240not available.
4241
Cary Clark5538c132018-06-14 12:28:14 -04004242All vertical values are relative to the baseline, on a y-axis pointing down.
4243Zero is on the baseline, negative values are above the baseline, and positive
4244values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05004245
Cary Clark682c58d2018-05-16 07:07:07 -04004246<a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> and <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> have a bit set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a> if their values
Cary Clark154beea2017-10-26 07:58:48 -04004247are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004248
Cary Clark682c58d2018-05-16 07:07:07 -04004249<a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> and <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> have a bit set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a> if their values
Cary Clark154beea2017-10-26 07:58:48 -04004250are valid, since their value may be zero.
4251
Cary Clark682c58d2018-05-16 07:07:07 -04004252## <a name='SkPaint_FontMetrics_FontMetricsFlags'>Enum SkPaint::FontMetrics::FontMetricsFlags</a>
Cary Clark12799e12017-07-28 15:18:29 -04004253
Cary Clarka560c472017-11-27 10:44:06 -05004254<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004255 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004256 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4257 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4258 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4259 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004260 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004261</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004262
Cary Clark682c58d2018-05-16 07:07:07 -04004263<a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> are set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a> when underline and strikeout metrics are valid;
Cary Clark154beea2017-10-26 07:58:48 -04004264the underline or strikeout metric may be valid and zero.
4265Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4266
Cary Clark12799e12017-07-28 15:18:29 -04004267### Constants
4268
Cary Clark682c58d2018-05-16 07:07:07 -04004269<table style='border-collapse: collapse; width: 62.5em'>
4270 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4271<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4272<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4273 <tr style='background-color: #f0f0f0; '>
4274 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'><code>SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag</code></a></td>
4275 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4276 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4277set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004278 </tr>
4279 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004280 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'><code>SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag</code></a></td>
4281 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4282 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4283set if fUnderlinePosition is valid</td>
4284 </tr>
4285 <tr style='background-color: #f0f0f0; '>
4286 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'><code>SkPaint::FontMetrics::kStrikeoutThicknessIsValid_Flag</code></a></td>
4287 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4288 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4289set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004290 </tr>
4291 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004292 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'><code>SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag</code></a></td>
4293 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4294 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4295set if fStrikeoutPosition is valid</td>
4296 </tr>
Cary Clark61313f32018-10-08 14:57:48 -04004297</table><table style='border-collapse: collapse; width: 62.5em'>
Cary Clark682c58d2018-05-16 07:07:07 -04004298
Cary Clark682c58d2018-05-16 07:07:07 -04004299 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
Cary Clark61313f32018-10-08 14:57:48 -04004300<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Member</th>
Cary Clark682c58d2018-05-16 07:07:07 -04004301<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4302 <tr style='background-color: #f0f0f0; '>
4303 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
4304 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
4305 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4306is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004307 </tr>
4308 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004309 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4310 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
4311 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004312Greatest extent above the baseline for any glyph.
4313Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004314</td>
4315 </tr>
4316 <tr style='background-color: #f0f0f0; '>
4317 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4318 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
4319 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004320Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004321Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004322</td>
4323 </tr>
4324 <tr>
4325 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4326 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
4327 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004328Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004329Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004330</td>
4331 </tr>
4332 <tr style='background-color: #f0f0f0; '>
4333 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4334 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
4335 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004336Greatest extent below the baseline for any glyph.
4337Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004338</td>
4339 </tr>
4340 <tr>
4341 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4342 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
4343 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004344Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004345Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004346</td>
4347 </tr>
4348 <tr style='background-color: #f0f0f0; '>
4349 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4350 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
4351 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004352Average character width, if it is available.
4353Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004354</td>
4355 </tr>
4356 <tr>
4357 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4358 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
4359 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4360maximum character width</td>
4361 </tr>
4362 <tr style='background-color: #f0f0f0; '>
4363 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4364 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
4365 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004366Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004367Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004368</td>
4369 </tr>
4370 <tr>
4371 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4372 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
4373 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004374Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004375Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004376</td>
4377 </tr>
4378 <tr style='background-color: #f0f0f0; '>
4379 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4380 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
4381 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004382May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004383</td>
4384 </tr>
4385 <tr>
4386 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4387 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
4388 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004389May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004390</td>
4391 </tr>
4392 <tr style='background-color: #f0f0f0; '>
4393 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4394 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
4395 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4396If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4397If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
4398</td>
4399 </tr>
4400 <tr>
4401 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4402 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
4403 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004404Position of the top of the underline stroke relative to the baseline.
4405Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004406
Cary Clark682c58d2018-05-16 07:07:07 -04004407If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4408If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
4409</td>
4410 </tr>
4411 <tr style='background-color: #f0f0f0; '>
4412 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4413 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
4414 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4415If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4416If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
4417</td>
4418 </tr>
4419 <tr>
4420 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4421 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
4422 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004423Position of the bottom of the strikeout stroke relative to the baseline.
4424Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004425
Cary Clark682c58d2018-05-16 07:07:07 -04004426If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4427If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
4428</td>
4429 </tr>
4430</table>
Cary Clark12799e12017-07-28 15:18:29 -04004431
Cary Clark682c58d2018-05-16 07:07:07 -04004432<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004433## hasUnderlineThickness
4434
Cary Clark682c58d2018-05-16 07:07:07 -04004435<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4436bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004437</pre>
4438
Cary Clark80247e52018-07-11 16:18:41 -04004439Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004440<a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a> to that value. If the underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a> is not valid,
4441return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004442
4443### Parameters
4444
Cary Clark682c58d2018-05-16 07:07:07 -04004445<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
4446 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004447 </tr>
4448</table>
4449
4450### Return Value
4451
4452true if font specifies underline width
4453
4454---
4455
Cary Clark682c58d2018-05-16 07:07:07 -04004456<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004457## hasUnderlinePosition
4458
Cary Clark682c58d2018-05-16 07:07:07 -04004459<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4460bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004461</pre>
4462
Cary Clark80247e52018-07-11 16:18:41 -04004463Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004464<a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a> to that value. If the underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a> is not valid,
4465return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004466
4467### Parameters
4468
Cary Clark682c58d2018-05-16 07:07:07 -04004469<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
4470 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004471 </tr>
4472</table>
4473
4474### Return Value
4475
Cary Clark682c58d2018-05-16 07:07:07 -04004476true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004477
4478---
4479
Cary Clark682c58d2018-05-16 07:07:07 -04004480<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004481## hasStrikeoutThickness
4482
Cary Clark682c58d2018-05-16 07:07:07 -04004483<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4484bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004485</pre>
4486
Cary Clark80247e52018-07-11 16:18:41 -04004487Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004488<a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a> to that value. If the underline <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a> is not valid,
4489return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004490
4491### Parameters
4492
Cary Clark682c58d2018-05-16 07:07:07 -04004493<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
4494 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004495 </tr>
4496</table>
4497
4498### Return Value
4499
4500true if font specifies strikeout width
4501
4502---
4503
Cary Clark682c58d2018-05-16 07:07:07 -04004504<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004505## hasStrikeoutPosition
4506
Cary Clark682c58d2018-05-16 07:07:07 -04004507<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4508bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004509</pre>
4510
Cary Clark80247e52018-07-11 16:18:41 -04004511Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004512<a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a> to that value. If the underline <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a> is not valid,
4513return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004514
4515### Parameters
4516
Cary Clark682c58d2018-05-16 07:07:07 -04004517<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
4518 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004519 </tr>
4520</table>
4521
4522### Return Value
4523
Cary Clark682c58d2018-05-16 07:07:07 -04004524true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004525
4526---
4527
Cary Clark682c58d2018-05-16 07:07:07 -04004528<a name='SkPaint_getFontMetrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004529## getFontMetrics
4530
Cary Clark682c58d2018-05-16 07:07:07 -04004531<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4532<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='#SkPaint_FontMetrics'>FontMetrics</a>* metrics, <a href='undocumented#SkScalar'>SkScalar</a> scale = 0) const
Cary Clark12799e12017-07-28 15:18:29 -04004533</pre>
4534
Cary Clark682c58d2018-05-16 07:07:07 -04004535Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
4536The return value is the recommended spacing between lines: the sum of <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>
Cary Clark12799e12017-07-28 15:18:29 -04004537descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004538If <a href='#SkPaint_getFontMetrics_metrics'>metrics</a> is not nullptr, <a href='#Font_Metrics'>Font Metrics</a> is copied to <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>.
4539Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4540dimensions 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>,
4541<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
4542Results can be additionally scaled by <a href='#SkPaint_getFontMetrics_scale'>scale</a>; a <a href='#SkPaint_getFontMetrics_scale'>scale</a> of zero
Cary Clark12799e12017-07-28 15:18:29 -04004543is ignored.
4544
4545### Parameters
4546
Cary Clark682c58d2018-05-16 07:07:07 -04004547<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
4548 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
4549 </tr>
4550 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
4551 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04004552 </tr>
4553</table>
4554
4555### Return Value
4556
4557recommended spacing between lines
4558
4559### Example
4560
4561<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4562
4563### See Also
4564
Cary Clark682c58d2018-05-16 07:07:07 -04004565<a href='#Text_Size'>Text Size</a> <a href='undocumented#Typeface'>Typeface</a> <a href='#Typeface_Methods'>Typeface Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04004566
4567---
4568
Cary Clark682c58d2018-05-16 07:07:07 -04004569<a name='SkPaint_getFontSpacing'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004570## getFontSpacing
4571
Cary Clark682c58d2018-05-16 07:07:07 -04004572<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4573<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004574</pre>
4575
4576Returns the recommended spacing between lines: the sum of metrics
4577descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004578Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4579dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
4580Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004581
4582### Return Value
4583
4584recommended spacing between lines
4585
4586### Example
4587
4588<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4589
4590#### Example Output
4591
4592~~~~
4593textSize: 12 fontSpacing: 13.9688
4594textSize: 18 fontSpacing: 20.9531
4595textSize: 24 fontSpacing: 27.9375
4596textSize: 32 fontSpacing: 37.25
4597~~~~
4598
4599</fiddle-embed></div>
4600
4601---
4602
Cary Clark682c58d2018-05-16 07:07:07 -04004603<a name='SkPaint_getFontBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004604## getFontBounds
4605
Cary Clark682c58d2018-05-16 07:07:07 -04004606<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4607<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004608</pre>
4609
Cary Clark682c58d2018-05-16 07:07:07 -04004610Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
4611Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
4612ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
4613and <a href='#Text_Skew_X'>Text Skew X</a>, but not <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004614
Cary Clark682c58d2018-05-16 07:07:07 -04004615If <a href='#Text_Size'>Text Size</a> is large, <a href='#Text_Scale_X'>Text Scale X</a> is one, and <a href='#Text_Skew_X'>Text Skew X</a> is zero,
4616returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
4617<a href='#SkPaint_FontMetrics_fTop'>FontMetrics::fTop</a>, <a href='#SkPaint_FontMetrics_fXMax'>FontMetrics::fXMax</a>, <a href='#SkPaint_FontMetrics_fBottom'>FontMetrics::fBottom</a> }.
Cary Clark12799e12017-07-28 15:18:29 -04004618
4619### Return Value
4620
Cary Clark682c58d2018-05-16 07:07:07 -04004621union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004622
4623### Example
4624
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004625<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
Cary Clark12799e12017-07-28 15:18:29 -04004626
4627#### Example Output
4628
4629~~~~
4630metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4631font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4632~~~~
4633
4634</fiddle-embed></div>
4635
4636---
4637
Cary Clark682c58d2018-05-16 07:07:07 -04004638<a name='SkPaint_textToGlyphs'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004639## textToGlyphs
4640
Cary Clark682c58d2018-05-16 07:07:07 -04004641<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4642int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* text, size_t byteLength, <a href='undocumented#SkGlyphID'>SkGlyphID</a> glyphs[]) const
Cary Clark12799e12017-07-28 15:18:29 -04004643</pre>
4644
Cary Clark682c58d2018-05-16 07:07:07 -04004645Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
4646Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
4647<a href='#Text_Encoding'>Text Encoding</a> specifies how <a href='#SkPaint_textToGlyphs_text'>text</a> represents characters or <a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a>.
4648<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004649
Cary Clark682c58d2018-05-16 07:07:07 -04004650Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004651
Cary Clark682c58d2018-05-16 07:07:07 -04004652If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
4653If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004654
Cary Clark682c58d2018-05-16 07:07:07 -04004655If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
4656<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004657
4658### Parameters
4659
Cary Clark682c58d2018-05-16 07:07:07 -04004660<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
4661 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4662 </tr>
4663 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
4664 <td>length of character storage in bytes</td>
4665 </tr>
4666 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
4667 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004668 </tr>
4669</table>
4670
4671### Return Value
4672
Cary Clark682c58d2018-05-16 07:07:07 -04004673number 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 -04004674
4675### Example
4676
4677<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4678
4679---
4680
Cary Clark682c58d2018-05-16 07:07:07 -04004681<a name='SkPaint_countText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004682## countText
4683
Cary Clark682c58d2018-05-16 07:07:07 -04004684<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4685int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004686</pre>
4687
Cary Clark682c58d2018-05-16 07:07:07 -04004688Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
4689Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
4690Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004691
4692### Parameters
4693
Cary Clark682c58d2018-05-16 07:07:07 -04004694<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
4695 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4696 </tr>
4697 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
4698 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04004699 </tr>
4700</table>
4701
4702### Return Value
4703
Cary Clark682c58d2018-05-16 07:07:07 -04004704number 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 -04004705
4706### Example
4707
Cary Clarkf9603982018-07-17 08:20:27 -04004708<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04004709
4710#### Example Output
4711
4712~~~~
4713count = 5
4714~~~~
4715
4716</fiddle-embed></div>
4717
4718---
4719
Cary Clark682c58d2018-05-16 07:07:07 -04004720<a name='SkPaint_containsText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004721## containsText
4722
Cary Clark682c58d2018-05-16 07:07:07 -04004723<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4724bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004725</pre>
4726
Cary Clark682c58d2018-05-16 07:07:07 -04004727Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
4728Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
4729<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004730
Cary Clark682c58d2018-05-16 07:07:07 -04004731If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
4732returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
4733does not check to see if <a href='#SkPaint_containsText_text'>text</a> contains valid glyph indices for <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004734
Cary Clark682c58d2018-05-16 07:07:07 -04004735Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004736
4737### Parameters
4738
Cary Clark682c58d2018-05-16 07:07:07 -04004739<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
4740 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
4741 </tr>
4742 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
4743 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004744 </tr>
4745</table>
4746
4747### Return Value
4748
Cary Clark682c58d2018-05-16 07:07:07 -04004749true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004750
Ruiqi Mao94d57c42018-07-02 15:20:10 -04004751<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05004752corresponding to the Unicode surrogate code point.
4753</div>
Cary Clark12799e12017-07-28 15:18:29 -04004754
4755#### Example Output
4756
4757~~~~
47580x00b0 == has char
47590xd800 != has char
4760~~~~
4761
Cary Clark12799e12017-07-28 15:18:29 -04004762### Example
4763
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004764<div><fiddle-embed name="083557b6f653d6fc00a34e01f87b74ff"><div><a href='#SkPaint_containsText'>containsText</a> returns true that glyph index is greater than zero, not
Cary Clark682c58d2018-05-16 07:07:07 -04004765that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004766</div>
Cary Clark12799e12017-07-28 15:18:29 -04004767
4768#### Example Output
4769
4770~~~~
47710x01ff == has glyph
47720x0000 != has glyph
47730xffff == has glyph
4774~~~~
4775
4776</fiddle-embed></div>
4777
4778### See Also
4779
Cary Clark682c58d2018-05-16 07:07:07 -04004780<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004781
4782---
4783
Cary Clark682c58d2018-05-16 07:07:07 -04004784<a name='SkPaint_glyphsToUnichars'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004785## glyphsToUnichars
4786
Cary Clark682c58d2018-05-16 07:07:07 -04004787<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4788void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> glyphs[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> text[]) const
Cary Clark12799e12017-07-28 15:18:29 -04004789</pre>
4790
Cary Clark682c58d2018-05-16 07:07:07 -04004791Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
4792<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
4793Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
4794by <a href='#Text_Encoding'>Text Encoding</a>; the <a href='#SkPaint_glyphsToUnichars_text'>text</a> values returned are equivalent to <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004795
Cary Clark682c58d2018-05-16 07:07:07 -04004796Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004797
4798### Parameters
4799
Cary Clark682c58d2018-05-16 07:07:07 -04004800<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
4801 <td>array of indices into font</td>
4802 </tr>
4803 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
4804 <td>length of glyph array</td>
4805 </tr>
4806 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
4807 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04004808 </tr>
4809</table>
4810
4811### Example
4812
skia-bookmakerb95bbba2018-07-06 05:23:23 +00004813<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert UTF-8 <a href='#SkPaint_glyphsToUnichars_text'>text</a> to <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a>; then convert <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> to Unichar code points.
Cary Clark1a8d7622018-03-05 13:26:16 -05004814</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004815
4816---
4817
Cary Clark682c58d2018-05-16 07:07:07 -04004818## <a name='Measure_Text'>Measure Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004819
Cary Clark682c58d2018-05-16 07:07:07 -04004820<a name='SkPaint_measureText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004821## measureText
4822
Cary Clark682c58d2018-05-16 07:07:07 -04004823<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4824<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* text, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const
Cary Clark12799e12017-07-28 15:18:29 -04004825</pre>
4826
Cary Clark682c58d2018-05-16 07:07:07 -04004827Returns the advance width of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
4828and the height of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
4829The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
4830Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_measureText_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the font metrics,
4831and <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
4832<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
4833Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
4834The 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 -04004835
4836### Parameters
4837
Cary Clark682c58d2018-05-16 07:07:07 -04004838<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
4839 <td>character codes or glyph indices to be measured</td>
4840 </tr>
4841 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
4842 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
4843 </tr>
4844 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
4845 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004846 </tr>
4847</table>
4848
4849### Return Value
4850
4851advance width or height
4852
4853### Example
4854
Cary Clark83647062018-07-18 16:21:51 -04004855<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004856
4857---
4858
Cary Clark682c58d2018-05-16 07:07:07 -04004859<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05004860
Cary Clark682c58d2018-05-16 07:07:07 -04004861<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4862<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* text, size_t length) const
Cary Clark12799e12017-07-28 15:18:29 -04004863</pre>
4864
Cary Clark682c58d2018-05-16 07:07:07 -04004865Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
4866and the height of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
4867The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
4868Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_measureText_2_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the font metrics,
4869and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4870Does not scale the advance or bounds by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004871
4872### Parameters
4873
Cary Clark682c58d2018-05-16 07:07:07 -04004874<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
4875 <td>character codes or glyph indices to be measured</td>
4876 </tr>
4877 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
4878 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004879 </tr>
4880</table>
4881
4882### Return Value
4883
4884advance width or height
4885
4886### Example
4887
4888<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4889
4890#### Example Output
4891
4892~~~~
4893default width = 5
4894double width = 10
4895~~~~
4896
4897</fiddle-embed></div>
4898
4899---
4900
Cary Clark682c58d2018-05-16 07:07:07 -04004901<a name='SkPaint_breakText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004902## breakText
4903
Cary Clark682c58d2018-05-16 07:07:07 -04004904<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4905size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
4906 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004907</pre>
4908
Cary Clark682c58d2018-05-16 07:07:07 -04004909Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4910If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, the <a href='#SkPaint_breakText_text'>text</a> fragment fits if its advance width is less than or
4911equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4912If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, the <a href='#SkPaint_breakText_text'>text</a> fragment fits if its advance height is less than or
4913equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4914Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4915Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
4916Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_breakText_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the font metrics,
4917and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4918Does not scale the advance or bounds by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004919
4920### Parameters
4921
Cary Clark682c58d2018-05-16 07:07:07 -04004922<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
4923 <td>character codes or glyph indices to be measured</td>
4924 </tr>
4925 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
4926 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
4927 </tr>
4928 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
4929 <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>
4930 </tr>
4931 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
4932 <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 -04004933 </tr>
4934</table>
4935
4936### Return Value
4937
Cary Clark682c58d2018-05-16 07:07:07 -04004938bytes 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 -04004939
4940### Example
4941
Cary Clark682c58d2018-05-16 07:07:07 -04004942<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
4943<a href='undocumented#Line'>Line</a> under "" shows measured width after breaking <a href='#SkPaint_breakText_text'>text</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004944</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004945
4946---
4947
Cary Clark682c58d2018-05-16 07:07:07 -04004948<a name='SkPaint_getTextWidths'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004949## getTextWidths
4950
Cary Clark682c58d2018-05-16 07:07:07 -04004951<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4952int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* text, 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 -04004953</pre>
4954
Cary Clark682c58d2018-05-16 07:07:07 -04004955Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
4956the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4957Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4958If <a href='#SkPaint_getTextWidths_widths'>widths</a> is not nullptr, <a href='#SkPaint_getTextWidths_widths'>widths</a> must be an array of glyph count entries.
4959if <a href='#SkPaint_getTextWidths_bounds'>bounds</a> is not nullptr, <a href='#SkPaint_getTextWidths_bounds'>bounds</a> must be an array of glyph count entries.
4960If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the horizontal advance.
4961If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the vertical advance.
4962Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getTextWidths_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the font metrics,
4963and <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>.
4964Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
4965Does include <a href='#Fake_Bold'>Fake Bold</a> and <a href='undocumented#Path_Effect'>Path Effect</a> in the <a href='#SkPaint_getTextWidths_bounds'>bounds</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004966
4967### Parameters
4968
Cary Clark682c58d2018-05-16 07:07:07 -04004969<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
4970 <td>character codes or glyph indices to be measured</td>
4971 </tr>
4972 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
4973 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
4974 </tr>
4975 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
4976 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
4977 </tr>
4978 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
4979 <td>returns <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph relative to (0, 0); may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004980 </tr>
4981</table>
4982
4983### Return Value
4984
Cary Clark682c58d2018-05-16 07:07:07 -04004985glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004986
4987### Example
4988
Cary Clarkf9603982018-07-17 08:20:27 -04004989<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href='undocumented#Glyph'>Glyphs</a> increase for stroked <a href='#SkPaint_getTextWidths_text'>text</a>, but <a href='#SkPaint_getTextWidths_text'>text</a> advance remains the same.
Cary Clark682c58d2018-05-16 07:07:07 -04004990The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004991</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004992
4993---
4994
Cary Clark682c58d2018-05-16 07:07:07 -04004995## <a name='Text_Path'>Text Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05004996
Cary Clark682c58d2018-05-16 07:07:07 -04004997<a href='#Text_Path'>Text Path</a> describes the geometry of <a href='undocumented#Glyph'>Glyphs</a> used to draw text.
Cary Clark12799e12017-07-28 15:18:29 -04004998
Cary Clark682c58d2018-05-16 07:07:07 -04004999<a name='SkPaint_getTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005000## getTextPath
5001
Cary Clark682c58d2018-05-16 07:07:07 -04005002<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5003void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y, <a href='SkPath_Reference#SkPath'>SkPath</a>* path) const
Cary Clark12799e12017-07-28 15:18:29 -04005004</pre>
5005
Cary Clark682c58d2018-05-16 07:07:07 -04005006Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
5007Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getTextPath_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5008and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5009All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
5010Uses <a href='#SkPaint_getTextPath_x'>x</a>, <a href='#SkPaint_getTextPath_y'>y</a>, and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getTextPath_path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005011
5012### Parameters
5013
Cary Clark682c58d2018-05-16 07:07:07 -04005014<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
5015 <td>character codes or glyph indices</td>
5016 </tr>
5017 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
5018 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
5019 </tr>
5020 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005021 <td><a href='#SkPaint_getTextPath_x'>x</a>-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005022 </tr>
5023 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005024 <td><a href='#SkPaint_getTextPath_y'>y</a>-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005025 </tr>
5026 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
5027 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005028 </tr>
5029</table>
5030
5031### Example
5032
Cary Clark682c58d2018-05-16 07:07:07 -04005033<div><fiddle-embed name="7c9e6a399f898d68026c1f0865e6f73e"><div><a href='undocumented#Text'>Text</a> is added to <a href='SkPath_Reference#Path'>Path</a>, offset, and subtracted from <a href='SkPath_Reference#Path'>Path</a>, then added at
Cary Clark1a8d7622018-03-05 13:26:16 -05005034the offset location. The result is rendered with one draw call.
5035</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005036
5037---
5038
Cary Clark682c58d2018-05-16 07:07:07 -04005039<a name='SkPaint_getPosTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005040## getPosTextPath
5041
Cary Clark682c58d2018-05-16 07:07:07 -04005042<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5043void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* path) const
Cary Clark12799e12017-07-28 15:18:29 -04005044</pre>
5045
Cary Clark682c58d2018-05-16 07:07:07 -04005046Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
5047Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getPosTextPath_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5048and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5049All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
5050Uses <a href='#SkPaint_getPosTextPath_pos'>pos</a> array and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getPosTextPath_path'>path</a>.
5051<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04005052
5053### Parameters
5054
Cary Clark682c58d2018-05-16 07:07:07 -04005055<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
5056 <td>character codes or glyph indices</td>
5057 </tr>
5058 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
5059 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
5060 </tr>
5061 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
5062 <td>positions of each glyph</td>
5063 </tr>
5064 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
5065 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005066 </tr>
5067</table>
5068
5069### Example
5070
Cary Clark682c58d2018-05-16 07:07:07 -04005071<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 -05005072</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005073
5074---
5075
Cary Clark682c58d2018-05-16 07:07:07 -04005076## <a name='Text_Intercepts'>Text Intercepts</a>
Cary Clark08895c42018-02-01 09:37:32 -05005077
Cary Clark682c58d2018-05-16 07:07:07 -04005078<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
5079of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04005080underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005081
Cary Clark682c58d2018-05-16 07:07:07 -04005082<a name='SkPaint_getTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005083## getTextIntercepts
5084
Cary Clark682c58d2018-05-16 07:07:07 -04005085<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5086int <a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
5087 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005088</pre>
5089
Cary Clark682c58d2018-05-16 07:07:07 -04005090Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
5091<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
5092The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05005093the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005094Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getTextIntercepts_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5095and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5096Uses <a href='#SkPaint_getTextIntercepts_x'>x</a>, <a href='#SkPaint_getTextIntercepts_y'>y</a>, and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005097
Cary Clark682c58d2018-05-16 07:07:07 -04005098Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005099
Cary Clark682c58d2018-05-16 07:07:07 -04005100<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005101
5102### Parameters
5103
Cary Clark682c58d2018-05-16 07:07:07 -04005104<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
5105 <td>character codes or glyph indices</td>
5106 </tr>
5107 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
5108 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5109 </tr>
5110 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005111 <td><a href='#SkPaint_getTextIntercepts_x'>x</a>-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005112 </tr>
5113 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005114 <td><a href='#SkPaint_getTextIntercepts_y'>y</a>-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005115 </tr>
5116 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5117 <td>lower and upper line parallel to the advance</td>
5118 </tr>
5119 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5120 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005121 </tr>
5122</table>
5123
5124### Return Value
5125
5126number of intersections; may be zero
5127
5128### Example
5129
Cary Clark1a8d7622018-03-05 13:26:16 -05005130<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
5131</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005132
5133---
5134
Cary Clark682c58d2018-05-16 07:07:07 -04005135<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005136## getPosTextIntercepts
5137
Cary Clark682c58d2018-05-16 07:07:07 -04005138<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5139int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
5140 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005141</pre>
5142
Cary Clark682c58d2018-05-16 07:07:07 -04005143Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
5144<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
5145The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05005146the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005147Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getPosTextIntercepts_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5148and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5149Uses <a href='#SkPaint_getPosTextIntercepts_pos'>pos</a> array and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005150
Cary Clark682c58d2018-05-16 07:07:07 -04005151Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005152
Cary Clark682c58d2018-05-16 07:07:07 -04005153<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005154
5155### Parameters
5156
Cary Clark682c58d2018-05-16 07:07:07 -04005157<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
5158 <td>character codes or glyph indices</td>
5159 </tr>
5160 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
5161 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
5162 </tr>
5163 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
5164 <td>positions of each glyph</td>
5165 </tr>
5166 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5167 <td>lower and upper line parallel to the advance</td>
5168 </tr>
5169 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5170 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005171 </tr>
5172</table>
5173
5174### Return Value
5175
Cary Clarka523d2d2017-08-30 08:58:10 -04005176number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005177
5178### Example
5179
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00005180<div><fiddle-embed name="98b2dfc552d0540a7c041fe7a2839bd7"><div><a href='undocumented#Text'>Text</a> intercepts draw on either side of, but not inside, <a href='undocumented#Glyph'>Glyphs</a> in a run.
Cary Clark1a8d7622018-03-05 13:26:16 -05005181</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005182
5183---
5184
Cary Clark682c58d2018-05-16 07:07:07 -04005185<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005186## getPosTextHIntercepts
5187
Cary Clark682c58d2018-05-16 07:07:07 -04005188<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5189int <a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a>(const void* text, size_t length, const <a href='undocumented#SkScalar'>SkScalar</a> xpos[], <a href='undocumented#SkScalar'>SkScalar</a> constY,
5190 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005191</pre>
5192
Cary Clark682c58d2018-05-16 07:07:07 -04005193Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5194<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5195The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05005196the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005197Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getPosTextHIntercepts_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5198and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5199Uses <a href='#SkPaint_getPosTextHIntercepts_xpos'>xpos</a> array, <a href='#SkPaint_getPosTextHIntercepts_constY'>constY</a>, and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005200
Cary Clark682c58d2018-05-16 07:07:07 -04005201Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005202
Cary Clark682c58d2018-05-16 07:07:07 -04005203<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005204
5205### Parameters
5206
Cary Clark682c58d2018-05-16 07:07:07 -04005207<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5208 <td>character codes or glyph indices</td>
5209 </tr>
5210 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5211 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5212 </tr>
5213 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5214 <td>positions of each glyph in x</td>
5215 </tr>
5216 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5217 <td>position of each glyph in y</td>
5218 </tr>
5219 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5220 <td>lower and upper line parallel to the advance</td>
5221 </tr>
5222 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5223 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005224 </tr>
5225</table>
5226
5227### Return Value
5228
5229number of intersections; may be zero
5230
5231### Example
5232
Cary Clark80247e52018-07-11 16:18:41 -04005233<div><fiddle-embed name="dc9851c43acc3716aca8c9a4d40d452d"><div><a href='undocumented#Text'>Text</a> intercepts do not take stroke thickness into consideration.
Cary Clark1a8d7622018-03-05 13:26:16 -05005234</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005235
5236---
5237
Cary Clark682c58d2018-05-16 07:07:07 -04005238<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005239## getTextBlobIntercepts
5240
Cary Clark682c58d2018-05-16 07:07:07 -04005241<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkd2ca79c2018-08-10 13:09:13 -04005242int <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 -04005243</pre>
5244
Cary Clark682c58d2018-05-16 07:07:07 -04005245Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
5246<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
5247The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05005248the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005249Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5250and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5251Uses run array and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005252
Cary Clark682c58d2018-05-16 07:07:07 -04005253<a href='#Text_Encoding'>Text Encoding</a> must be set to <a href='#SkPaint_kGlyphID_TextEncoding'>SkPaint::kGlyphID TextEncoding</a>.
Cary Clark3cd22cc2017-12-01 11:49:58 -05005254
Cary Clark682c58d2018-05-16 07:07:07 -04005255Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005256
Cary Clark682c58d2018-05-16 07:07:07 -04005257<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005258
5259### Parameters
5260
Cary Clark682c58d2018-05-16 07:07:07 -04005261<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
5262 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
5263 </tr>
5264 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5265 <td>lower and upper line parallel to the advance</td>
5266 </tr>
5267 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5268 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005269 </tr>
5270</table>
5271
5272### Return Value
5273
5274number of intersections; may be zero
5275
5276### Example
5277
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005278<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005279
5280---
5281
Cary Clark682c58d2018-05-16 07:07:07 -04005282<a name='SkPaint_nothingToDraw'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005283## nothingToDraw
5284
Cary Clark682c58d2018-05-16 07:07:07 -04005285<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5286bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005287</pre>
5288
Cary Clark682c58d2018-05-16 07:07:07 -04005289Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
5290otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005291
Cary Clark224c7002018-06-27 11:00:21 -04005292Returns true if, for example, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> combined with <a href='SkColor_Reference#Alpha'>Color Alpha</a> computes a
Cary Clark682c58d2018-05-16 07:07:07 -04005293new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005294
5295### Return Value
5296
Cary Clark682c58d2018-05-16 07:07:07 -04005297true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005298
5299### Example
5300
Cary Clark83647062018-07-18 16:21:51 -04005301<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04005302
5303#### Example Output
5304
5305~~~~
5306initial nothing to draw: false
5307blend dst nothing to draw: true
5308blend src over nothing to draw: false
5309alpha 0 nothing to draw: true
5310~~~~
5311
5312</fiddle-embed></div>
5313
5314---
5315
Cary Clark682c58d2018-05-16 07:07:07 -04005316## <a name='Fast_Bounds'>Fast Bounds</a>
Cary Clark08895c42018-02-01 09:37:32 -05005317
Cary Clark61313f32018-10-08 14:57:48 -04005318Private: To be made private.
5319
Cary Clark682c58d2018-05-16 07:07:07 -04005320<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
5321<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005322
Cary Clark682c58d2018-05-16 07:07:07 -04005323<a name='SkPaint_canComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005324## canComputeFastBounds
5325
Cary Clark682c58d2018-05-16 07:07:07 -04005326<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5327bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005328</pre>
5329
Cary Clark61313f32018-10-08 14:57:48 -04005330Private: (to be made private)
5331
Cary Clark682c58d2018-05-16 07:07:07 -04005332Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
5333to compute <a href='undocumented#Device'>Device</a> bounds of drawn geometry. For instance, <a href='#Paint'>Paint</a> with <a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04005334always returns false.
5335
5336### Return Value
5337
Cary Clark682c58d2018-05-16 07:07:07 -04005338true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005339
5340---
5341
Cary Clark682c58d2018-05-16 07:07:07 -04005342<a name='SkPaint_computeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005343## computeFastBounds
5344
Cary Clark682c58d2018-05-16 07:07:07 -04005345<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5346const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastBounds'>computeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const
Cary Clark12799e12017-07-28 15:18:29 -04005347</pre>
5348
Cary Clark61313f32018-10-08 14:57:48 -04005349Private: (to be made private)
5350
Cary Clark682c58d2018-05-16 07:07:07 -04005351Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005352raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04005353effects in the paint (e.g. stroking). If needed, it uses the <a href='#SkPaint_computeFastBounds_storage'>storage</a>
Cary Clarkce101242017-09-01 15:51:02 -04005354parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04005355for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005356
Cary Clark682c58d2018-05-16 07:07:07 -04005357The returned <a href='SkRect_Reference#Rect'>Rect</a> will either be <a href='#SkPaint_computeFastBounds_orig'>orig</a> or <a href='#SkPaint_computeFastBounds_storage'>storage</a>, thus the caller
5358should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
5359use the returned value. It is legal for <a href='#SkPaint_computeFastBounds_orig'>orig</a> and <a href='#SkPaint_computeFastBounds_storage'>storage</a> to be the same
5360<a href='SkRect_Reference#Rect'>Rect</a>.
5361
Cary Clark61313f32018-10-08 14:57:48 -04005362Private: For example:
5363 if (!path.isInverseFillType() && paint.canComputeFastBounds()) {
5364 SkRect storage;
5365 if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &storage))) {
5366 return; // do not draw the path
5367 }
5368 }
5369 // draw the path
5370
Cary Clark12799e12017-07-28 15:18:29 -04005371### Parameters
5372
Cary Clark682c58d2018-05-16 07:07:07 -04005373<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5374 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5375 </tr>
5376 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5377 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005378 </tr>
5379</table>
5380
5381### Return Value
5382
5383fast computed bounds
5384
5385---
5386
Cary Clark682c58d2018-05-16 07:07:07 -04005387<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005388## computeFastStrokeBounds
5389
Cary Clark682c58d2018-05-16 07:07:07 -04005390<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5391const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const
Cary Clark12799e12017-07-28 15:18:29 -04005392</pre>
5393
Cary Clark61313f32018-10-08 14:57:48 -04005394Private: (to be made private)
5395
Cary Clark12799e12017-07-28 15:18:29 -04005396### Parameters
5397
Cary Clark682c58d2018-05-16 07:07:07 -04005398<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
5399 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5400 </tr>
5401 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
5402 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04005403 </tr>
5404</table>
5405
5406### Return Value
5407
5408fast computed bounds
5409
5410---
5411
Cary Clark682c58d2018-05-16 07:07:07 -04005412<a name='SkPaint_doComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005413## doComputeFastBounds
5414
Cary Clark682c58d2018-05-16 07:07:07 -04005415<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5416const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage, <a href='#SkPaint_Style'>Style</a> style) const
Cary Clark12799e12017-07-28 15:18:29 -04005417</pre>
5418
Cary Clark61313f32018-10-08 14:57:48 -04005419Private: (to be made private)
5420
Cary Clark682c58d2018-05-16 07:07:07 -04005421Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
5422account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
5423altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005424
5425### Parameters
5426
Cary Clark682c58d2018-05-16 07:07:07 -04005427<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5428 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5429 </tr>
5430 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5431 <td>computed bounds of geometry</td>
5432 </tr>
5433 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
5434 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005435 </tr>
5436</table>
5437
5438### Return Value
5439
5440fast computed bounds
5441
5442---
5443
Cary Clark682c58d2018-05-16 07:07:07 -04005444## <a name='Utility'>Utility</a>
Cary Clark78de7512018-02-07 07:27:09 -05005445