blob: 8d7cd7b83e06ab636224697f5c75d99be2a6f0b6 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
Cary Clarka90ea222018-10-16 10:30:28 -04004
Cary Clark61313f32018-10-08 14:57:48 -04005<a name='SkPaint'></a>
Cary Clarke4aa3712017-09-15 02:56:12 -04006
Cary Clarka90ea222018-10-16 10:30:28 -04007---
8
Cary Clark61313f32018-10-08 14:57:48 -04009<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
10class <a href='#SkPaint'>SkPaint</a> {
11public:
12 <a href='#SkPaint_empty_constructor'>SkPaint()</a>;
13 <a href='#SkPaint_copy_const_SkPaint'>SkPaint(const SkPaint& paint)</a>;
14 <a href='#SkPaint_move_SkPaint'>SkPaint(SkPaint&& paint)</a>;
15 <a href='#SkPaint_destructor'>~SkPaint()</a>;
16 <a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>;
17 <a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>;
18 friend bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>;
19 friend bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>;
20 uint32_t <a href='#SkPaint_getHash'>getHash</a>() const;
21 void <a href='#SkPaint_reset'>reset</a>();
22
23 enum <a href='#SkPaint_Hinting'>Hinting</a> {
24 <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a> = 0,
25 <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a> = 1,
26 <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a> = 2,
27 <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a> = 3,
28 };
29
30 <a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const;
31 void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel);
32
33 enum <a href='#SkPaint_Flags'>Flags</a> {
34 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
35 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
36 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
37 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
38 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
39 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
40 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
41 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
Cary Clark61313f32018-10-08 14:57:48 -040042 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
43 };
44
45 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
46 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText_ReserveFlag</a> = 0x08,
47 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText_ReserveFlag</a> = 0x10,
48 };
49
50 uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const;
51 void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags);
52 bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const;
53 void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa);
54 bool <a href='#SkPaint_isDither'>isDither</a>() const;
55 void <a href='#SkPaint_setDither'>setDither</a>(bool dither);
56 bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const;
57 void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText);
58 bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const;
59 void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText);
60 bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const;
61 void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText);
62 bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const;
63 void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText);
64 bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const;
65 void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter);
Cary Clark61313f32018-10-08 14:57:48 -040066 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='SkPaint_empty_constructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400270
271---
Cary Clark12799e12017-07-28 15:18:29 -0400272
Cary Clark682c58d2018-05-16 07:07:07 -0400273<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
274<a href='#SkPaint'>SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400275</pre>
276
Cary Clark682c58d2018-05-16 07:07:07 -0400277Constructs <a href='#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400278
279| attribute | default value |
280| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -0400281| <a href='#Anti_Alias'>Anti Alias</a> | false |
Cary Clark224c7002018-06-27 11:00:21 -0400282| <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 -0400283| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
284| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
285| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
286| <a href='#Dither'>Dither</a> | false |
287| <a href='undocumented#Draw_Looper'>Draw Looper</a> | nullptr |
288| <a href='#Fake_Bold'>Fake Bold</a> | false |
289| <a href='undocumented#Filter_Quality'>Filter Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
290| <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> | false |
291| <a href='#Automatic_Hinting'>Automatic Hinting</a> | false |
292| <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> | false |
293| <a href='#SkPaint_Hinting'>Hinting</a> | <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> |
294| <a href='undocumented#Image_Filter'>Image Filter</a> | nullptr |
295| <a href='#LCD_Text'>LCD Text</a> | false |
296| <a href='#Linear_Text'>Linear Text</a> | false |
297| <a href='#Miter_Limit'>Miter Limit</a> | 4 |
298| <a href='undocumented#Mask_Filter'>Mask Filter</a> | nullptr |
299| <a href='undocumented#Path_Effect'>Path Effect</a> | nullptr |
300| <a href='undocumented#Shader'>Shader</a> | nullptr |
301| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill Style</a> |
302| <a href='#Text_Align'>Text Align</a> | <a href='#SkPaint_kLeft_Align'>kLeft Align</a> |
303| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
304| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
305| <a href='#Text_Size'>Text Size</a> | 12 |
306| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
307| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
308| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
309| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
310| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
311| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400312
313The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500314paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400315build system.
316
317### Return Value
318
Cary Clark682c58d2018-05-16 07:07:07 -0400319default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400320
321### Example
322
323<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
324
Cary Clark682c58d2018-05-16 07:07:07 -0400325<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400326
327---
Cary Clark12799e12017-07-28 15:18:29 -0400328
Cary Clark682c58d2018-05-16 07:07:07 -0400329<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
330<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400331</pre>
332
Cary Clark682c58d2018-05-16 07:07:07 -0400333Makes 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>,
334<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
335between 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 -0400336their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400337
Cary Clark682c58d2018-05-16 07:07:07 -0400338The 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>,
339<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
340This 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 -0400341
342### Parameters
343
Cary Clark682c58d2018-05-16 07:07:07 -0400344<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
345 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400346 </tr>
347</table>
348
349### Return Value
350
Cary Clark682c58d2018-05-16 07:07:07 -0400351shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400352
353### Example
354
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000355<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400356
357#### Example Output
358
359~~~~
360SK_ColorRED == paint1.getColor()
361SK_ColorBLUE == paint2.getColor()
362~~~~
363
364</fiddle-embed></div>
365
Cary Clark682c58d2018-05-16 07:07:07 -0400366<a name='SkPaint_move_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400367
368---
Cary Clark12799e12017-07-28 15:18:29 -0400369
Cary Clark682c58d2018-05-16 07:07:07 -0400370<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
371<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400372</pre>
373
Cary Clarkd0530ba2017-09-14 11:25:39 -0400374Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -0400375of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400376
Cary Clark682c58d2018-05-16 07:07:07 -0400377After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400378
379### Parameters
380
Cary Clark682c58d2018-05-16 07:07:07 -0400381<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
382 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400383 </tr>
384</table>
385
386### Return Value
387
Cary Clark682c58d2018-05-16 07:07:07 -0400388content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400389
390### Example
391
Cary Clark83647062018-07-18 16:21:51 -0400392<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -0400393
394#### Example Output
395
396~~~~
397path effect unique: true
398~~~~
399
400</fiddle-embed></div>
401
Cary Clark682c58d2018-05-16 07:07:07 -0400402<a name='SkPaint_reset'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400403
404---
Cary Clark12799e12017-07-28 15:18:29 -0400405
Cary Clark682c58d2018-05-16 07:07:07 -0400406<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
407void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400408</pre>
409
Cary Clark682c58d2018-05-16 07:07:07 -0400410Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
411<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400412
413### Example
414
415<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
416
417#### Example Output
418
419~~~~
420paint1 == paint2
421~~~~
422
423</fiddle-embed></div>
424
Cary Clark682c58d2018-05-16 07:07:07 -0400425<a name='SkPaint_destructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400426
427---
Cary Clark12799e12017-07-28 15:18:29 -0400428
Cary Clark682c58d2018-05-16 07:07:07 -0400429<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
430<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400431</pre>
432
Cary Clark682c58d2018-05-16 07:07:07 -0400433Decreases <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>,
434<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
435objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400436
Cary Clarka90ea222018-10-16 10:30:28 -0400437<a name='Management'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400438
Cary Clark682c58d2018-05-16 07:07:07 -0400439<a name='SkPaint_copy_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400440
441---
Cary Clark12799e12017-07-28 15:18:29 -0400442
Cary Clark682c58d2018-05-16 07:07:07 -0400443<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
444<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400445</pre>
446
Cary Clark682c58d2018-05-16 07:07:07 -0400447Makes 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>,
448<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
449between 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 -0400450prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -0400451resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
452are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400453
454### Parameters
455
Cary Clark682c58d2018-05-16 07:07:07 -0400456<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
457 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400458 </tr>
459</table>
460
461### Return Value
462
Cary Clark682c58d2018-05-16 07:07:07 -0400463content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400464
465### Example
466
467<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
468
469#### Example Output
470
471~~~~
472SK_ColorRED == paint1.getColor()
473SK_ColorRED == paint2.getColor()
474~~~~
475
476</fiddle-embed></div>
477
Cary Clark682c58d2018-05-16 07:07:07 -0400478<a name='SkPaint_move_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400479
480---
Cary Clark12799e12017-07-28 15:18:29 -0400481
Cary Clark682c58d2018-05-16 07:07:07 -0400482<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
483<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400484</pre>
485
Cary Clark682c58d2018-05-16 07:07:07 -0400486Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
487of 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 -0400488prior destination are decreased by one; those objects are deleted if the resulting count
489is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400490
Cary Clark682c58d2018-05-16 07:07:07 -0400491After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400492
493### Parameters
494
Cary Clark682c58d2018-05-16 07:07:07 -0400495<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
496 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400497 </tr>
498</table>
499
500### Return Value
501
Cary Clark682c58d2018-05-16 07:07:07 -0400502content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400503
504### Example
505
Ravi Mistry874e22b2018-07-19 03:49:13 +0000506<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -0400507
508#### Example Output
509
510~~~~
511SK_ColorRED == paint2.getColor()
512~~~~
513
514</fiddle-embed></div>
515
Cary Clark682c58d2018-05-16 07:07:07 -0400516<a name='SkPaint_equal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400517
518---
Cary Clark12799e12017-07-28 15:18:29 -0400519
Cary Clark682c58d2018-05-16 07:07:07 -0400520<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
521bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400522</pre>
523
Cary Clark682c58d2018-05-16 07:07:07 -0400524Compares <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
525if <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>,
526<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 -0400527
528### Parameters
529
Cary Clark682c58d2018-05-16 07:07:07 -0400530<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
531 <td><a href='#Paint'>Paint</a> to compare</td>
532 </tr>
533 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
534 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400535 </tr>
536</table>
537
538### Return Value
539
Cary Clark682c58d2018-05-16 07:07:07 -0400540true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400541
542### Example
543
544<div><fiddle-embed name="7481a948e34672720337a631830586dd">
545
546#### Example Output
547
548~~~~
549paint1 == paint2
550paint1 != paint2
551~~~~
552
553</fiddle-embed></div>
554
Cary Clark06c20f32018-03-20 15:53:27 -0400555### See Also
556
Cary Clark682c58d2018-05-16 07:07:07 -0400557<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400558
Cary Clark682c58d2018-05-16 07:07:07 -0400559<a name='SkPaint_notequal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400560
561---
Cary Clark12799e12017-07-28 15:18:29 -0400562
Cary Clark682c58d2018-05-16 07:07:07 -0400563<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
564bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400565</pre>
566
Cary Clark682c58d2018-05-16 07:07:07 -0400567Compares <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
568if <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>,
569<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 -0400570
571### Parameters
572
Cary Clark682c58d2018-05-16 07:07:07 -0400573<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
574 <td><a href='#Paint'>Paint</a> to compare</td>
575 </tr>
576 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
577 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400578 </tr>
579</table>
580
581### Return Value
582
Cary Clark682c58d2018-05-16 07:07:07 -0400583true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400584
585### Example
586
skia-bookmakera717ca92018-07-08 05:32:09 +0000587<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -0400588
589#### Example Output
590
591~~~~
592paint1 == paint2
593paint1 == paint2
594~~~~
595
596</fiddle-embed></div>
597
Cary Clark06c20f32018-03-20 15:53:27 -0400598### See Also
599
Cary Clark682c58d2018-05-16 07:07:07 -0400600<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400601
Cary Clark682c58d2018-05-16 07:07:07 -0400602<a name='SkPaint_getHash'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400603
604---
Cary Clark12799e12017-07-28 15:18:29 -0400605
Cary Clark682c58d2018-05-16 07:07:07 -0400606<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
607uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400608</pre>
609
Cary Clark682c58d2018-05-16 07:07:07 -0400610Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400611Identical hashes guarantee that the paints are
612equivalent, but differing hashes do not guarantee that the paints have differing
613contents.
614
Cary Clark682c58d2018-05-16 07:07:07 -0400615If <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 -0400616their hashes are also equal.
617
618The hash returned is platform and implementation specific.
619
620### Return Value
621
622a shallow hash
623
624### Example
625
Cary Clark83647062018-07-18 16:21:51 -0400626<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -0400627
628#### Example Output
629
630~~~~
631paint1 == paint2
632paint1.getHash() == paint2.getHash()
633~~~~
634
635</fiddle-embed></div>
636
Cary Clarka90ea222018-10-16 10:30:28 -0400637<a name='Hinting'></a>
638
639<a name='SkPaint_Hinting'></a>
640
Cary Clark12799e12017-07-28 15:18:29 -0400641---
642
Cary Clarka560c472017-11-27 10:44:06 -0500643<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400644 enum <a href='#SkPaint_Hinting'>Hinting</a> {
Cary Clarka90ea222018-10-16 10:30:28 -0400645 <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a> = 0,
646 <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a> = 1,
647 <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a> = 2,
648 <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -0400649 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500650</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400651
Cary Clark682c58d2018-05-16 07:07:07 -0400652<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
653look 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 -0400654muted effect or no effect at all depending on the platform.
655
Cary Clark7cfcbca2018-01-04 16:11:51 -0500656The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -0400657as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400658
659### Constants
660
Cary Clark682c58d2018-05-16 07:07:07 -0400661<table style='border-collapse: collapse; width: 62.5em'>
662 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
663<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
664<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
665 <tr style='background-color: #f0f0f0; '>
666 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
667 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
668 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
669Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500670With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
671bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400672outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -0500673to 26.6 fractional pixels.
674</td>
Cary Clark12799e12017-07-28 15:18:29 -0400675 </tr>
676 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400677 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
678 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
680Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500681With FreeType, this is equivalent in spirit to the
682FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400683lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -0400684Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -0500685</td>
Cary Clark12799e12017-07-28 15:18:29 -0400686 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400687 <tr style='background-color: #f0f0f0; '>
688 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
689 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
690 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
691Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500692With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
693choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -0500694gray-level rendering.
695</td>
Cary Clark12799e12017-07-28 15:18:29 -0400696 </tr>
697 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400698 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
699 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
700 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -0400701Modifies glyph outlines for maximum constrast. With FreeType, this selects
Cary Clark682c58d2018-05-16 07:07:07 -0400702FT_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 -0500703FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
704horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -0500705variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
706</td>
Cary Clark12799e12017-07-28 15:18:29 -0400707 </tr>
708</table>
709
Cary Clark682c58d2018-05-16 07:07:07 -0400710On <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 -0400711to 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 -0400712Normal 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 -0400713the LCD output is reduced to a single <a href='undocumented#Grayscale'>Grayscale</a> channel.
Cary Clark12799e12017-07-28 15:18:29 -0400714
Cary Clark682c58d2018-05-16 07:07:07 -0400715On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400716
Cary Clark682c58d2018-05-16 07:07:07 -0400717<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
718Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400719
Cary Clark682c58d2018-05-16 07:07:07 -0400720<a name='SkPaint_getHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400721
722---
Cary Clark12799e12017-07-28 15:18:29 -0400723
Cary Clark682c58d2018-05-16 07:07:07 -0400724<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
725<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400726</pre>
727
728Returns level of glyph outline adjustment.
729
730### Return Value
731
Cary Clark682c58d2018-05-16 07:07:07 -0400732one 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 -0400733
734### Example
735
Cary Clark83647062018-07-18 16:21:51 -0400736<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
Cary Clark12799e12017-07-28 15:18:29 -0400737
738#### Example Output
739
740~~~~
741SkPaint::kNormal_Hinting == paint.getHinting()
742~~~~
743
744</fiddle-embed></div>
745
Cary Clark682c58d2018-05-16 07:07:07 -0400746<a name='SkPaint_setHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400747
748---
Cary Clark12799e12017-07-28 15:18:29 -0400749
Cary Clark682c58d2018-05-16 07:07:07 -0400750<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
751void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400752</pre>
753
754Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400755Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400756
Cary Clark682c58d2018-05-16 07:07:07 -0400757| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400758| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -0400759| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
760| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
761| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
762| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400763
764### Parameters
765
Cary Clark682c58d2018-05-16 07:07:07 -0400766<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
767 <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 -0400768 </tr>
769</table>
770
771### Example
772
773<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
774
775#### Example Output
776
777~~~~
778paint1 == paint2
779~~~~
780
781</fiddle-embed></div>
782
Cary Clarka90ea222018-10-16 10:30:28 -0400783<a name='Flags'></a>
784
785<a name='SkPaint_Flags'></a>
786
Cary Clark12799e12017-07-28 15:18:29 -0400787---
788
Cary Clarka560c472017-11-27 10:44:06 -0500789<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400790 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clarka90ea222018-10-16 10:30:28 -0400791 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
792 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
793 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
794 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
795 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
796 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
Cary Clark61313f32018-10-08 14:57:48 -0400797 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
Cary Clarka90ea222018-10-16 10:30:28 -0400798 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
Cary Clark682c58d2018-05-16 07:07:07 -0400799 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400800 };
Cary Clark12799e12017-07-28 15:18:29 -0400801</pre>
802
Cary Clark682c58d2018-05-16 07:07:07 -0400803The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
804The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
805with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
806All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400807multiple settings at once.
808
809### Constants
810
Cary Clark682c58d2018-05-16 07:07:07 -0400811<table style='border-collapse: collapse; width: 62.5em'>
812 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
813<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
814<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
815 <tr style='background-color: #f0f0f0; '>
816 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
817 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
818 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400819mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400820 </tr>
821 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400822 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
823 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
824 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
825mask for setting Dither</td>
826 </tr>
827 <tr style='background-color: #f0f0f0; '>
828 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
829 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
830 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
831mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -0400832 </tr>
833 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400834 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
835 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
836 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
837mask for setting Linear_Text</td>
838 </tr>
839 <tr style='background-color: #f0f0f0; '>
840 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
841 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
842 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
843mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400844 </tr>
845 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400846 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
847 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
848 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
849mask for setting LCD_Text</td>
850 </tr>
851 <tr style='background-color: #f0f0f0; '>
852 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
853 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
854 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
855mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400856 </tr>
857 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400858 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
859 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
860 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
861mask for setting Automatic_Hinting</td>
862 </tr>
863 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400864 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
865 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
866 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
867mask 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 -0400868 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400869<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
870</table>
Cary Clark12799e12017-07-28 15:18:29 -0400871
Cary Clarka90ea222018-10-16 10:30:28 -0400872<a name='SkPaint_ReserveFlags'></a>
873
874---
Cary Clark06c20f32018-03-20 15:53:27 -0400875
Cary Clarke8161dd2018-09-06 12:47:04 -0400876To be deprecated soon.
Cary Clark12799e12017-07-28 15:18:29 -0400877
Cary Clarke8161dd2018-09-06 12:47:04 -0400878Only valid for Android framework.
Cary Clark4855f782018-02-06 09:41:53 -0500879
Cary Clarka560c472017-11-27 10:44:06 -0500880<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400881 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
Cary Clarka90ea222018-10-16 10:30:28 -0400882 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText_ReserveFlag</a> = 0x08,
883 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText_ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -0400884 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500885</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400886
887### Constants
888
Cary Clark682c58d2018-05-16 07:07:07 -0400889<table style='border-collapse: collapse; width: 62.5em'>
890 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
891<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
892<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
893 <tr style='background-color: #f0f0f0; '>
894 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
895 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
896 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400897To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400898
Cary Clarke8161dd2018-09-06 12:47:04 -0400899</td>
Cary Clark12799e12017-07-28 15:18:29 -0400900 </tr>
901 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400902 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
903 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
904 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400905To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400906
Cary Clarke8161dd2018-09-06 12:47:04 -0400907</td>
Cary Clark12799e12017-07-28 15:18:29 -0400908 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400909</table>
Cary Clark4855f782018-02-06 09:41:53 -0500910
Cary Clark682c58d2018-05-16 07:07:07 -0400911<a name='SkPaint_getFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400912
913---
Cary Clark12799e12017-07-28 15:18:29 -0400914
Cary Clark682c58d2018-05-16 07:07:07 -0400915<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
916uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400917</pre>
918
Cary Clark682c58d2018-05-16 07:07:07 -0400919Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
920bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400921
922### Return Value
923
Cary Clark682c58d2018-05-16 07:07:07 -0400924zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400925
926### Example
927
928<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
929
930#### Example Output
931
932~~~~
933(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
934~~~~
935
936</fiddle-embed></div>
937
Cary Clark682c58d2018-05-16 07:07:07 -0400938<a name='SkPaint_setFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400939
940---
Cary Clark12799e12017-07-28 15:18:29 -0400941
Cary Clark682c58d2018-05-16 07:07:07 -0400942<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
943void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400944</pre>
945
Cary Clark682c58d2018-05-16 07:07:07 -0400946Replaces <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.
947All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400948
949### Parameters
950
Cary Clark682c58d2018-05-16 07:07:07 -0400951<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
952 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400953 </tr>
954</table>
955
956### Example
957
958<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
959
960#### Example Output
961
962~~~~
963paint.isAntiAlias()
964paint.isDither()
965~~~~
966
967</fiddle-embed></div>
968
Cary Clarka90ea222018-10-16 10:30:28 -0400969<a name='Anti_Alias'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400970
Cary Clarka90ea222018-10-16 10:30:28 -0400971---
Cary Clark08895c42018-02-01 09:37:32 -0500972
Cary Clarkffb3d682018-05-17 12:17:28 -0400973<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -0400974If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
975If <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 -0400976
Cary Clark682c58d2018-05-16 07:07:07 -0400977The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400978passing through the pixel center may, but is not required to, draw the pixel.
979
Cary Clark682c58d2018-05-16 07:07:07 -0400980<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
981active <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 -0400982
Cary Clarkffb3d682018-05-17 12:17:28 -0400983A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
984<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 -0400985<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400986
Cary Clarkffb3d682018-05-17 12:17:28 -0400987The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400988
Cary Clarkffb3d682018-05-17 12:17:28 -0400989<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
990<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 -0400991at compile time.
992
993### Example
994
995<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
996A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -0400997The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
998<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500999</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001000
Cary Clark682c58d2018-05-16 07:07:07 -04001001<a name='SkPaint_isAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001002
1003---
Cary Clark12799e12017-07-28 15:18:29 -04001004
Cary Clark682c58d2018-05-16 07:07:07 -04001005<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1006bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001007</pre>
1008
Cary Clark80247e52018-07-11 16:18:41 -04001009Returns 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 -04001010
Cary Clark682c58d2018-05-16 07:07:07 -04001011Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001012
1013### Return Value
1014
Cary Clark682c58d2018-05-16 07:07:07 -04001015<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001016
1017### Example
1018
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001019<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -04001020
1021#### Example Output
1022
1023~~~~
1024paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1025paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1026~~~~
1027
1028</fiddle-embed></div>
1029
Cary Clark682c58d2018-05-16 07:07:07 -04001030<a name='SkPaint_setAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001031
1032---
Cary Clark12799e12017-07-28 15:18:29 -04001033
Cary Clark682c58d2018-05-16 07:07:07 -04001034<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1035void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001036</pre>
1037
Cary Clark682c58d2018-05-16 07:07:07 -04001038Requests, 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 -04001039partial transparency.
1040
Cary Clark682c58d2018-05-16 07:07:07 -04001041Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1042Clears <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 -04001043
1044### Parameters
1045
Cary Clark682c58d2018-05-16 07:07:07 -04001046<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1047 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001048 </tr>
1049</table>
1050
1051### Example
1052
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001053<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -04001054
1055#### Example Output
1056
1057~~~~
1058paint1 == paint2
1059~~~~
1060
1061</fiddle-embed></div>
1062
Cary Clarka90ea222018-10-16 10:30:28 -04001063<a name='Dither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001064
Cary Clarka90ea222018-10-16 10:30:28 -04001065---
Cary Clark08895c42018-02-01 09:37:32 -05001066
Cary Clark682c58d2018-05-16 07:07:07 -04001067<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001068This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001069Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1070and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1071and 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 -04001072
1073Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001074<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>.
1075<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
1076<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 -04001077
Cary Clark682c58d2018-05-16 07:07:07 -04001078<a href='#Dither'>Dither</a> is disabled by default.
1079<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 -04001080at compile time.
1081
Cary Clark2be81cf2018-09-13 12:04:30 -04001082Some 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 -04001083
1084### Example
1085
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001086<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 -05001087alternating nearby colors from pixel to pixel.
1088</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001089
1090### Example
1091
Cary Clarka619d452018-07-16 08:12:01 -04001092<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark224c7002018-06-27 11:00:21 -04001093Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001094dither, making it easier to see.
1095</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001096
Cary Clarka90ea222018-10-16 10:30:28 -04001097### See Also
1098
1099Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1100
Cary Clark682c58d2018-05-16 07:07:07 -04001101<a name='SkPaint_isDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001102
1103---
Cary Clark12799e12017-07-28 15:18:29 -04001104
Cary Clark682c58d2018-05-16 07:07:07 -04001105<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1106bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001107</pre>
1108
Cary Clark80247e52018-07-11 16:18:41 -04001109Returns true if color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001110
Cary Clark682c58d2018-05-16 07:07:07 -04001111Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001112
1113### Return Value
1114
Cary Clark682c58d2018-05-16 07:07:07 -04001115<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001116
1117### Example
1118
1119<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1120
1121#### Example Output
1122
1123~~~~
1124paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1125paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1126~~~~
1127
1128</fiddle-embed></div>
1129
Cary Clark682c58d2018-05-16 07:07:07 -04001130<a name='SkPaint_setDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001131
1132---
Cary Clark12799e12017-07-28 15:18:29 -04001133
Cary Clark682c58d2018-05-16 07:07:07 -04001134<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1135void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001136</pre>
1137
1138Requests, but does not require, to distribute color error.
1139
Cary Clark682c58d2018-05-16 07:07:07 -04001140Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1141Clears <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 -04001142
1143### Parameters
1144
Cary Clark682c58d2018-05-16 07:07:07 -04001145<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1146 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001147 </tr>
1148</table>
1149
1150### Example
1151
1152<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1153
1154#### Example Output
1155
1156~~~~
1157paint1 == paint2
1158~~~~
1159
1160</fiddle-embed></div>
1161
1162### See Also
1163
Cary Clark682c58d2018-05-16 07:07:07 -04001164<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001165
Cary Clarka90ea222018-10-16 10:30:28 -04001166<a name='Device_Text'></a>
1167
Cary Clark12799e12017-07-28 15:18:29 -04001168---
1169
Cary Clark682c58d2018-05-16 07:07:07 -04001170<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 -04001171
Cary Clarkffb3d682018-05-17 12:17:28 -04001172When 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 -04001173create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001174on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001175<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 -04001176the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001177
Cary Clark682c58d2018-05-16 07:07:07 -04001178<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 -04001179As the opaqueness
1180of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1181
1182Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001183<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1184<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
1185<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 -04001186
1187### Example
1188
Cary Clark682c58d2018-05-16 07:07:07 -04001189<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>.
1190When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1191When <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 -05001192</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001193
Cary Clarka90ea222018-10-16 10:30:28 -04001194<a name='Linear_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001195
Cary Clark682c58d2018-05-16 07:07:07 -04001196<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>.
1197If <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>.
1198If <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 -04001199
Cary Clark682c58d2018-05-16 07:07:07 -04001200<a name='SkPaint_isLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001201
1202---
Cary Clark12799e12017-07-28 15:18:29 -04001203
Cary Clark682c58d2018-05-16 07:07:07 -04001204<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1205bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001206</pre>
1207
Cary Clark80247e52018-07-11 16:18:41 -04001208Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001209
Cary Clark682c58d2018-05-16 07:07:07 -04001210Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001211
1212### Return Value
1213
Cary Clark682c58d2018-05-16 07:07:07 -04001214<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001215
1216### Example
1217
1218<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1219
1220### See Also
1221
Cary Clark682c58d2018-05-16 07:07:07 -04001222<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001223
Cary Clark682c58d2018-05-16 07:07:07 -04001224<a name='SkPaint_setLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001225
1226---
Cary Clark12799e12017-07-28 15:18:29 -04001227
Cary Clark682c58d2018-05-16 07:07:07 -04001228<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1229void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001230</pre>
1231
Cary Clark80247e52018-07-11 16:18:41 -04001232Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark682c58d2018-05-16 07:07:07 -04001233By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001234
Cary Clark682c58d2018-05-16 07:07:07 -04001235Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1236Clears <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 -04001237
1238### Parameters
1239
Cary Clark682c58d2018-05-16 07:07:07 -04001240<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1241 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001242 </tr>
1243</table>
1244
1245### Example
1246
Cary Clark83647062018-07-18 16:21:51 -04001247<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001248
1249### See Also
1250
Cary Clark682c58d2018-05-16 07:07:07 -04001251<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001252
Cary Clarka90ea222018-10-16 10:30:28 -04001253<a name='Subpixel_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001254
Cary Clark682c58d2018-05-16 07:07:07 -04001255<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 -04001256As the opaqueness
1257of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1258
Cary Clark682c58d2018-05-16 07:07:07 -04001259<a name='SkPaint_isSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001260
1261---
Cary Clark12799e12017-07-28 15:18:29 -04001262
Cary Clark682c58d2018-05-16 07:07:07 -04001263<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1264bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001265</pre>
1266
Cary Clark80247e52018-07-11 16:18:41 -04001267Returns 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 -04001268
Cary Clark682c58d2018-05-16 07:07:07 -04001269Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001270
1271### Return Value
1272
Cary Clark682c58d2018-05-16 07:07:07 -04001273<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001274
1275### Example
1276
1277<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1278
1279#### Example Output
1280
1281~~~~
1282paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1283paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1284~~~~
1285
1286</fiddle-embed></div>
1287
Cary Clark682c58d2018-05-16 07:07:07 -04001288<a name='SkPaint_setSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001289
1290---
Cary Clark12799e12017-07-28 15:18:29 -04001291
Cary Clark682c58d2018-05-16 07:07:07 -04001292<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1293void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001294</pre>
1295
Cary Clark682c58d2018-05-16 07:07:07 -04001296Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001297
Cary Clark682c58d2018-05-16 07:07:07 -04001298Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1299Clears <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 -04001300
1301### Parameters
1302
Cary Clark682c58d2018-05-16 07:07:07 -04001303<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1304 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001305 </tr>
1306</table>
1307
1308### Example
1309
1310<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1311
1312#### Example Output
1313
1314~~~~
1315paint1 == paint2
1316~~~~
1317
1318</fiddle-embed></div>
1319
Cary Clarka90ea222018-10-16 10:30:28 -04001320<a name='LCD_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001321
Cary Clarkffb3d682018-05-17 12:17:28 -04001322When 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 -04001323create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001324on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001325<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 -04001326the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001327
Cary Clark682c58d2018-05-16 07:07:07 -04001328<a name='SkPaint_isLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001329
1330---
Cary Clark12799e12017-07-28 15:18:29 -04001331
Cary Clark682c58d2018-05-16 07:07:07 -04001332<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1333bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001334</pre>
1335
Cary Clark80247e52018-07-11 16:18:41 -04001336Returns true if <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001337
Cary Clark682c58d2018-05-16 07:07:07 -04001338Returns 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 -04001339
1340### Return Value
1341
Cary Clark682c58d2018-05-16 07:07:07 -04001342<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001343
1344### Example
1345
skia-bookmakera391c722018-07-09 05:28:19 +00001346<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001347
1348#### Example Output
1349
1350~~~~
1351paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1352paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1353~~~~
1354
1355</fiddle-embed></div>
1356
Cary Clark682c58d2018-05-16 07:07:07 -04001357<a name='SkPaint_setLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001358
1359---
Cary Clark12799e12017-07-28 15:18:29 -04001360
Cary Clark682c58d2018-05-16 07:07:07 -04001361<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1362void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001363</pre>
1364
Cary Clark682c58d2018-05-16 07:07:07 -04001365Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001366
Cary Clark682c58d2018-05-16 07:07:07 -04001367Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1368Clears <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 -04001369
1370### Parameters
1371
Cary Clark682c58d2018-05-16 07:07:07 -04001372<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
1373 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001374 </tr>
1375</table>
1376
1377### Example
1378
skia-bookmakere0a458f2018-07-16 05:29:00 +00001379<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001380
1381#### Example Output
1382
1383~~~~
1384paint1 == paint2
1385~~~~
1386
1387</fiddle-embed></div>
1388
Cary Clarka90ea222018-10-16 10:30:28 -04001389<a name='Font_Embedded_Bitmaps'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001390
Cary Clarka90ea222018-10-16 10:30:28 -04001391---
Cary Clark08895c42018-02-01 09:37:32 -05001392
Cary Clark682c58d2018-05-16 07:07:07 -04001393<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
1394<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 -05001395in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001396
Cary Clark682c58d2018-05-16 07:07:07 -04001397FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
1398the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001399Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04001400<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001401
Cary Clark682c58d2018-05-16 07:07:07 -04001402<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
1403<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
1404<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001405
1406### Example
1407
Cary Clarka560c472017-11-27 10:44:06 -05001408<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001409<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001410 includes an embedded bitmap Glyph at odd font sizes. This example works
1411 on platforms that use FreeType as their Font_Engine.
1412 Windows may, but is not required to, return a bitmap glyph if
1413 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1414 bitmap.allocN32Pixels(30, 15);
1415 bitmap.eraseColor(0);
1416 SkCanvas offscreen(bitmap);
1417 SkPaint paint;
1418 paint.setAntiAlias(true);
1419 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001420 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001421 for (bool embedded : { false, true}) {
1422 paint.setEmbeddedBitmapText(embedded);
1423 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1424 }
1425 canvas->drawBitmap(bitmap, 0, 0);
1426 canvas->scale(10, 10);
1427 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001428
Cary Clarka560c472017-11-27 10:44:06 -05001429</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001430
Cary Clark682c58d2018-05-16 07:07:07 -04001431<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001432
1433---
Cary Clark12799e12017-07-28 15:18:29 -04001434
Cary Clark682c58d2018-05-16 07:07:07 -04001435<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1436bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001437</pre>
1438
Cary Clark80247e52018-07-11 16:18:41 -04001439Returns 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 -04001440
Cary Clark682c58d2018-05-16 07:07:07 -04001441Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001442
1443### Return Value
1444
Cary Clark682c58d2018-05-16 07:07:07 -04001445<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001446
1447### Example
1448
1449<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1450
1451#### Example Output
1452
1453~~~~
1454paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1455paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1456~~~~
1457
1458</fiddle-embed></div>
1459
Cary Clark682c58d2018-05-16 07:07:07 -04001460<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001461
1462---
Cary Clark12799e12017-07-28 15:18:29 -04001463
Cary Clark682c58d2018-05-16 07:07:07 -04001464<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1465void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001466</pre>
1467
1468Requests, but does not require, to use bitmaps in fonts instead of outlines.
1469
Cary Clark682c58d2018-05-16 07:07:07 -04001470Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1471Clears <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 -04001472
1473### Parameters
1474
Cary Clark682c58d2018-05-16 07:07:07 -04001475<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
1476 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001477 </tr>
1478</table>
1479
1480### Example
1481
1482<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1483
1484#### Example Output
1485
1486~~~~
1487paint1 == paint2
1488~~~~
1489
1490</fiddle-embed></div>
1491
Cary Clarka90ea222018-10-16 10:30:28 -04001492<a name='Automatic_Hinting'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001493
Cary Clark682c58d2018-05-16 07:07:07 -04001494If <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>
1495instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
1496<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
1497<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001498
Cary Clark682c58d2018-05-16 07:07:07 -04001499<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 -04001500
Cary Clark682c58d2018-05-16 07:07:07 -04001501<a name='SkPaint_isAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001502
1503---
Cary Clark12799e12017-07-28 15:18:29 -04001504
Cary Clark682c58d2018-05-16 07:07:07 -04001505<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1506bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001507</pre>
1508
Cary Clark80247e52018-07-11 16:18:41 -04001509Returns 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
1510platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>. If true, instructs
1511the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001512
Cary Clark682c58d2018-05-16 07:07:07 -04001513Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001514
1515### Return Value
1516
Cary Clark682c58d2018-05-16 07:07:07 -04001517<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001518
1519### Example
1520
1521<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1522
1523#### Example Output
1524
1525~~~~
1526paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1527paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1528~~~~
1529
1530</fiddle-embed></div>
1531
1532### See Also
1533
Cary Clark682c58d2018-05-16 07:07:07 -04001534<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001535
Cary Clark682c58d2018-05-16 07:07:07 -04001536<a name='SkPaint_setAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001537
1538---
Cary Clark12799e12017-07-28 15:18:29 -04001539
Cary Clark682c58d2018-05-16 07:07:07 -04001540<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1541void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001542</pre>
1543
Cary Clark80247e52018-07-11 16:18:41 -04001544Sets whether to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001545If <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 -04001546instructs 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 -04001547<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
1548<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001549
Cary Clark682c58d2018-05-16 07:07:07 -04001550Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001551
Cary Clark682c58d2018-05-16 07:07:07 -04001552Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1553Clears <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 -04001554
1555### Parameters
1556
Cary Clark682c58d2018-05-16 07:07:07 -04001557<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
1558 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001559 </tr>
1560</table>
1561
1562### Example
1563
1564<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1565
1566### See Also
1567
Cary Clark682c58d2018-05-16 07:07:07 -04001568<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001569
Cary Clarka90ea222018-10-16 10:30:28 -04001570<a name='Fake_Bold'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001571
Cary Clarka90ea222018-10-16 10:30:28 -04001572---
Cary Clark08895c42018-02-01 09:37:32 -05001573
Cary Clark682c58d2018-05-16 07:07:07 -04001574<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 -05001575is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04001576bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001577
Cary Clark682c58d2018-05-16 07:07:07 -04001578Use <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 -04001579is not available.
1580
Cary Clark7cfcbca2018-01-04 16:11:51 -05001581A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04001582the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
1583by 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 -04001584
Cary Clark682c58d2018-05-16 07:07:07 -04001585<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001586
1587### Example
1588
1589<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1590
Cary Clark682c58d2018-05-16 07:07:07 -04001591<a name='SkPaint_isFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001592
1593---
Cary Clark12799e12017-07-28 15:18:29 -04001594
Cary Clark682c58d2018-05-16 07:07:07 -04001595<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1596bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001597</pre>
1598
Cary Clark80247e52018-07-11 16:18:41 -04001599Returns true if approximate bold by increasing the stroke width when creating glyph bitmaps
Cary Clark12799e12017-07-28 15:18:29 -04001600from outlines.
1601
Cary Clark682c58d2018-05-16 07:07:07 -04001602Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001603
1604### Return Value
1605
Cary Clark682c58d2018-05-16 07:07:07 -04001606<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001607
1608### Example
1609
1610<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1611
1612#### Example Output
1613
1614~~~~
1615paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1616paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1617~~~~
1618
1619</fiddle-embed></div>
1620
Cary Clark682c58d2018-05-16 07:07:07 -04001621<a name='SkPaint_setFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001622
1623---
Cary Clark12799e12017-07-28 15:18:29 -04001624
Cary Clark682c58d2018-05-16 07:07:07 -04001625<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1626void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001627</pre>
1628
Cary Clark80247e52018-07-11 16:18:41 -04001629Increases stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001630
Cary Clark682c58d2018-05-16 07:07:07 -04001631Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1632Clears <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 -04001633
1634### Parameters
1635
Cary Clark682c58d2018-05-16 07:07:07 -04001636<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
1637 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001638 </tr>
1639</table>
1640
1641### Example
1642
1643<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1644
1645#### Example Output
1646
1647~~~~
1648paint1 == paint2
1649~~~~
1650
1651</fiddle-embed></div>
1652
Cary Clarka90ea222018-10-16 10:30:28 -04001653<a name='Full_Hinting_Spacing'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001654
Cary Clark682c58d2018-05-16 07:07:07 -04001655if <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 -04001656spacing 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 -04001657<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
1658FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001659
Cary Clark137b8742018-05-30 09:21:49 -04001660<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text <a href='undocumented#Kerning'>Kerning</a>, where the space between
1661a 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 -04001662
Cary Clark682c58d2018-05-16 07:07:07 -04001663<a name='SkPaint_isDevKernText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001664
1665---
Cary Clark12799e12017-07-28 15:18:29 -04001666
Cary Clark682c58d2018-05-16 07:07:07 -04001667<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1668bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001669</pre>
1670
Cary Clark682c58d2018-05-16 07:07:07 -04001671Deprecated.
1672
Cary Clark682c58d2018-05-16 07:07:07 -04001673<a name='SkPaint_setDevKernText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001674
1675---
Cary Clark12799e12017-07-28 15:18:29 -04001676
Cary Clark682c58d2018-05-16 07:07:07 -04001677<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1678void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04001679</pre>
1680
Cary Clark682c58d2018-05-16 07:07:07 -04001681Deprecated.
1682
Cary Clarka90ea222018-10-16 10:30:28 -04001683<a name='Filter_Quality_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001684
Cary Clarka90ea222018-10-16 10:30:28 -04001685---
Cary Clark08895c42018-02-01 09:37:32 -05001686
Cary Clark682c58d2018-05-16 07:07:07 -04001687<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
1688A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
1689A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
1690If 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 -04001691in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001692
Cary Clark682c58d2018-05-16 07:07:07 -04001693<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 -04001694
1695<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001696 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
1697 </tr> <tr>
1698 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
1699 </tr> <tr>
1700 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
1701 </tr> <tr>
1702 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
1703 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001704</table>
1705
Cary Clark682c58d2018-05-16 07:07:07 -04001706and 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 -04001707
Cary Clark682c58d2018-05-16 07:07:07 -04001708<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 -04001709
1710### Example
1711
skia-bookmaker525f9a92018-05-03 06:27:39 +00001712<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001713
Cary Clark682c58d2018-05-16 07:07:07 -04001714<a name='SkPaint_getFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001715
1716---
Cary Clark12799e12017-07-28 15:18:29 -04001717
Cary Clark682c58d2018-05-16 07:07:07 -04001718<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1719<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001720</pre>
1721
Cary Clark682c58d2018-05-16 07:07:07 -04001722Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001723draws faster; a higher setting looks better when the image is scaled.
1724
1725### Return Value
1726
Cary Clark682c58d2018-05-16 07:07:07 -04001727one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
1728<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001729
1730### Example
1731
1732<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1733
1734#### Example Output
1735
1736~~~~
1737kNone_SkFilterQuality == paint.getFilterQuality()
1738~~~~
1739
1740</fiddle-embed></div>
1741
Cary Clark682c58d2018-05-16 07:07:07 -04001742<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001743
1744---
Cary Clark12799e12017-07-28 15:18:29 -04001745
Cary Clark682c58d2018-05-16 07:07:07 -04001746<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1747void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001748</pre>
1749
Cary Clark682c58d2018-05-16 07:07:07 -04001750Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001751draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04001752Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001753
1754### Parameters
1755
Cary Clark682c58d2018-05-16 07:07:07 -04001756<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
1757 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
1758<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001759 </tr>
1760</table>
1761
1762### Example
1763
1764<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1765
1766#### Example Output
1767
1768~~~~
1769kHigh_SkFilterQuality == paint.getFilterQuality()
1770~~~~
1771
1772</fiddle-embed></div>
1773
1774### See Also
1775
Cary Clark682c58d2018-05-16 07:07:07 -04001776<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001777
Cary Clarka90ea222018-10-16 10:30:28 -04001778<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001779
Cary Clarka90ea222018-10-16 10:30:28 -04001780---
Cary Clark12799e12017-07-28 15:18:29 -04001781
Cary Clarkab2621d2018-01-30 10:08:57 -05001782| name | description |
1783| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04001784| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
1785| <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 -04001786
Cary Clarkffb3d682018-05-17 12:17:28 -04001787<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 -05001788values used to draw a filled or stroked shape in a 32-bit value. Each component
1789occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1790All values in any combination are valid.
1791
Cary Clark682c58d2018-05-16 07:07:07 -04001792<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 -04001793RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001794
Cary Clarkffb3d682018-05-17 12:17:28 -04001795The 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 -05001796positions on the output device, which may have more or fewer bits, and may have
1797a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001798
Cary Clarkffb3d682018-05-17 12:17:28 -04001799| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001800| --- | --- | --- | --- | --- |
1801| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1802
1803### Example
1804
Ravi Mistry874e22b2018-07-19 03:49:13 +00001805<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001806
Cary Clark682c58d2018-05-16 07:07:07 -04001807<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001808
1809---
Cary Clark12799e12017-07-28 15:18:29 -04001810
Cary Clark682c58d2018-05-16 07:07:07 -04001811<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1812<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001813</pre>
1814
Cary Clarkffb3d682018-05-17 12:17:28 -04001815Retrieves <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 -04001816Use 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 -04001817a color component.
1818
1819### Return Value
1820
Cary Clarkffb3d682018-05-17 12:17:28 -04001821<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001822
1823### Example
1824
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001825<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001826
1827#### Example Output
1828
1829~~~~
1830Yellow is 100% red, 100% green, and 0% blue.
1831~~~~
1832
1833</fiddle-embed></div>
1834
1835### See Also
1836
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001837<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1838
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001839<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001840
1841---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001842
1843<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1844<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const
1845</pre>
1846
1847Retrieves alpha and RGB, unpmreultiplied, as four floating point values. RGB are
1848are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1849
1850### Return Value
1851
1852<a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA
1853
1854### Example
1855
1856<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1857
1858#### Example Output
1859
1860~~~~
1861Yellow is 100% red, 100% green, and 0% blue.
1862~~~~
1863
1864</fiddle-embed></div>
1865
1866### See Also
1867
1868<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001869
Cary Clark682c58d2018-05-16 07:07:07 -04001870<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001871
1872---
Cary Clark12799e12017-07-28 15:18:29 -04001873
Cary Clark682c58d2018-05-16 07:07:07 -04001874<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1875void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04001876</pre>
1877
Cary Clarkffb3d682018-05-17 12:17:28 -04001878Sets <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,
1879<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 -04001880
1881### Parameters
1882
Cary Clark682c58d2018-05-16 07:07:07 -04001883<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001884 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001885 </tr>
1886</table>
1887
1888### Example
1889
skia-bookmaker233c6522018-07-04 05:33:26 +00001890<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001891
1892#### Example Output
1893
1894~~~~
1895green1 == green2
1896~~~~
1897
1898</fiddle-embed></div>
1899
1900### See Also
1901
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001902<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>
1903
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001904<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001905
1906---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001907
1908<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1909void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& color, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
1910</pre>
1911
1912Sets alpha and RGB used when stroking and filling. The <a href='#SkPaint_setColor4f_color'>color</a> is four floating
1913point values, unpremultiplied. The <a href='#SkPaint_setColor4f_color'>color</a> values are interpreted as being in
1914the <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
1915sRGB <a href='#SkPaint_setColor4f_color'>color</a> space.
1916
1917### Parameters
1918
1919<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
1920 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA</td>
1921 </tr>
1922 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
1923 <td><a href='undocumented#Color_Space'>Color Space</a> describing the encoding of <a href='#SkPaint_setColor4f_color'>color</a></td>
1924 </tr>
1925</table>
1926
1927### Example
1928
1929<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
1930
1931#### Example Output
1932
1933~~~~
1934green1 == green2
1935~~~~
1936
1937</fiddle-embed></div>
1938
1939### See Also
1940
1941<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 -04001942
Cary Clarka90ea222018-10-16 10:30:28 -04001943<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001944
Cary Clarkffb3d682018-05-17 12:17:28 -04001945<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 -04001946
Cary Clark682c58d2018-05-16 07:07:07 -04001947<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001948
1949---
Cary Clark12799e12017-07-28 15:18:29 -04001950
Cary Clark682c58d2018-05-16 07:07:07 -04001951<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1952uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001953</pre>
1954
Cary Clark682c58d2018-05-16 07:07:07 -04001955Retrieves <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 -04001956
1957### Return Value
1958
Cary Clark682c58d2018-05-16 07:07:07 -04001959<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001960
1961### Example
1962
Cary Clark83647062018-07-18 16:21:51 -04001963<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04001964
1965#### Example Output
1966
1967~~~~
1968255 == paint.getAlpha()
1969~~~~
1970
1971</fiddle-embed></div>
1972
Cary Clark682c58d2018-05-16 07:07:07 -04001973<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001974
1975---
Cary Clark12799e12017-07-28 15:18:29 -04001976
Cary Clark682c58d2018-05-16 07:07:07 -04001977<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1978void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04001979</pre>
1980
Cary Clarkffb3d682018-05-17 12:17:28 -04001981Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04001982unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04001983build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
1984<a href='#SkPaint_setAlpha_a'>a</a> set to zero makes <a href='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 -04001985fully opaque.
1986
1987### Parameters
1988
Cary Clark682c58d2018-05-16 07:07:07 -04001989<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
1990 <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 -04001991 </tr>
1992</table>
1993
1994### Example
1995
Ravi Mistry874e22b2018-07-19 03:49:13 +00001996<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04001997
1998#### Example Output
1999
2000~~~~
20010x44112233 == paint.getColor()
2002~~~~
2003
2004</fiddle-embed></div>
2005
Cary Clark682c58d2018-05-16 07:07:07 -04002006<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002007
2008---
Cary Clark12799e12017-07-28 15:18:29 -04002009
Cary Clark682c58d2018-05-16 07:07:07 -04002010<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2011void <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 -04002012</pre>
2013
Cary Clark682c58d2018-05-16 07:07:07 -04002014Sets <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 -04002015The 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 -04002016
2017### Parameters
2018
Cary Clark682c58d2018-05-16 07:07:07 -04002019<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2020 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2021 </tr>
2022 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002023 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002024 </tr>
2025 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002026 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002027 </tr>
2028 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002029 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002030 </tr>
2031</table>
2032
2033### Example
2034
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002035<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04002036
2037#### Example Output
2038
2039~~~~
2040transRed1 == transRed2
2041~~~~
2042
2043</fiddle-embed></div>
2044
2045### See Also
2046
Cary Clark682c58d2018-05-16 07:07:07 -04002047<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002048
Cary Clarka90ea222018-10-16 10:30:28 -04002049<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002050
Cary Clarka90ea222018-10-16 10:30:28 -04002051---
Cary Clark08895c42018-02-01 09:37:32 -05002052
Cary Clark682c58d2018-05-16 07:07:07 -04002053<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2054Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002055
Cary Clarka90ea222018-10-16 10:30:28 -04002056<a name='Style_Fill'></a>
2057
Cary Clark682c58d2018-05-16 07:07:07 -04002058Set <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 -04002059The fill covers the area inside the geometry for most shapes.
2060
Cary Clarka90ea222018-10-16 10:30:28 -04002061<a name='Style_Stroke'></a>
2062
Cary Clark682c58d2018-05-16 07:07:07 -04002063Set <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 -04002064
Cary Clarkbc5697d2017-10-04 14:31:33 -04002065The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002066<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>.
2067The area covered where the shape turns a corner is described by <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clarka90ea222018-10-16 10:30:28 -04002068The stroke is centered on the shape; it extends equally on either side of the shape edge.As <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
Cary Clark682c58d2018-05-16 07:07:07 -04002069may 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 -04002070
Cary Clarka90ea222018-10-16 10:30:28 -04002071### See Also
Cary Clark12799e12017-07-28 15:18:29 -04002072
Cary Clarka90ea222018-10-16 10:30:28 -04002073<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>
2074
2075<a name='Hairline'></a>
2076
2077---
2078
2079<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Hairline'>Hairline</a>.
2080<a href='#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 -05002081flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002082
Cary Clarka90ea222018-10-16 10:30:28 -04002083<a href='SkPath_Reference#Path'>Path</a> drawing with <a href='#Hairline'>Hairline</a> may hit the same pixel more than once. For instance, <a href='SkPath_Reference#Path'>Path</a> containing
Cary Clark61313f32018-10-08 14:57:48 -04002084two 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 -04002085pixel. 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 -05002086GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002087while stroking.
2088
Cary Clarka90ea222018-10-16 10:30:28 -04002089### See Also
2090
2091<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>
2092
2093<a name='SkPaint_Style'></a>
2094
2095---
Cary Clark12799e12017-07-28 15:18:29 -04002096
Cary Clarka560c472017-11-27 10:44:06 -05002097<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002098 enum <a href='#SkPaint_Style'>Style</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002099 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
2100 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
2101 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002102 };
Cary Clarka90ea222018-10-16 10:30:28 -04002103</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04002104
Cary Clarka90ea222018-10-16 10:30:28 -04002105<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002106 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 -05002107</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002108
Cary Clark682c58d2018-05-16 07:07:07 -04002109Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002110The stroke and fill
2111share all paint attributes; for instance, they are drawn with the same color.
2112
Cary Clark682c58d2018-05-16 07:07:07 -04002113Use <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 -04002114a fill draw.
2115
2116### Constants
2117
Cary Clark682c58d2018-05-16 07:07:07 -04002118<table style='border-collapse: collapse; width: 62.5em'>
2119 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2120<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2121<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2122 <tr style='background-color: #f0f0f0; '>
2123 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2124 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2125 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002126Applies 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>.
2127<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 -04002128<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2129The <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 -04002130and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002131<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 -05002132</td>
Cary Clark12799e12017-07-28 15:18:29 -04002133 </tr>
2134 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002135 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2136 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2137 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002138Applies 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 -04002139<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,
2140and ignore the set <a href='#SkPaint_Style'>Style</a>.
2141The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2142</td>
2143 </tr>
2144 <tr style='background-color: #f0f0f0; '>
2145 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2146 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2147 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002148Applies 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 -04002149<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>,
2150and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002151</td>
Cary Clark12799e12017-07-28 15:18:29 -04002152 </tr>
2153 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002154 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2155 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2156 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2157May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002158</td>
Cary Clark12799e12017-07-28 15:18:29 -04002159 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002160</table>
Cary Clark12799e12017-07-28 15:18:29 -04002161
Cary Clark682c58d2018-05-16 07:07:07 -04002162<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002163
2164---
Cary Clark12799e12017-07-28 15:18:29 -04002165
Cary Clark682c58d2018-05-16 07:07:07 -04002166<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2167<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002168</pre>
2169
Cary Clark80247e52018-07-11 16:18:41 -04002170Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002171
2172### Return Value
2173
Cary Clark682c58d2018-05-16 07:07:07 -04002174one 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 -04002175
2176### Example
2177
2178<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2179
2180#### Example Output
2181
2182~~~~
2183SkPaint::kFill_Style == paint.getStyle()
2184~~~~
2185
2186</fiddle-embed></div>
2187
2188### See Also
2189
Cary Clark682c58d2018-05-16 07:07:07 -04002190<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002191
Cary Clark682c58d2018-05-16 07:07:07 -04002192<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002193
2194---
Cary Clark12799e12017-07-28 15:18:29 -04002195
Cary Clark682c58d2018-05-16 07:07:07 -04002196<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2197void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002198</pre>
2199
2200Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002201Has 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 -04002202
2203### Parameters
2204
Cary Clark682c58d2018-05-16 07:07:07 -04002205<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2206 <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 -04002207 </tr>
2208</table>
2209
2210### Example
2211
2212<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2213
2214### See Also
2215
Cary Clark682c58d2018-05-16 07:07:07 -04002216<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002217
Cary Clarka90ea222018-10-16 10:30:28 -04002218<a name='Stroke_Width'></a>
2219
Cary Clark12799e12017-07-28 15:18:29 -04002220---
2221
Cary Clark682c58d2018-05-16 07:07:07 -04002222<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002223of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002224set 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 -04002225
2226When width is greater than zero, the stroke encompasses as many pixels partially
2227or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002228the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002229
Cary Clarka90ea222018-10-16 10:30:28 -04002230The stroke dimensions are scaled by the canvas matrix, but <a href='#Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002231remains one pixel wide regardless of scaling.
2232
2233The default width for the paint is zero.
2234
2235### Example
2236
skia-bookmaker525f9a92018-05-03 06:27:39 +00002237<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 -05002238line and the platform implementation.
2239</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002240
Cary Clark682c58d2018-05-16 07:07:07 -04002241<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002242
2243---
Cary Clark12799e12017-07-28 15:18:29 -04002244
Cary Clark682c58d2018-05-16 07:07:07 -04002245<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2246<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002247</pre>
2248
Cary Clark682c58d2018-05-16 07:07:07 -04002249Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002250outline the shape.
2251
2252### Return Value
2253
Cary Clarka90ea222018-10-16 10:30:28 -04002254zero for <a href='#Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002255
2256### Example
2257
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002258<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002259
2260#### Example Output
2261
2262~~~~
22630 == paint.getStrokeWidth()
2264~~~~
2265
2266</fiddle-embed></div>
2267
Cary Clark682c58d2018-05-16 07:07:07 -04002268<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002269
2270---
Cary Clark12799e12017-07-28 15:18:29 -04002271
Cary Clark682c58d2018-05-16 07:07:07 -04002272<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2273void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002274</pre>
2275
2276Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002277outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002278Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002279
2280### Parameters
2281
Cary Clark682c58d2018-05-16 07:07:07 -04002282<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clarka90ea222018-10-16 10:30:28 -04002283 <td>zero thickness for <a href='#Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002284 </tr>
2285</table>
2286
2287### Example
2288
2289<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2290
2291#### Example Output
2292
2293~~~~
22945 == paint.getStrokeWidth()
2295~~~~
2296
2297</fiddle-embed></div>
2298
Cary Clarka90ea222018-10-16 10:30:28 -04002299<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002300
Cary Clarka90ea222018-10-16 10:30:28 -04002301---
Cary Clark08895c42018-02-01 09:37:32 -05002302
Cary Clark682c58d2018-05-16 07:07:07 -04002303<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002304relative to the stroke width.
2305
Cary Clark682c58d2018-05-16 07:07:07 -04002306<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
2307is 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>
2308or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002309
Cary Clark682c58d2018-05-16 07:07:07 -04002310If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
2311is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002312
Cary Clark2be81cf2018-09-13 12:04:30 -04002313<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle using:
2314<code>miter limit&nbsp;=&nbsp;1&nbsp;/&nbsp;sin&nbsp;\(&nbsp;angle&nbsp;/&nbsp;2&nbsp;\)</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002315
Cary Clark2be81cf2018-09-13 12:04:30 -04002316<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
Cary Clark682c58d2018-05-16 07:07:07 -04002317The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002318in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002319
2320Here are some miter limits and the angles that triggers them.
2321
2322| miter limit | angle in degrees |
2323| --- | --- |
2324| 10 | 11.48 |
2325| 9 | 12.76 |
2326| 8 | 14.36 |
2327| 7 | 16.43 |
2328| 6 | 19.19 |
2329| 5 | 23.07 |
2330| 4 | 28.96 |
2331| 3 | 38.94 |
2332| 2 | 60 |
2333| 1 | 180 |
2334
2335### Example
2336
Cary Clarka619d452018-07-16 08:12:01 -04002337<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark12799e12017-07-28 15:18:29 -04002338When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002339by a bevel join.
2340</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002341
Cary Clark682c58d2018-05-16 07:07:07 -04002342<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002343
2344---
Cary Clark12799e12017-07-28 15:18:29 -04002345
Cary Clark682c58d2018-05-16 07:07:07 -04002346<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2347<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002348</pre>
2349
Cary Clark80247e52018-07-11 16:18:41 -04002350Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002351
2352### Return Value
2353
Cary Clark682c58d2018-05-16 07:07:07 -04002354zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002355
2356### Example
2357
2358<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2359
2360#### Example Output
2361
2362~~~~
2363default miter limit == 4
2364~~~~
2365
2366</fiddle-embed></div>
2367
2368### See Also
2369
Cary Clark682c58d2018-05-16 07:07:07 -04002370<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 -04002371
Cary Clark682c58d2018-05-16 07:07:07 -04002372<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002373
2374---
Cary Clark12799e12017-07-28 15:18:29 -04002375
Cary Clark682c58d2018-05-16 07:07:07 -04002376<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2377void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002378</pre>
2379
Cary Clark80247e52018-07-11 16:18:41 -04002380Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002381Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04002382Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002383
2384### Parameters
2385
Cary Clark682c58d2018-05-16 07:07:07 -04002386<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
2387 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002388 </tr>
2389</table>
2390
2391### Example
2392
skia-bookmakera717ca92018-07-08 05:32:09 +00002393<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002394
2395#### Example Output
2396
2397~~~~
2398default miter limit == 8
2399~~~~
2400
2401</fiddle-embed></div>
2402
2403### See Also
2404
Cary Clark682c58d2018-05-16 07:07:07 -04002405<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 -04002406
Cary Clarka90ea222018-10-16 10:30:28 -04002407<a name='Stroke_Cap'></a>
2408
2409<a name='SkPaint_Cap'></a>
2410
Cary Clark12799e12017-07-28 15:18:29 -04002411---
2412
Cary Clarka560c472017-11-27 10:44:06 -05002413<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002414 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002415 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2416 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2417 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002418 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2419 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002420 };
Cary Clarka90ea222018-10-16 10:30:28 -04002421</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002422
Cary Clarka90ea222018-10-16 10:30:28 -04002423<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002424 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 -05002425</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002426
Cary Clark61313f32018-10-08 14:57:48 -04002427<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 -04002428
2429### Constants
2430
Cary Clark682c58d2018-05-16 07:07:07 -04002431<table style='border-collapse: collapse; width: 62.5em'>
2432 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2433<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2434<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2435 <tr style='background-color: #f0f0f0; '>
2436 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2437 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2438 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2439Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002440</td>
Cary Clark12799e12017-07-28 15:18:29 -04002441 </tr>
2442 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002443 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2444 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2445 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2446Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05002447and end.
2448</td>
Cary Clark12799e12017-07-28 15:18:29 -04002449 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002450 <tr style='background-color: #f0f0f0; '>
2451 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2452 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2453 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2454Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04002455and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002456of the stroke.
2457</td>
Cary Clark12799e12017-07-28 15:18:29 -04002458 </tr>
2459 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002460 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2461 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2462 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2463Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
2464</td>
2465 </tr>
2466 <tr style='background-color: #f0f0f0; '>
2467 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2468 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2469 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2470<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 -05002471</td>
Cary Clark12799e12017-07-28 15:18:29 -04002472 </tr>
2473 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002474 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2475 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2477May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002478</td>
Cary Clark12799e12017-07-28 15:18:29 -04002479 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002480</table>
Cary Clark12799e12017-07-28 15:18:29 -04002481
Cary Clark682c58d2018-05-16 07:07:07 -04002482Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002483follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002484
Cary Clark61313f32018-10-08 14:57:48 -04002485If 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 -04002486visible beginning and end.
2487
Cary Clark61313f32018-10-08 14:57:48 -04002488<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 -04002489
Cary Clark61313f32018-10-08 14:57:48 -04002490<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
2491<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 -04002492at the contour point.
Cary Clark61313f32018-10-08 14:57:48 -04002493<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 -04002494<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002495
Cary Clark682c58d2018-05-16 07:07:07 -04002496<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 -04002497
Cary Clark12799e12017-07-28 15:18:29 -04002498### Example
2499
Cary Clark2ade9972017-11-02 17:49:34 -04002500<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002501
Cary Clark682c58d2018-05-16 07:07:07 -04002502<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002503
2504---
Cary Clark12799e12017-07-28 15:18:29 -04002505
Cary Clark682c58d2018-05-16 07:07:07 -04002506<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2507<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002508</pre>
2509
Cary Clark80247e52018-07-11 16:18:41 -04002510Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002511
2512### Return Value
2513
Cary Clark682c58d2018-05-16 07:07:07 -04002514one 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 -04002515
2516### Example
2517
2518<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2519
2520#### Example Output
2521
2522~~~~
2523kButt_Cap == default stroke cap
2524~~~~
2525
2526</fiddle-embed></div>
2527
2528### See Also
2529
Cary Clark682c58d2018-05-16 07:07:07 -04002530<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002531
Cary Clark682c58d2018-05-16 07:07:07 -04002532<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002533
2534---
Cary Clark12799e12017-07-28 15:18:29 -04002535
Cary Clark682c58d2018-05-16 07:07:07 -04002536<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2537void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002538</pre>
2539
Cary Clark80247e52018-07-11 16:18:41 -04002540Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002541
2542### Parameters
2543
Cary Clark682c58d2018-05-16 07:07:07 -04002544<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
2545 <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>;
2546has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002547 </tr>
2548</table>
2549
2550### Example
2551
2552<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2553
2554#### Example Output
2555
2556~~~~
2557kRound_Cap == paint.getStrokeCap()
2558~~~~
2559
2560</fiddle-embed></div>
2561
2562### See Also
2563
Cary Clark682c58d2018-05-16 07:07:07 -04002564<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002565
Cary Clarka90ea222018-10-16 10:30:28 -04002566<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002567
Cary Clark61313f32018-10-08 14:57:48 -04002568<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 -04002569
Cary Clark682c58d2018-05-16 07:07:07 -04002570Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002571follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002572
2573If the contour direction changes abruptly, because the tangent direction leading
2574to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04002575the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002576
2577### Example
2578
Cary Clark2ade9972017-11-02 17:49:34 -04002579<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002580
Cary Clarka90ea222018-10-16 10:30:28 -04002581<a name='SkPaint_Join'></a>
2582
2583---
Cary Clark12799e12017-07-28 15:18:29 -04002584
Cary Clarka560c472017-11-27 10:44:06 -05002585<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002586 enum <a href='#SkPaint_Join'>Join</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002587 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2588 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2589 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002590 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2591 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002592 };
Cary Clarka90ea222018-10-16 10:30:28 -04002593</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002594
Cary Clarka90ea222018-10-16 10:30:28 -04002595<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002596 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 -05002597</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002598
Cary Clark682c58d2018-05-16 07:07:07 -04002599<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 -04002600affects the four corners of a stroked rectangle, and the connected segments in a
2601stroked path.
2602
2603Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2604radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2605connect the thick strokes.
2606
Cary Clark7cfcbca2018-01-04 16:11:51 -05002607The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002608not contain the actual join. For instance, a fill path constructed with round joins does
2609not necessarily include circles at each connected segment.
2610
2611### Constants
2612
Cary Clark682c58d2018-05-16 07:07:07 -04002613<table style='border-collapse: collapse; width: 62.5em'>
2614 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2615<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2616<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2617 <tr style='background-color: #f0f0f0; '>
2618 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2619 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2620 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2621Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
2622If 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 -05002623</td>
Cary Clark12799e12017-07-28 15:18:29 -04002624 </tr>
2625 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002626 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2627 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2628 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2629Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
2630</td>
2631 </tr>
2632 <tr style='background-color: #f0f0f0; '>
2633 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2634 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2635 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2636Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002637</td>
Cary Clark12799e12017-07-28 15:18:29 -04002638 </tr>
2639 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002640 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2641 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2642 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2643equivalent to the largest value for Stroke_Join</td>
2644 </tr>
2645 <tr style='background-color: #f0f0f0; '>
2646 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2647 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2648 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2649<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 -05002650</td>
Cary Clark12799e12017-07-28 15:18:29 -04002651 </tr>
2652 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002653 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2654 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2655 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2656May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002657</td>
Cary Clark12799e12017-07-28 15:18:29 -04002658 </tr>
2659</table>
2660
2661### Example
2662
2663<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2664
2665### See Also
2666
Cary Clark682c58d2018-05-16 07:07:07 -04002667<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 -04002668
Cary Clark682c58d2018-05-16 07:07:07 -04002669<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002670
2671---
Cary Clark12799e12017-07-28 15:18:29 -04002672
Cary Clark682c58d2018-05-16 07:07:07 -04002673<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2674<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002675</pre>
2676
Cary Clark80247e52018-07-11 16:18:41 -04002677Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002678
2679### Return Value
2680
Cary Clark682c58d2018-05-16 07:07:07 -04002681one 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 -04002682
2683### Example
2684
Cary Clark7f644ec2018-07-19 10:50:44 -04002685<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002686
2687#### Example Output
2688
2689~~~~
2690kMiter_Join == default stroke join
2691~~~~
2692
2693</fiddle-embed></div>
2694
2695### See Also
2696
Cary Clark682c58d2018-05-16 07:07:07 -04002697<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002698
Cary Clark682c58d2018-05-16 07:07:07 -04002699<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002700
2701---
Cary Clark12799e12017-07-28 15:18:29 -04002702
Cary Clark682c58d2018-05-16 07:07:07 -04002703<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2704void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002705</pre>
2706
Cary Clark80247e52018-07-11 16:18:41 -04002707Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002708
2709### Parameters
2710
Cary Clark682c58d2018-05-16 07:07:07 -04002711<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
2712 <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 -04002713otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002714 </tr>
2715</table>
2716
2717### Example
2718
2719<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2720
2721#### Example Output
2722
2723~~~~
2724kMiter_Join == paint.getStrokeJoin()
2725~~~~
2726
2727</fiddle-embed></div>
2728
2729### See Also
2730
Cary Clark682c58d2018-05-16 07:07:07 -04002731<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002732
Cary Clark12799e12017-07-28 15:18:29 -04002733### See Also
2734
Cary Clark682c58d2018-05-16 07:07:07 -04002735<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002736
Cary Clarka90ea222018-10-16 10:30:28 -04002737<a name='Fill_Path'></a>
2738
2739---
Cary Clark08895c42018-02-01 09:37:32 -05002740
Cary Clark682c58d2018-05-16 07:07:07 -04002741<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 -04002742
Cary Clark682c58d2018-05-16 07:07:07 -04002743If <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
2744replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2745destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002746
Cary Clark682c58d2018-05-16 07:07:07 -04002747Fill <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
2748the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002749
Cary Clark682c58d2018-05-16 07:07:07 -04002750If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
2751and <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>,
2752and <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 -04002753
Cary Clark682c58d2018-05-16 07:07:07 -04002754Fill <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 -04002755
Cary Clark682c58d2018-05-16 07:07:07 -04002756If 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>
Cary Clarka90ea222018-10-16 10:30:28 -04002757returns false since <a href='#Hairline'>Hairline</a> has no filled equivalent.
2758
2759### See Also
2760
2761<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 -04002762
Cary Clark682c58d2018-05-16 07:07:07 -04002763<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002764
2765---
Cary Clark12799e12017-07-28 15:18:29 -04002766
Cary Clark682c58d2018-05-16 07:07:07 -04002767<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2768bool <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 -04002769</pre>
2770
Cary Clark80247e52018-07-11 16:18:41 -04002771Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04002772
2773### Parameters
2774
Cary Clark682c58d2018-05-16 07:07:07 -04002775<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
2776 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
2777 </tr>
2778 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
2779 <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>
2780 </tr>
2781 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
2782 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
2783 </tr>
2784 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
2785 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04002786to favor speed and size</td>
2787 </tr>
2788</table>
2789
2790### Return Value
2791
Cary Clarka90ea222018-10-16 10:30:28 -04002792true if the path represents <a href='#Style_Fill'>Style Fill</a>, or false if it represents <a href='#Hairline'>Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002793
2794### Example
2795
Cary Clark682c58d2018-05-16 07:07:07 -04002796<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.
2797At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002798At the highest precision, the filled path has high fidelity compared to the original stroke.
2799</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002800
Cary Clark682c58d2018-05-16 07:07:07 -04002801<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002802
Cary Clarka90ea222018-10-16 10:30:28 -04002803---
2804
Cary Clark682c58d2018-05-16 07:07:07 -04002805<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2806bool <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 -04002807</pre>
2808
Cary Clark80247e52018-07-11 16:18:41 -04002809Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04002810
Cary Clark682c58d2018-05-16 07:07:07 -04002811Replaces <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>.
2812<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 -04002813
2814### Parameters
2815
Cary Clark682c58d2018-05-16 07:07:07 -04002816<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
2817 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
2818 </tr>
2819 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
2820 <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 -04002821 </tr>
2822</table>
2823
2824### Return Value
2825
Cary Clarka90ea222018-10-16 10:30:28 -04002826true if the path represents <a href='#Style_Fill'>Style Fill</a>, or false if it represents <a href='#Hairline'>Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002827
2828### Example
2829
2830<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2831
Cary Clarka90ea222018-10-16 10:30:28 -04002832<a name='Shader_Methods'></a>
2833
Cary Clark12799e12017-07-28 15:18:29 -04002834---
2835
Cary Clark682c58d2018-05-16 07:07:07 -04002836<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2837<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
2838If <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 -04002839
Cary Clark682c58d2018-05-16 07:07:07 -04002840<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>.
2841If <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 -04002842the fill.
2843
Cary Clark682c58d2018-05-16 07:07:07 -04002844The 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 -04002845
2846### Example
2847
2848<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2849
Cary Clark682c58d2018-05-16 07:07:07 -04002850If <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 -04002851
2852### Example
2853
skia-bookmaker525f9a92018-05-03 06:27:39 +00002854<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002855
Cary Clark682c58d2018-05-16 07:07:07 -04002856<a name='SkPaint_getShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002857
2858---
Cary Clark12799e12017-07-28 15:18:29 -04002859
Cary Clark682c58d2018-05-16 07:07:07 -04002860<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2861<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002862</pre>
2863
Cary Clark80247e52018-07-11 16:18:41 -04002864Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002865
Cary Clark682c58d2018-05-16 07:07:07 -04002866Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002867
2868### Return Value
2869
Cary Clark682c58d2018-05-16 07:07:07 -04002870<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002871
2872### Example
2873
2874<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2875
2876#### Example Output
2877
2878~~~~
2879nullptr == shader
2880nullptr != shader
2881~~~~
2882
2883</fiddle-embed></div>
2884
Cary Clark682c58d2018-05-16 07:07:07 -04002885<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002886
2887---
Cary Clark12799e12017-07-28 15:18:29 -04002888
Cary Clark682c58d2018-05-16 07:07:07 -04002889<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2890<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 -04002891</pre>
2892
Cary Clark80247e52018-07-11 16:18:41 -04002893Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002894
Cary Clark682c58d2018-05-16 07:07:07 -04002895Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002896
2897### Return Value
2898
Cary Clark682c58d2018-05-16 07:07:07 -04002899<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002900
2901### Example
2902
2903<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2904
2905#### Example Output
2906
2907~~~~
2908shader unique: true
2909shader unique: false
2910~~~~
2911
2912</fiddle-embed></div>
2913
Cary Clark682c58d2018-05-16 07:07:07 -04002914<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002915
2916---
Cary Clark12799e12017-07-28 15:18:29 -04002917
Cary Clark682c58d2018-05-16 07:07:07 -04002918<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2919void <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 -04002920</pre>
2921
Cary Clark80247e52018-07-11 16:18:41 -04002922Sets optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002923
Cary Clark682c58d2018-05-16 07:07:07 -04002924Sets <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>.
2925Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002926
2927### Parameters
2928
Cary Clark682c58d2018-05-16 07:07:07 -04002929<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
2930 <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 -04002931 </tr>
2932</table>
2933
2934### Example
2935
skia-bookmakere0a458f2018-07-16 05:29:00 +00002936<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002937
Cary Clarka90ea222018-10-16 10:30:28 -04002938<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002939
Cary Clarka90ea222018-10-16 10:30:28 -04002940---
Cary Clark08895c42018-02-01 09:37:32 -05002941
Cary Clark682c58d2018-05-16 07:07:07 -04002942<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
Cary Clark224c7002018-06-27 11:00:21 -04002943<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 -04002944If <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 -04002945
Cary Clark682c58d2018-05-16 07:07:07 -04002946The 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 -04002947
2948### Example
2949
2950<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2951
Cary Clark682c58d2018-05-16 07:07:07 -04002952<a name='SkPaint_getColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002953
2954---
Cary Clark12799e12017-07-28 15:18:29 -04002955
Cary Clark682c58d2018-05-16 07:07:07 -04002956<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2957<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002958</pre>
2959
Cary Clark682c58d2018-05-16 07:07:07 -04002960Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
2961Does 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 -04002962
2963### Return Value
2964
Cary Clark682c58d2018-05-16 07:07:07 -04002965<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002966
2967### Example
2968
2969<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2970
2971#### Example Output
2972
2973~~~~
2974nullptr == color filter
2975nullptr != color filter
2976~~~~
2977
2978</fiddle-embed></div>
2979
Cary Clark682c58d2018-05-16 07:07:07 -04002980<a name='SkPaint_refColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002981
2982---
Cary Clark12799e12017-07-28 15:18:29 -04002983
Cary Clark682c58d2018-05-16 07:07:07 -04002984<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2985<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 -04002986</pre>
2987
Cary Clark682c58d2018-05-16 07:07:07 -04002988Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
2989Increases <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 -04002990
2991### Return Value
2992
Cary Clark682c58d2018-05-16 07:07:07 -04002993<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002994
2995### Example
2996
2997<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2998
2999#### Example Output
3000
3001~~~~
3002color filter unique: true
3003color filter unique: false
3004~~~~
3005
3006</fiddle-embed></div>
3007
Cary Clark682c58d2018-05-16 07:07:07 -04003008<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003009
3010---
Cary Clark12799e12017-07-28 15:18:29 -04003011
Cary Clark682c58d2018-05-16 07:07:07 -04003012<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3013void <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 -04003014</pre>
3015
Cary Clark682c58d2018-05-16 07:07:07 -04003016Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3017<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 -04003018
Cary Clark682c58d2018-05-16 07:07:07 -04003019Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003020
3021### Parameters
3022
Cary Clark682c58d2018-05-16 07:07:07 -04003023<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3024 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003025 </tr>
3026</table>
3027
3028### Example
3029
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003030<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003031
Cary Clarka90ea222018-10-16 10:30:28 -04003032<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003033
Cary Clarka90ea222018-10-16 10:30:28 -04003034---
Cary Clark08895c42018-02-01 09:37:32 -05003035
Cary Clark224c7002018-06-27 11:00:21 -04003036<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3037The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003038over the destination color.
3039
3040### Example
3041
Cary Clark83647062018-07-18 16:21:51 -04003042<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003043
3044### See Also
3045
Cary Clark224c7002018-06-27 11:00:21 -04003046<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003047
Cary Clark682c58d2018-05-16 07:07:07 -04003048<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003049
3050---
Cary Clark12799e12017-07-28 15:18:29 -04003051
Cary Clark682c58d2018-05-16 07:07:07 -04003052<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003053<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003054</pre>
3055
Cary Clark224c7002018-06-27 11:00:21 -04003056Returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
3057By default, returns <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003058
3059### Return Value
3060
3061mode used to combine source color with destination color
3062
3063### Example
3064
skia-bookmaker525f9a92018-05-03 06:27:39 +00003065<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003066
3067#### Example Output
3068
3069~~~~
3070kSrcOver == getBlendMode
3071kSrcOver != getBlendMode
3072~~~~
3073
3074</fiddle-embed></div>
3075
Cary Clark682c58d2018-05-16 07:07:07 -04003076<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003077
3078---
Cary Clark12799e12017-07-28 15:18:29 -04003079
Cary Clark682c58d2018-05-16 07:07:07 -04003080<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3081bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003082</pre>
3083
Cary Clark224c7002018-06-27 11:00:21 -04003084Returns 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 -04003085
3086### Return Value
3087
Cary Clark224c7002018-06-27 11:00:21 -04003088true 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 -04003089
3090### Example
3091
3092<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3093
3094#### Example Output
3095
3096~~~~
3097isSrcOver == true
3098isSrcOver != true
3099~~~~
3100
3101</fiddle-embed></div>
3102
Cary Clark682c58d2018-05-16 07:07:07 -04003103<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003104
3105---
Cary Clark12799e12017-07-28 15:18:29 -04003106
Cary Clark682c58d2018-05-16 07:07:07 -04003107<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003108void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003109</pre>
3110
Cary Clark224c7002018-06-27 11:00:21 -04003111Sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003112Does not check for valid input.
3113
3114### Parameters
3115
Cary Clark682c58d2018-05-16 07:07:07 -04003116<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark224c7002018-06-27 11:00:21 -04003117 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003118 </tr>
3119</table>
3120
3121### Example
3122
3123<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3124
3125#### Example Output
3126
3127~~~~
3128isSrcOver == true
3129isSrcOver != true
3130~~~~
3131
3132</fiddle-embed></div>
3133
Cary Clarka90ea222018-10-16 10:30:28 -04003134<a name='Path_Effect_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003135
Cary Clarka90ea222018-10-16 10:30:28 -04003136---
Cary Clark08895c42018-02-01 09:37:32 -05003137
Cary Clark682c58d2018-05-16 07:07:07 -04003138<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3139<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3140If <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 -04003141
3142### Example
3143
3144<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3145
3146### See Also
3147
Cary Clark682c58d2018-05-16 07:07:07 -04003148<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003149
Cary Clark682c58d2018-05-16 07:07:07 -04003150<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003151
3152---
Cary Clark12799e12017-07-28 15:18:29 -04003153
Cary Clark682c58d2018-05-16 07:07:07 -04003154<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3155<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003156</pre>
3157
Cary Clark682c58d2018-05-16 07:07:07 -04003158Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3159Does 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 -04003160
3161### Return Value
3162
Cary Clark682c58d2018-05-16 07:07:07 -04003163<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003164
3165### Example
3166
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003167<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003168
3169#### Example Output
3170
3171~~~~
3172nullptr == path effect
3173nullptr != path effect
3174~~~~
3175
3176</fiddle-embed></div>
3177
Cary Clark682c58d2018-05-16 07:07:07 -04003178<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003179
3180---
Cary Clark12799e12017-07-28 15:18:29 -04003181
Cary Clark682c58d2018-05-16 07:07:07 -04003182<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3183<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 -04003184</pre>
3185
Cary Clark682c58d2018-05-16 07:07:07 -04003186Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3187Increases <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 -04003188
3189### Return Value
3190
Cary Clark682c58d2018-05-16 07:07:07 -04003191<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003192
3193### Example
3194
Cary Clark83647062018-07-18 16:21:51 -04003195<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003196
3197#### Example Output
3198
3199~~~~
3200path effect unique: true
3201path effect unique: false
3202~~~~
3203
3204</fiddle-embed></div>
3205
Cary Clark682c58d2018-05-16 07:07:07 -04003206<a name='SkPaint_setPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003207
3208---
Cary Clark12799e12017-07-28 15:18:29 -04003209
Cary Clark682c58d2018-05-16 07:07:07 -04003210<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3211void <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 -04003212</pre>
3213
Cary Clark682c58d2018-05-16 07:07:07 -04003214Sets <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
3215<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003216
Cary Clark682c58d2018-05-16 07:07:07 -04003217Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003218
3219### Parameters
3220
Cary Clark682c58d2018-05-16 07:07:07 -04003221<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3222 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003223 </tr>
3224</table>
3225
3226### Example
3227
3228<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3229
Cary Clarka90ea222018-10-16 10:30:28 -04003230<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003231
Cary Clarka90ea222018-10-16 10:30:28 -04003232---
Cary Clark08895c42018-02-01 09:37:32 -05003233
Cary Clark682c58d2018-05-16 07:07:07 -04003234<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3235<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003236
Cary Clark682c58d2018-05-16 07:07:07 -04003237<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3238creating 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 -04003239modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003240
3241### Example
3242
Cary Clark681287e2018-03-16 11:34:15 -04003243<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003244
Cary Clark682c58d2018-05-16 07:07:07 -04003245<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003246
3247---
Cary Clark12799e12017-07-28 15:18:29 -04003248
Cary Clark682c58d2018-05-16 07:07:07 -04003249<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3250<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003251</pre>
3252
Cary Clark682c58d2018-05-16 07:07:07 -04003253Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
3254Does 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 -04003255
3256### Return Value
3257
Cary Clark682c58d2018-05-16 07:07:07 -04003258<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003259
3260### Example
3261
Cary Clark681287e2018-03-16 11:34:15 -04003262<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003263
3264#### Example Output
3265
3266~~~~
3267nullptr == mask filter
3268nullptr != mask filter
3269~~~~
3270
3271</fiddle-embed></div>
3272
Cary Clark682c58d2018-05-16 07:07:07 -04003273<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003274
3275---
Cary Clark12799e12017-07-28 15:18:29 -04003276
Cary Clark682c58d2018-05-16 07:07:07 -04003277<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3278<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 -04003279</pre>
3280
Cary Clark682c58d2018-05-16 07:07:07 -04003281Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003282
Cary Clark682c58d2018-05-16 07:07:07 -04003283Increases <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 -04003284
3285### Return Value
3286
Cary Clark682c58d2018-05-16 07:07:07 -04003287<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003288
3289### Example
3290
Cary Clark83647062018-07-18 16:21:51 -04003291<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003292
3293#### Example Output
3294
3295~~~~
3296mask filter unique: true
3297mask filter unique: false
3298~~~~
3299
3300</fiddle-embed></div>
3301
Cary Clark682c58d2018-05-16 07:07:07 -04003302<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003303
3304---
Cary Clark12799e12017-07-28 15:18:29 -04003305
Cary Clark682c58d2018-05-16 07:07:07 -04003306<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3307void <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 -04003308</pre>
3309
Cary Clark682c58d2018-05-16 07:07:07 -04003310Sets <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
3311<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
3312<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003313
Cary Clark682c58d2018-05-16 07:07:07 -04003314Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003315
3316### Parameters
3317
Cary Clark682c58d2018-05-16 07:07:07 -04003318<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3319 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003320 </tr>
3321</table>
3322
3323### Example
3324
Cary Clark681287e2018-03-16 11:34:15 -04003325<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003326
Cary Clarka90ea222018-10-16 10:30:28 -04003327<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003328
Cary Clarka90ea222018-10-16 10:30:28 -04003329---
Cary Clark08895c42018-02-01 09:37:32 -05003330
Cary Clark682c58d2018-05-16 07:07:07 -04003331<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
3332<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
3333The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003334implementation.
3335
3336### Example
3337
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003338<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003339
Cary Clark682c58d2018-05-16 07:07:07 -04003340<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003341
3342---
Cary Clark12799e12017-07-28 15:18:29 -04003343
Cary Clark682c58d2018-05-16 07:07:07 -04003344<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3345<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003346</pre>
3347
Cary Clark682c58d2018-05-16 07:07:07 -04003348Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
Cary Clark81abc432018-06-25 16:30:08 -04003349Does not alter <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003350
3351### Return Value
3352
Cary Clark682c58d2018-05-16 07:07:07 -04003353<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003354
3355### Example
3356
Cary Clarkf9603982018-07-17 08:20:27 -04003357<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003358
3359#### Example Output
3360
3361~~~~
3362nullptr == typeface
3363nullptr != typeface
3364~~~~
3365
3366</fiddle-embed></div>
3367
Cary Clark682c58d2018-05-16 07:07:07 -04003368<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003369
3370---
Cary Clark12799e12017-07-28 15:18:29 -04003371
Cary Clark682c58d2018-05-16 07:07:07 -04003372<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3373<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 -04003374</pre>
3375
Cary Clark682c58d2018-05-16 07:07:07 -04003376Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003377
3378### Return Value
3379
Cary Clark682c58d2018-05-16 07:07:07 -04003380<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003381
3382### Example
3383
Cary Clark83647062018-07-18 16:21:51 -04003384<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003385
3386#### Example Output
3387
3388~~~~
3389typeface1 != typeface2
3390typeface1 == typeface2
3391~~~~
3392
3393</fiddle-embed></div>
3394
Cary Clark682c58d2018-05-16 07:07:07 -04003395<a name='SkPaint_setTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003396
3397---
Cary Clark12799e12017-07-28 15:18:29 -04003398
Cary Clark682c58d2018-05-16 07:07:07 -04003399<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3400void <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 -04003401</pre>
3402
Cary Clark682c58d2018-05-16 07:07:07 -04003403Sets <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>.
3404Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3405<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003406
3407### Parameters
3408
Cary Clark682c58d2018-05-16 07:07:07 -04003409<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
3410 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04003411 </tr>
3412</table>
3413
3414### Example
3415
Cary Clark71961fb2018-01-05 14:21:59 -05003416<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003417
Cary Clarka90ea222018-10-16 10:30:28 -04003418<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003419
Cary Clarka90ea222018-10-16 10:30:28 -04003420---
Cary Clark08895c42018-02-01 09:37:32 -05003421
Cary Clark682c58d2018-05-16 07:07:07 -04003422<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 -04003423with <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,
3424which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003425
Cary Clark682c58d2018-05-16 07:07:07 -04003426<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>
3427can 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.
3428<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
3429<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003430
3431### Example
3432
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003433<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003434
Cary Clark682c58d2018-05-16 07:07:07 -04003435<a name='SkPaint_getImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003436
3437---
Cary Clark12799e12017-07-28 15:18:29 -04003438
Cary Clark682c58d2018-05-16 07:07:07 -04003439<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3440<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003441</pre>
3442
Cary Clark682c58d2018-05-16 07:07:07 -04003443Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
3444Does 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 -04003445
3446### Return Value
3447
Cary Clark682c58d2018-05-16 07:07:07 -04003448<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003449
3450### Example
3451
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003452<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003453
3454#### Example Output
3455
3456~~~~
3457nullptr == image filter
3458nullptr != image filter
3459~~~~
3460
3461</fiddle-embed></div>
3462
Cary Clark682c58d2018-05-16 07:07:07 -04003463<a name='SkPaint_refImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003464
3465---
Cary Clark12799e12017-07-28 15:18:29 -04003466
Cary Clark682c58d2018-05-16 07:07:07 -04003467<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3468<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 -04003469</pre>
3470
Cary Clark682c58d2018-05-16 07:07:07 -04003471Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
3472Increases <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 -04003473
3474### Return Value
3475
Cary Clark682c58d2018-05-16 07:07:07 -04003476<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003477
3478### Example
3479
3480<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3481
3482#### Example Output
3483
3484~~~~
3485image filter unique: true
3486image filter unique: false
3487~~~~
3488
3489</fiddle-embed></div>
3490
Cary Clark682c58d2018-05-16 07:07:07 -04003491<a name='SkPaint_setImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003492
3493---
Cary Clark12799e12017-07-28 15:18:29 -04003494
Cary Clark682c58d2018-05-16 07:07:07 -04003495<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3496void <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 -04003497</pre>
3498
Cary Clark682c58d2018-05-16 07:07:07 -04003499Sets <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
3500<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 -04003501on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003502
Cary Clark682c58d2018-05-16 07:07:07 -04003503Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003504
3505### Parameters
3506
Cary Clark682c58d2018-05-16 07:07:07 -04003507<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
3508 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003509 </tr>
3510</table>
3511
3512### Example
3513
3514<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3515
Cary Clarka90ea222018-10-16 10:30:28 -04003516<a name='Draw_Looper_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003517
Cary Clarka90ea222018-10-16 10:30:28 -04003518---
Cary Clark08895c42018-02-01 09:37:32 -05003519
Cary Clark682c58d2018-05-16 07:07:07 -04003520<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 -04003521to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003522
Cary Clark682c58d2018-05-16 07:07:07 -04003523<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3524<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3525Set <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 -04003526
3527### Example
3528
3529<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3530
Cary Clark682c58d2018-05-16 07:07:07 -04003531<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003532
3533---
Cary Clark12799e12017-07-28 15:18:29 -04003534
Cary Clark682c58d2018-05-16 07:07:07 -04003535<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3536<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003537</pre>
3538
Cary Clark682c58d2018-05-16 07:07:07 -04003539Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
3540Does 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 -04003541
3542### Return Value
3543
Cary Clark682c58d2018-05-16 07:07:07 -04003544<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003545
3546### Example
3547
3548<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3549
3550#### Example Output
3551
3552~~~~
3553nullptr == draw looper
3554nullptr != draw looper
3555~~~~
3556
3557</fiddle-embed></div>
3558
Cary Clark682c58d2018-05-16 07:07:07 -04003559<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003560
3561---
Cary Clark12799e12017-07-28 15:18:29 -04003562
Cary Clark682c58d2018-05-16 07:07:07 -04003563<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3564<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 -04003565</pre>
3566
Cary Clark682c58d2018-05-16 07:07:07 -04003567Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
3568Increases <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 -04003569
3570### Return Value
3571
Cary Clark682c58d2018-05-16 07:07:07 -04003572<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003573
3574### Example
3575
3576<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3577
3578#### Example Output
3579
3580~~~~
3581draw looper unique: true
3582draw looper unique: false
3583~~~~
3584
3585</fiddle-embed></div>
3586
Cary Clark682c58d2018-05-16 07:07:07 -04003587<a name='SkPaint_getLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003588
3589---
Cary Clark12799e12017-07-28 15:18:29 -04003590
Cary Clark682c58d2018-05-16 07:07:07 -04003591<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3592<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003593</pre>
3594
Cary Clark682c58d2018-05-16 07:07:07 -04003595Deprecated.
3596
Cary Clark682c58d2018-05-16 07:07:07 -04003597<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003598
3599---
Cary Clark12799e12017-07-28 15:18:29 -04003600
Cary Clark682c58d2018-05-16 07:07:07 -04003601<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3602void <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 -04003603</pre>
3604
Cary Clark682c58d2018-05-16 07:07:07 -04003605Sets <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
3606<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 -04003607drawing unaltered.
3608
Cary Clark682c58d2018-05-16 07:07:07 -04003609Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003610
3611### Parameters
3612
Cary Clark682c58d2018-05-16 07:07:07 -04003613<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
3614 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003615 </tr>
3616</table>
3617
3618### Example
3619
3620<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3621
Cary Clark682c58d2018-05-16 07:07:07 -04003622<a name='SkPaint_setLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003623
3624---
Cary Clark12799e12017-07-28 15:18:29 -04003625
Cary Clark682c58d2018-05-16 07:07:07 -04003626<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3627void <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 -04003628</pre>
3629
Cary Clark682c58d2018-05-16 07:07:07 -04003630Deprecated.
3631
Cary Clarka90ea222018-10-16 10:30:28 -04003632<a name='Text_Align'></a>
3633
Cary Clark12799e12017-07-28 15:18:29 -04003634---
3635
Cary Clarka90ea222018-10-16 10:30:28 -04003636<a name='SkPaint_Align'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003637
Cary Clarka90ea222018-10-16 10:30:28 -04003638---
Cary Clark12799e12017-07-28 15:18:29 -04003639
Cary Clarka560c472017-11-27 10:44:06 -05003640<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003641 enum <a href='#SkPaint_Align'>Align</a> {
Cary Clark61313f32018-10-08 14:57:48 -04003642 <a href='#SkPaint_kLeft_Align'>kLeft_Align</a>,
3643 <a href='#SkPaint_kCenter_Align'>kCenter_Align</a>,
3644 <a href='#SkPaint_kRight_Align'>kRight_Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003645 };
Cary Clarka90ea222018-10-16 10:30:28 -04003646</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04003647
Cary Clarka90ea222018-10-16 10:30:28 -04003648<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003649 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05003650</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003651
Cary Clark682c58d2018-05-16 07:07:07 -04003652<a href='#SkPaint_Align'>Align</a> adjusts the text relative to the text position.
3653<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 -04003654<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 -04003655and <a href='SkCanvas_Reference#SkCanvas_drawString'>SkCanvas::drawString</a>;
3656as 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 -04003657
3658The text position is set by the font for both horizontal and vertical text.
3659Typically, for horizontal text, the position is to the left side of the glyph on the
3660base line; and for vertical text, the position is the horizontal center of the glyph
3661at the caps height.
3662
Cary Clark682c58d2018-05-16 07:07:07 -04003663<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 -04003664using the metrics returned by the font.
3665
Cary Clark682c58d2018-05-16 07:07:07 -04003666<a href='#SkPaint_Align'>Align</a> defaults to <a href='#SkPaint_kLeft_Align'>kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003667
3668### Constants
3669
Cary Clark682c58d2018-05-16 07:07:07 -04003670<table style='border-collapse: collapse; width: 62.5em'>
3671 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3672<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3673<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3674 <tr style='background-color: #f0f0f0; '>
3675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
3676 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3677 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3678Leaves the glyph at the position computed by the font offset by the text position.
Cary Clark1a8d7622018-03-05 13:26:16 -05003679</td>
Cary Clark12799e12017-07-28 15:18:29 -04003680 </tr>
3681 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003682 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
3683 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3684 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3aca39d2018-10-23 14:44:05 -04003685Moves the glyph half its width.
Cary Clark682c58d2018-05-16 07:07:07 -04003686</td>
3687 </tr>
3688 <tr style='background-color: #f0f0f0; '>
3689 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
3690 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3691 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3aca39d2018-10-23 14:44:05 -04003692Moves the glyph by its width.
Cary Clark1a8d7622018-03-05 13:26:16 -05003693</td>
Cary Clark12799e12017-07-28 15:18:29 -04003694 </tr>
3695 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003696 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
3697 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3698 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04003699May be used to verify that <a href='#SkPaint_Align'>Align</a> is a legal value.
3700</td>
Cary Clark12799e12017-07-28 15:18:29 -04003701 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003702</table>
Cary Clark12799e12017-07-28 15:18:29 -04003703
3704### Example
3705
Cary Clark14768f62018-10-29 20:33:51 -04003706<div><fiddle-embed name="6ee1866e4da0064d9d340b07e05f0aca"><div>Each position separately moves the glyph in drawPosText.
Cary Clark1a8d7622018-03-05 13:26:16 -05003707</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003708
Cary Clark682c58d2018-05-16 07:07:07 -04003709<a name='SkPaint_getTextAlign'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003710
3711---
Cary Clark12799e12017-07-28 15:18:29 -04003712
Cary Clark682c58d2018-05-16 07:07:07 -04003713<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3714<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003715</pre>
3716
Cary Clark14768f62018-10-29 20:33:51 -04003717Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04003718
Cary Clark682c58d2018-05-16 07:07:07 -04003719<a name='SkPaint_setTextAlign'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003720
3721---
Cary Clark12799e12017-07-28 15:18:29 -04003722
Cary Clark682c58d2018-05-16 07:07:07 -04003723<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3724void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04003725</pre>
3726
Cary Clark14768f62018-10-29 20:33:51 -04003727Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04003728
Cary Clarka90ea222018-10-16 10:30:28 -04003729<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003730
Cary Clarka90ea222018-10-16 10:30:28 -04003731---
Cary Clark08895c42018-02-01 09:37:32 -05003732
Cary Clark682c58d2018-05-16 07:07:07 -04003733<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
3734<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
3735<a href='#Text_Size'>Text Size</a> defaults to 12.
3736Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003737
3738### Example
3739
3740<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3741
Cary Clark682c58d2018-05-16 07:07:07 -04003742<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003743
3744---
Cary Clark12799e12017-07-28 15:18:29 -04003745
Cary Clark682c58d2018-05-16 07:07:07 -04003746<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3747<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003748</pre>
3749
Cary Clark682c58d2018-05-16 07:07:07 -04003750Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003751
3752### Return Value
3753
3754typographic height of text
3755
3756### Example
3757
skia-bookmaker233c6522018-07-04 05:33:26 +00003758<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003759
Cary Clark682c58d2018-05-16 07:07:07 -04003760<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003761
3762---
Cary Clark12799e12017-07-28 15:18:29 -04003763
Cary Clark682c58d2018-05-16 07:07:07 -04003764<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3765void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003766</pre>
3767
Cary Clark682c58d2018-05-16 07:07:07 -04003768Sets <a href='#Text_Size'>Text Size</a> in points.
3769Has 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 -04003770
3771### Parameters
3772
Cary Clark682c58d2018-05-16 07:07:07 -04003773<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
3774 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04003775 </tr>
3776</table>
3777
3778### Example
3779
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003780<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003781
Cary Clarka90ea222018-10-16 10:30:28 -04003782<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003783
Cary Clarka90ea222018-10-16 10:30:28 -04003784---
Cary Clark08895c42018-02-01 09:37:32 -05003785
Cary Clark682c58d2018-05-16 07:07:07 -04003786<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
3787<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003788is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003789<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
3790<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003791
3792### Example
3793
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003794<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003795
Cary Clark682c58d2018-05-16 07:07:07 -04003796<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003797
3798---
Cary Clark12799e12017-07-28 15:18:29 -04003799
Cary Clark682c58d2018-05-16 07:07:07 -04003800<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3801<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003802</pre>
3803
Cary Clark682c58d2018-05-16 07:07:07 -04003804Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003805Default value is 1.
3806
3807### Return Value
3808
3809text horizontal scale
3810
3811### Example
3812
3813<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3814
Cary Clark682c58d2018-05-16 07:07:07 -04003815<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003816
3817---
Cary Clark12799e12017-07-28 15:18:29 -04003818
Cary Clark682c58d2018-05-16 07:07:07 -04003819<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3820void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003821</pre>
3822
Cary Clark682c58d2018-05-16 07:07:07 -04003823Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003824Default value is 1.
3825
3826### Parameters
3827
Cary Clark682c58d2018-05-16 07:07:07 -04003828<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
3829 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003830 </tr>
3831</table>
3832
3833### Example
3834
3835<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3836
Cary Clarka90ea222018-10-16 10:30:28 -04003837<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003838
Cary Clarka90ea222018-10-16 10:30:28 -04003839---
Cary Clark08895c42018-02-01 09:37:32 -05003840
Cary Clark682c58d2018-05-16 07:07:07 -04003841<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
3842<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003843is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003844<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
3845<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003846
3847### Example
3848
3849<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3850
Cary Clark682c58d2018-05-16 07:07:07 -04003851<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003852
3853---
Cary Clark12799e12017-07-28 15:18:29 -04003854
Cary Clark682c58d2018-05-16 07:07:07 -04003855<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3856<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003857</pre>
3858
Cary Clark682c58d2018-05-16 07:07:07 -04003859Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003860Default value is zero.
3861
3862### Return Value
3863
3864additional shear in x-axis relative to y-axis
3865
3866### Example
3867
Cary Clark7f644ec2018-07-19 10:50:44 -04003868<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003869
Cary Clark682c58d2018-05-16 07:07:07 -04003870<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003871
3872---
Cary Clark12799e12017-07-28 15:18:29 -04003873
Cary Clark682c58d2018-05-16 07:07:07 -04003874<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3875void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003876</pre>
3877
Cary Clark682c58d2018-05-16 07:07:07 -04003878Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003879Default value is zero.
3880
3881### Parameters
3882
Cary Clark682c58d2018-05-16 07:07:07 -04003883<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
3884 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003885 </tr>
3886</table>
3887
3888### Example
3889
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003890<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003891
Cary Clarka90ea222018-10-16 10:30:28 -04003892<a name='Text_Encoding'></a>
3893
Cary Clark12799e12017-07-28 15:18:29 -04003894---
3895
Cary Clarka90ea222018-10-16 10:30:28 -04003896<a name='SkPaint_TextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003897
Cary Clarka90ea222018-10-16 10:30:28 -04003898---
Cary Clark12799e12017-07-28 15:18:29 -04003899
Cary Clarka560c472017-11-27 10:44:06 -05003900<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003901 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
Cary Clark61313f32018-10-08 14:57:48 -04003902 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
3903 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
3904 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
3905 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003906 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003907</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003908
Cary Clark682c58d2018-05-16 07:07:07 -04003909<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
3910size, 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 -04003911
Cary Clarka560c472017-11-27 10:44:06 -05003912Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003913All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003914in the total storage required.
3915
Cary Clark682c58d2018-05-16 07:07:07 -04003916<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 -04003917
Cary Clark682c58d2018-05-16 07:07:07 -04003918<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 -04003919
Cary Clark682c58d2018-05-16 07:07:07 -04003920<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 -04003921
Cary Clark682c58d2018-05-16 07:07:07 -04003922<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 -04003923A glyph index is a 16-bit word.
3924
Cary Clark682c58d2018-05-16 07:07:07 -04003925<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 -04003926
3927### Constants
3928
Cary Clark682c58d2018-05-16 07:07:07 -04003929<table style='border-collapse: collapse; width: 62.5em'>
3930 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3931<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3932<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3933 <tr style='background-color: #f0f0f0; '>
3934 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
3935 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3936 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3937uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04003938 </tr>
3939 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003940 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
3941 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3942 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3943uses two byte words to represent most of Unicode</td>
3944 </tr>
3945 <tr style='background-color: #f0f0f0; '>
3946 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
3947 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3948 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3949uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04003950 </tr>
3951 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003952 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
3953 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3954 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3955uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04003956 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003957</table>
Cary Clark12799e12017-07-28 15:18:29 -04003958
3959### Example
3960
Cary Clarka560c472017-11-27 10:44:06 -05003961<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3962Second line is encoded in UTF-16.
3963Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04003964Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003965</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003966
Cary Clark682c58d2018-05-16 07:07:07 -04003967<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003968
3969---
Cary Clark12799e12017-07-28 15:18:29 -04003970
Cary Clark682c58d2018-05-16 07:07:07 -04003971<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3972<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003973</pre>
3974
Cary Clark682c58d2018-05-16 07:07:07 -04003975Returns <a href='#Text_Encoding'>Text Encoding</a>.
3976<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 -04003977
3978### Return Value
3979
Cary Clark682c58d2018-05-16 07:07:07 -04003980one 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
3981<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003982
3983### Example
3984
skia-bookmaker525f9a92018-05-03 06:27:39 +00003985<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04003986
3987#### Example Output
3988
3989~~~~
3990kUTF8_TextEncoding == text encoding
3991kGlyphID_TextEncoding == text encoding
3992~~~~
3993
3994</fiddle-embed></div>
3995
Cary Clark682c58d2018-05-16 07:07:07 -04003996<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003997
3998---
Cary Clark12799e12017-07-28 15:18:29 -04003999
Cary Clark682c58d2018-05-16 07:07:07 -04004000<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4001void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004002</pre>
4003
Cary Clark682c58d2018-05-16 07:07:07 -04004004Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4005<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4006Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004007
4008### Parameters
4009
Cary Clark682c58d2018-05-16 07:07:07 -04004010<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4011 <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
4012<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004013 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004014#
4015
Cary Clark12799e12017-07-28 15:18:29 -04004016</table>
4017
4018### Example
4019
Cary Clark75fd4492018-06-20 12:45:16 -04004020<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004021
4022#### Example Output
4023
4024~~~~
40254 != text encoding
4026~~~~
4027
4028</fiddle-embed></div>
4029
Cary Clarka90ea222018-10-16 10:30:28 -04004030<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004031
Cary Clarka90ea222018-10-16 10:30:28 -04004032---
Cary Clark08895c42018-02-01 09:37:32 -05004033
Cary Clark682c58d2018-05-16 07:07:07 -04004034<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>.
4035The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4036<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004037
Cary Clark682c58d2018-05-16 07:07:07 -04004038<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 -04004039X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4040are positive.
4041Y-axis values above the baseline are negative, and below the baseline are positive.
4042
4043### Example
4044
Ben Wagnere5806492017-11-09 12:08:31 -05004045<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004046
Cary Clark61313f32018-10-08 14:57:48 -04004047<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04004048
Cary Clarka90ea222018-10-16 10:30:28 -04004049---
4050
Cary Clarka560c472017-11-27 10:44:06 -05004051<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004052 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4053 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004054 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4055 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4056 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4057 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004058 };
Cary Clark12799e12017-07-28 15:18:29 -04004059
Cary Clarka90ea222018-10-16 10:30:28 -04004060 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4061 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4062 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4063 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4064 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4065 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4066 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4067 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4068 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4069 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4070 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4071 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4072 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4073 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4074 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4075 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004076
Cary Clark61313f32018-10-08 14:57:48 -04004077 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4078 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
4079 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4080 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
Cary Clark186d08f2018-04-03 08:43:27 -04004081 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004082</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004083
Cary Clark682c58d2018-05-16 07:07:07 -04004084<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
4085computed 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 -04004086not available.
4087
Cary Clark5538c132018-06-14 12:28:14 -04004088All vertical values are relative to the baseline, on a y-axis pointing down.
4089Zero is on the baseline, negative values are above the baseline, and positive
4090values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05004091
Cary Clark682c58d2018-05-16 07:07:07 -04004092<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 -04004093are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004094
Cary Clark682c58d2018-05-16 07:07:07 -04004095<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 -04004096are valid, since their value may be zero.
4097
Cary Clarka90ea222018-10-16 10:30:28 -04004098<a name='SkPaint_FontMetrics_FontMetricsFlags'></a>
4099
4100---
Cary Clark12799e12017-07-28 15:18:29 -04004101
Cary Clarka560c472017-11-27 10:44:06 -05004102<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004103 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004104 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4105 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4106 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4107 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004108 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004109</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004110
Cary Clark682c58d2018-05-16 07:07:07 -04004111<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 -04004112the underline or strikeout metric may be valid and zero.
4113Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4114
Cary Clark12799e12017-07-28 15:18:29 -04004115### Constants
4116
Cary Clark682c58d2018-05-16 07:07:07 -04004117<table style='border-collapse: collapse; width: 62.5em'>
4118 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4119<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4120<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4121 <tr style='background-color: #f0f0f0; '>
4122 <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>
4123 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4124 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4125set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004126 </tr>
4127 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004128 <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>
4129 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4130 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4131set if fUnderlinePosition is valid</td>
4132 </tr>
4133 <tr style='background-color: #f0f0f0; '>
4134 <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>
4135 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4136 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4137set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004138 </tr>
4139 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004140 <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>
4141 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4142 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4143set if fStrikeoutPosition is valid</td>
4144 </tr>
Cary Clark61313f32018-10-08 14:57:48 -04004145</table><table style='border-collapse: collapse; width: 62.5em'>
Cary Clark682c58d2018-05-16 07:07:07 -04004146
Cary Clark682c58d2018-05-16 07:07:07 -04004147 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
Cary Clark61313f32018-10-08 14:57:48 -04004148<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Member</th>
Cary Clark682c58d2018-05-16 07:07:07 -04004149<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4150 <tr style='background-color: #f0f0f0; '>
4151 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
4152 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
4153 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4154is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004155 </tr>
4156 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4158 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
4159 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004160Greatest extent above the baseline for any glyph.
4161Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004162</td>
4163 </tr>
4164 <tr style='background-color: #f0f0f0; '>
4165 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4166 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
4167 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004168Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004169Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004170</td>
4171 </tr>
4172 <tr>
4173 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4174 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
4175 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004176Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004177Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004178</td>
4179 </tr>
4180 <tr style='background-color: #f0f0f0; '>
4181 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4182 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
4183 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004184Greatest extent below the baseline for any glyph.
4185Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004186</td>
4187 </tr>
4188 <tr>
4189 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4190 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
4191 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004192Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004193Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004194</td>
4195 </tr>
4196 <tr style='background-color: #f0f0f0; '>
4197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4198 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
4199 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004200Average character width, if it is available.
4201Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004202</td>
4203 </tr>
4204 <tr>
4205 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4206 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
4207 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4208maximum character width</td>
4209 </tr>
4210 <tr style='background-color: #f0f0f0; '>
4211 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4212 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
4213 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004214Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004215Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004216</td>
4217 </tr>
4218 <tr>
4219 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4220 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
4221 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004222Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004223Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004224</td>
4225 </tr>
4226 <tr style='background-color: #f0f0f0; '>
4227 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4228 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
4229 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004230May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004231</td>
4232 </tr>
4233 <tr>
4234 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4235 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
4236 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004237May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004238</td>
4239 </tr>
4240 <tr style='background-color: #f0f0f0; '>
4241 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4242 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
4243 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4244If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4245If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
4246</td>
4247 </tr>
4248 <tr>
4249 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4250 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
4251 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004252Position of the top of the underline stroke relative to the baseline.
4253Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004254
Cary Clark682c58d2018-05-16 07:07:07 -04004255If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4256If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
4257</td>
4258 </tr>
4259 <tr style='background-color: #f0f0f0; '>
4260 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4261 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
4262 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4263If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4264If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
4265</td>
4266 </tr>
4267 <tr>
4268 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4269 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
4270 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004271Position of the bottom of the strikeout stroke relative to the baseline.
4272Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004273
Cary Clark682c58d2018-05-16 07:07:07 -04004274If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4275If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
4276</td>
4277 </tr>
4278</table>
Cary Clark12799e12017-07-28 15:18:29 -04004279
Cary Clark682c58d2018-05-16 07:07:07 -04004280<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004281
4282---
Cary Clark12799e12017-07-28 15:18:29 -04004283
Cary Clark682c58d2018-05-16 07:07:07 -04004284<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4285bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004286</pre>
4287
Cary Clark80247e52018-07-11 16:18:41 -04004288Returns 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 -04004289<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,
4290return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004291
4292### Parameters
4293
Cary Clark682c58d2018-05-16 07:07:07 -04004294<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
4295 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004296 </tr>
4297</table>
4298
4299### Return Value
4300
4301true if font specifies underline width
4302
Cary Clark682c58d2018-05-16 07:07:07 -04004303<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004304
4305---
Cary Clark12799e12017-07-28 15:18:29 -04004306
Cary Clark682c58d2018-05-16 07:07:07 -04004307<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4308bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004309</pre>
4310
Cary Clark80247e52018-07-11 16:18:41 -04004311Returns 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 -04004312<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,
4313return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004314
4315### Parameters
4316
Cary Clark682c58d2018-05-16 07:07:07 -04004317<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
4318 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004319 </tr>
4320</table>
4321
4322### Return Value
4323
Cary Clark682c58d2018-05-16 07:07:07 -04004324true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004325
Cary Clark682c58d2018-05-16 07:07:07 -04004326<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004327
4328---
Cary Clark12799e12017-07-28 15:18:29 -04004329
Cary Clark682c58d2018-05-16 07:07:07 -04004330<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4331bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004332</pre>
4333
Cary Clark80247e52018-07-11 16:18:41 -04004334Returns 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 -04004335<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,
4336return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004337
4338### Parameters
4339
Cary Clark682c58d2018-05-16 07:07:07 -04004340<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
4341 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004342 </tr>
4343</table>
4344
4345### Return Value
4346
4347true if font specifies strikeout width
4348
Cary Clark682c58d2018-05-16 07:07:07 -04004349<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004350
4351---
Cary Clark12799e12017-07-28 15:18:29 -04004352
Cary Clark682c58d2018-05-16 07:07:07 -04004353<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4354bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004355</pre>
4356
Cary Clark80247e52018-07-11 16:18:41 -04004357Returns 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 -04004358<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,
4359return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004360
4361### Parameters
4362
Cary Clark682c58d2018-05-16 07:07:07 -04004363<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
4364 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004365 </tr>
4366</table>
4367
4368### Return Value
4369
Cary Clark682c58d2018-05-16 07:07:07 -04004370true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004371
Cary Clark682c58d2018-05-16 07:07:07 -04004372<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004373
4374---
Cary Clark12799e12017-07-28 15:18:29 -04004375
Cary Clark682c58d2018-05-16 07:07:07 -04004376<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4377<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 -04004378</pre>
4379
Cary Clark682c58d2018-05-16 07:07:07 -04004380Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
4381The 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 -04004382descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004383If <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>.
4384Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4385dimensions 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>,
4386<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
4387Results 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 -04004388is ignored.
4389
4390### Parameters
4391
Cary Clark682c58d2018-05-16 07:07:07 -04004392<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
4393 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
4394 </tr>
4395 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
4396 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04004397 </tr>
4398</table>
4399
4400### Return Value
4401
4402recommended spacing between lines
4403
4404### Example
4405
4406<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4407
4408### See Also
4409
Cary Clark682c58d2018-05-16 07:07:07 -04004410<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 -04004411
Cary Clark682c58d2018-05-16 07:07:07 -04004412<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004413
4414---
Cary Clark12799e12017-07-28 15:18:29 -04004415
Cary Clark682c58d2018-05-16 07:07:07 -04004416<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4417<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004418</pre>
4419
4420Returns the recommended spacing between lines: the sum of metrics
4421descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004422Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4423dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
4424Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004425
4426### Return Value
4427
4428recommended spacing between lines
4429
4430### Example
4431
4432<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4433
4434#### Example Output
4435
4436~~~~
4437textSize: 12 fontSpacing: 13.9688
4438textSize: 18 fontSpacing: 20.9531
4439textSize: 24 fontSpacing: 27.9375
4440textSize: 32 fontSpacing: 37.25
4441~~~~
4442
4443</fiddle-embed></div>
4444
Cary Clark682c58d2018-05-16 07:07:07 -04004445<a name='SkPaint_getFontBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004446
4447---
Cary Clark12799e12017-07-28 15:18:29 -04004448
Cary Clark682c58d2018-05-16 07:07:07 -04004449<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4450<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004451</pre>
4452
Cary Clark682c58d2018-05-16 07:07:07 -04004453Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
4454Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
4455ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
4456and <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 -04004457
Cary Clark682c58d2018-05-16 07:07:07 -04004458If <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,
4459returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
4460<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 -04004461
4462### Return Value
4463
Cary Clark682c58d2018-05-16 07:07:07 -04004464union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004465
4466### Example
4467
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004468<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
Cary Clark12799e12017-07-28 15:18:29 -04004469
4470#### Example Output
4471
4472~~~~
4473metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4474font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4475~~~~
4476
4477</fiddle-embed></div>
4478
Cary Clark682c58d2018-05-16 07:07:07 -04004479<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004480
4481---
Cary Clark12799e12017-07-28 15:18:29 -04004482
Cary Clark682c58d2018-05-16 07:07:07 -04004483<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4484int <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 -04004485</pre>
4486
Cary Clark682c58d2018-05-16 07:07:07 -04004487Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
4488Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
4489<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>.
4490<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004491
Cary Clark682c58d2018-05-16 07:07:07 -04004492Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004493
Cary Clark682c58d2018-05-16 07:07:07 -04004494If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
4495If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004496
Cary Clark682c58d2018-05-16 07:07:07 -04004497If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
4498<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004499
4500### Parameters
4501
Cary Clark682c58d2018-05-16 07:07:07 -04004502<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
4503 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4504 </tr>
4505 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
4506 <td>length of character storage in bytes</td>
4507 </tr>
4508 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
4509 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004510 </tr>
4511</table>
4512
4513### Return Value
4514
Cary Clark682c58d2018-05-16 07:07:07 -04004515number 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 -04004516
4517### Example
4518
4519<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4520
Cary Clark682c58d2018-05-16 07:07:07 -04004521<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004522
4523---
Cary Clark12799e12017-07-28 15:18:29 -04004524
Cary Clark682c58d2018-05-16 07:07:07 -04004525<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4526int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004527</pre>
4528
Cary Clark682c58d2018-05-16 07:07:07 -04004529Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
4530Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
4531Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004532
4533### Parameters
4534
Cary Clark682c58d2018-05-16 07:07:07 -04004535<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
4536 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4537 </tr>
4538 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
4539 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04004540 </tr>
4541</table>
4542
4543### Return Value
4544
Cary Clark682c58d2018-05-16 07:07:07 -04004545number 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 -04004546
4547### Example
4548
Cary Clarkf9603982018-07-17 08:20:27 -04004549<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04004550
4551#### Example Output
4552
4553~~~~
4554count = 5
4555~~~~
4556
4557</fiddle-embed></div>
4558
Cary Clark682c58d2018-05-16 07:07:07 -04004559<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004560
4561---
Cary Clark12799e12017-07-28 15:18:29 -04004562
Cary Clark682c58d2018-05-16 07:07:07 -04004563<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4564bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004565</pre>
4566
Cary Clark682c58d2018-05-16 07:07:07 -04004567Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
4568Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
4569<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004570
Cary Clark682c58d2018-05-16 07:07:07 -04004571If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
4572returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
4573does 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 -04004574
Cary Clark682c58d2018-05-16 07:07:07 -04004575Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004576
4577### Parameters
4578
Cary Clark682c58d2018-05-16 07:07:07 -04004579<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
4580 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
4581 </tr>
4582 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
4583 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004584 </tr>
4585</table>
4586
4587### Return Value
4588
Cary Clark682c58d2018-05-16 07:07:07 -04004589true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004590
Ruiqi Mao94d57c42018-07-02 15:20:10 -04004591<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05004592corresponding to the Unicode surrogate code point.
4593</div>
Cary Clark12799e12017-07-28 15:18:29 -04004594
4595#### Example Output
4596
4597~~~~
45980x00b0 == has char
45990xd800 != has char
4600~~~~
4601
Cary Clark12799e12017-07-28 15:18:29 -04004602### Example
4603
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004604<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 -04004605that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004606</div>
Cary Clark12799e12017-07-28 15:18:29 -04004607
4608#### Example Output
4609
4610~~~~
46110x01ff == has glyph
46120x0000 != has glyph
46130xffff == has glyph
4614~~~~
4615
4616</fiddle-embed></div>
4617
4618### See Also
4619
Cary Clark682c58d2018-05-16 07:07:07 -04004620<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004621
Cary Clark682c58d2018-05-16 07:07:07 -04004622<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004623
4624---
Cary Clark12799e12017-07-28 15:18:29 -04004625
Cary Clark682c58d2018-05-16 07:07:07 -04004626<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4627void <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 -04004628</pre>
4629
Cary Clark682c58d2018-05-16 07:07:07 -04004630Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
4631<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
4632Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
4633by <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 -04004634
Cary Clark682c58d2018-05-16 07:07:07 -04004635Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004636
4637### Parameters
4638
Cary Clark682c58d2018-05-16 07:07:07 -04004639<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
4640 <td>array of indices into font</td>
4641 </tr>
4642 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
4643 <td>length of glyph array</td>
4644 </tr>
4645 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
4646 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04004647 </tr>
4648</table>
4649
4650### Example
4651
skia-bookmakerb95bbba2018-07-06 05:23:23 +00004652<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 -05004653</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004654
Cary Clarka90ea222018-10-16 10:30:28 -04004655<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004656
Cary Clark682c58d2018-05-16 07:07:07 -04004657<a name='SkPaint_measureText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004658
4659---
Cary Clark12799e12017-07-28 15:18:29 -04004660
Cary Clark682c58d2018-05-16 07:07:07 -04004661<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4662<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 -04004663</pre>
4664
Cary Clark3aca39d2018-10-23 14:44:05 -04004665Returns the advance width of <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004666The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
4667Uses <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,
4668and <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
4669<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
4670Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
4671The 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 -04004672
4673### Parameters
4674
Cary Clark682c58d2018-05-16 07:07:07 -04004675<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
4676 <td>character codes or glyph indices to be measured</td>
4677 </tr>
4678 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
4679 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
4680 </tr>
4681 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
4682 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004683 </tr>
4684</table>
4685
4686### Return Value
4687
4688advance width or height
4689
4690### Example
4691
Cary Clark83647062018-07-18 16:21:51 -04004692<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004693
Cary Clark682c58d2018-05-16 07:07:07 -04004694<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05004695
Cary Clarka90ea222018-10-16 10:30:28 -04004696---
4697
Cary Clark682c58d2018-05-16 07:07:07 -04004698<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4699<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 -04004700</pre>
4701
Cary Clark3aca39d2018-10-23 14:44:05 -04004702Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004703The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
4704Uses <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,
4705and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4706Does not scale the advance or bounds by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004707
4708### Parameters
4709
Cary Clark682c58d2018-05-16 07:07:07 -04004710<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
4711 <td>character codes or glyph indices to be measured</td>
4712 </tr>
4713 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
4714 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004715 </tr>
4716</table>
4717
4718### Return Value
4719
4720advance width or height
4721
4722### Example
4723
4724<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4725
4726#### Example Output
4727
4728~~~~
4729default width = 5
4730double width = 10
4731~~~~
4732
4733</fiddle-embed></div>
4734
Cary Clark682c58d2018-05-16 07:07:07 -04004735<a name='SkPaint_breakText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004736
4737---
Cary Clark12799e12017-07-28 15:18:29 -04004738
Cary Clark682c58d2018-05-16 07:07:07 -04004739<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4740size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
4741 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004742</pre>
4743
Cary Clark682c58d2018-05-16 07:07:07 -04004744Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
Cary Clark3aca39d2018-10-23 14:44:05 -04004745The <a href='#SkPaint_breakText_text'>text</a> fragment fits if its advance width is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004746Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4747Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
4748Uses <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,
4749and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4750Does 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 -04004751
4752### Parameters
4753
Cary Clark682c58d2018-05-16 07:07:07 -04004754<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
4755 <td>character codes or glyph indices to be measured</td>
4756 </tr>
4757 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
4758 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
4759 </tr>
4760 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
4761 <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>
4762 </tr>
4763 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
4764 <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 -04004765 </tr>
4766</table>
4767
4768### Return Value
4769
Cary Clark682c58d2018-05-16 07:07:07 -04004770bytes 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 -04004771
4772### Example
4773
Cary Clark682c58d2018-05-16 07:07:07 -04004774<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
4775<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 -05004776</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004777
Cary Clark682c58d2018-05-16 07:07:07 -04004778<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004779
4780---
Cary Clark12799e12017-07-28 15:18:29 -04004781
Cary Clark682c58d2018-05-16 07:07:07 -04004782<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4783int <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 -04004784</pre>
4785
Cary Clark682c58d2018-05-16 07:07:07 -04004786Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
4787the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4788Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4789If <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.
4790if <a href='#SkPaint_getTextWidths_bounds'>bounds</a> is not nullptr, <a href='#SkPaint_getTextWidths_bounds'>bounds</a> must be an array of glyph count entries.
Cary Clark3aca39d2018-10-23 14:44:05 -04004791Widths returns the horizontal advance.
Cary Clark682c58d2018-05-16 07:07:07 -04004792Uses <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,
4793and <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>.
4794Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
4795Does 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 -04004796
4797### Parameters
4798
Cary Clark682c58d2018-05-16 07:07:07 -04004799<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
4800 <td>character codes or glyph indices to be measured</td>
4801 </tr>
4802 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
4803 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
4804 </tr>
4805 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
4806 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
4807 </tr>
4808 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
4809 <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 -04004810 </tr>
4811</table>
4812
4813### Return Value
4814
Cary Clark682c58d2018-05-16 07:07:07 -04004815glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004816
4817### Example
4818
Cary Clarkf9603982018-07-17 08:20:27 -04004819<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 -04004820The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004821</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004822
Cary Clarka90ea222018-10-16 10:30:28 -04004823<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004824
Cary Clark682c58d2018-05-16 07:07:07 -04004825<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 -04004826
Cary Clark682c58d2018-05-16 07:07:07 -04004827<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004828
4829---
Cary Clark12799e12017-07-28 15:18:29 -04004830
Cary Clark682c58d2018-05-16 07:07:07 -04004831<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4832void <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 -04004833</pre>
4834
Cary Clark682c58d2018-05-16 07:07:07 -04004835Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
4836Uses <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,
4837and <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.
4838All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
4839Uses <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 -04004840
4841### Parameters
4842
Cary Clark682c58d2018-05-16 07:07:07 -04004843<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
4844 <td>character codes or glyph indices</td>
4845 </tr>
4846 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4847 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4848 </tr>
4849 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004850 <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 -04004851 </tr>
4852 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004853 <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 -04004854 </tr>
4855 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
4856 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004857 </tr>
4858</table>
4859
4860### Example
4861
Cary Clark682c58d2018-05-16 07:07:07 -04004862<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 -05004863the offset location. The result is rendered with one draw call.
4864</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004865
Cary Clark682c58d2018-05-16 07:07:07 -04004866<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004867
4868---
Cary Clark12799e12017-07-28 15:18:29 -04004869
Cary Clark682c58d2018-05-16 07:07:07 -04004870<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4871void <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 -04004872</pre>
4873
Cary Clark682c58d2018-05-16 07:07:07 -04004874Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
4875Uses <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,
4876and <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.
4877All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
4878Uses <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>.
4879<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004880
4881### Parameters
4882
Cary Clark682c58d2018-05-16 07:07:07 -04004883<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
4884 <td>character codes or glyph indices</td>
4885 </tr>
4886 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4887 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4888 </tr>
4889 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
4890 <td>positions of each glyph</td>
4891 </tr>
4892 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
4893 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004894 </tr>
4895</table>
4896
4897### Example
4898
Cary Clark682c58d2018-05-16 07:07:07 -04004899<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 -05004900</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004901
Cary Clarka90ea222018-10-16 10:30:28 -04004902<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004903
Cary Clark682c58d2018-05-16 07:07:07 -04004904<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
4905of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04004906underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004907
Cary Clark682c58d2018-05-16 07:07:07 -04004908<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004909
4910---
Cary Clark12799e12017-07-28 15:18:29 -04004911
Cary Clark682c58d2018-05-16 07:07:07 -04004912<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4913int <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,
4914 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004915</pre>
4916
Cary Clark682c58d2018-05-16 07:07:07 -04004917Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
4918<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
4919The 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 -05004920the string.
Cary Clark682c58d2018-05-16 07:07:07 -04004921Uses <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,
4922and <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.
4923Uses <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 +00004924
Cary Clark682c58d2018-05-16 07:07:07 -04004925Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004926
Cary Clark682c58d2018-05-16 07:07:07 -04004927<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004928
4929### Parameters
4930
Cary Clark682c58d2018-05-16 07:07:07 -04004931<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
4932 <td>character codes or glyph indices</td>
4933 </tr>
4934 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
4935 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
4936 </tr>
4937 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004938 <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 -04004939 </tr>
4940 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004941 <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 -04004942 </tr>
4943 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
4944 <td>lower and upper line parallel to the advance</td>
4945 </tr>
4946 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4947 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004948 </tr>
4949</table>
4950
4951### Return Value
4952
4953number of intersections; may be zero
4954
4955### Example
4956
Cary Clark1a8d7622018-03-05 13:26:16 -05004957<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
4958</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004959
Cary Clark682c58d2018-05-16 07:07:07 -04004960<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004961
4962---
Cary Clark12799e12017-07-28 15:18:29 -04004963
Cary Clark682c58d2018-05-16 07:07:07 -04004964<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4965int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
4966 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004967</pre>
4968
Cary Clark682c58d2018-05-16 07:07:07 -04004969Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
4970<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
4971The 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 -05004972the string.
Cary Clark682c58d2018-05-16 07:07:07 -04004973Uses <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,
4974and <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.
4975Uses <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 +00004976
Cary Clark682c58d2018-05-16 07:07:07 -04004977Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004978
Cary Clark682c58d2018-05-16 07:07:07 -04004979<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004980
4981### Parameters
4982
Cary Clark682c58d2018-05-16 07:07:07 -04004983<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
4984 <td>character codes or glyph indices</td>
4985 </tr>
4986 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
4987 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
4988 </tr>
4989 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
4990 <td>positions of each glyph</td>
4991 </tr>
4992 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
4993 <td>lower and upper line parallel to the advance</td>
4994 </tr>
4995 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4996 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004997 </tr>
4998</table>
4999
5000### Return Value
5001
Cary Clarka523d2d2017-08-30 08:58:10 -04005002number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005003
5004### Example
5005
Cary Clark92694be2018-10-25 08:15:36 -04005006<div><fiddle-embed name="5b5754fdb90b44c245d72567854eca04"><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 -05005007</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005008
Cary Clark682c58d2018-05-16 07:07:07 -04005009<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005010
5011---
Cary Clark12799e12017-07-28 15:18:29 -04005012
Cary Clark682c58d2018-05-16 07:07:07 -04005013<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5014int <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,
5015 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005016</pre>
5017
Cary Clark682c58d2018-05-16 07:07:07 -04005018Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5019<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5020The 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 -05005021the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005022Uses <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,
5023and <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.
5024Uses <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 +00005025
Cary Clark682c58d2018-05-16 07:07:07 -04005026Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005027
Cary Clark682c58d2018-05-16 07:07:07 -04005028<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005029
5030### Parameters
5031
Cary Clark682c58d2018-05-16 07:07:07 -04005032<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5033 <td>character codes or glyph indices</td>
5034 </tr>
5035 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5036 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5037 </tr>
5038 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5039 <td>positions of each glyph in x</td>
5040 </tr>
5041 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5042 <td>position of each glyph in y</td>
5043 </tr>
5044 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5045 <td>lower and upper line parallel to the advance</td>
5046 </tr>
5047 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5048 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005049 </tr>
5050</table>
5051
5052### Return Value
5053
5054number of intersections; may be zero
5055
5056### Example
5057
Cary Clark80247e52018-07-11 16:18:41 -04005058<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 -05005059</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005060
Cary Clark682c58d2018-05-16 07:07:07 -04005061<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005062
5063---
Cary Clark12799e12017-07-28 15:18:29 -04005064
Cary Clark682c58d2018-05-16 07:07:07 -04005065<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkd2ca79c2018-08-10 13:09:13 -04005066int <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 -04005067</pre>
5068
Cary Clark682c58d2018-05-16 07:07:07 -04005069Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
5070<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
5071The 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 -05005072the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005073Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5074and <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.
5075Uses 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 +00005076
Cary Clark682c58d2018-05-16 07:07:07 -04005077<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 -05005078
Cary Clark682c58d2018-05-16 07:07:07 -04005079Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005080
Cary Clark682c58d2018-05-16 07:07:07 -04005081<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005082
5083### Parameters
5084
Cary Clark682c58d2018-05-16 07:07:07 -04005085<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
5086 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
5087 </tr>
5088 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5089 <td>lower and upper line parallel to the advance</td>
5090 </tr>
5091 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5092 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005093 </tr>
5094</table>
5095
5096### Return Value
5097
5098number of intersections; may be zero
5099
5100### Example
5101
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005102<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005103
Cary Clark682c58d2018-05-16 07:07:07 -04005104<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005105
5106---
Cary Clark12799e12017-07-28 15:18:29 -04005107
Cary Clark682c58d2018-05-16 07:07:07 -04005108<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5109bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005110</pre>
5111
Cary Clark682c58d2018-05-16 07:07:07 -04005112Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
5113otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005114
Cary Clark224c7002018-06-27 11:00:21 -04005115Returns 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 -04005116new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005117
5118### Return Value
5119
Cary Clark682c58d2018-05-16 07:07:07 -04005120true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005121
5122### Example
5123
Cary Clark83647062018-07-18 16:21:51 -04005124<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04005125
5126#### Example Output
5127
5128~~~~
5129initial nothing to draw: false
5130blend dst nothing to draw: true
5131blend src over nothing to draw: false
5132alpha 0 nothing to draw: true
5133~~~~
5134
5135</fiddle-embed></div>
5136
Cary Clarka90ea222018-10-16 10:30:28 -04005137<a name='Fast_Bounds'></a>
Cary Clark08895c42018-02-01 09:37:32 -05005138
Cary Clark61313f32018-10-08 14:57:48 -04005139Private: To be made private.
5140
Cary Clark682c58d2018-05-16 07:07:07 -04005141<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
5142<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005143
Cary Clark682c58d2018-05-16 07:07:07 -04005144<a name='SkPaint_canComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005145
5146---
Cary Clark12799e12017-07-28 15:18:29 -04005147
Cary Clark682c58d2018-05-16 07:07:07 -04005148<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5149bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005150</pre>
5151
Cary Clark61313f32018-10-08 14:57:48 -04005152Private: (to be made private)
5153
Cary Clark682c58d2018-05-16 07:07:07 -04005154Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
5155to 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 -04005156always returns false.
5157
5158### Return Value
5159
Cary Clark682c58d2018-05-16 07:07:07 -04005160true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005161
Cary Clark682c58d2018-05-16 07:07:07 -04005162<a name='SkPaint_computeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005163
5164---
Cary Clark12799e12017-07-28 15:18:29 -04005165
Cary Clark682c58d2018-05-16 07:07:07 -04005166<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5167const <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 -04005168</pre>
5169
Cary Clark61313f32018-10-08 14:57:48 -04005170Private: (to be made private)
5171
Cary Clark682c58d2018-05-16 07:07:07 -04005172Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005173raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04005174effects 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 -04005175parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04005176for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005177
Cary Clark682c58d2018-05-16 07:07:07 -04005178The 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
5179should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
5180use 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
5181<a href='SkRect_Reference#Rect'>Rect</a>.
5182
Cary Clark61313f32018-10-08 14:57:48 -04005183Private: For example:
5184 if (!path.isInverseFillType() && paint.canComputeFastBounds()) {
5185 SkRect storage;
5186 if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &storage))) {
5187 return; // do not draw the path
5188 }
5189 }
5190 // draw the path
5191
Cary Clark12799e12017-07-28 15:18:29 -04005192### Parameters
5193
Cary Clark682c58d2018-05-16 07:07:07 -04005194<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5195 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5196 </tr>
5197 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5198 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005199 </tr>
5200</table>
5201
5202### Return Value
5203
5204fast computed bounds
5205
Cary Clark682c58d2018-05-16 07:07:07 -04005206<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005207
5208---
Cary Clark12799e12017-07-28 15:18:29 -04005209
Cary Clark682c58d2018-05-16 07:07:07 -04005210<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5211const <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 -04005212</pre>
5213
Cary Clark61313f32018-10-08 14:57:48 -04005214Private: (to be made private)
5215
Cary Clark12799e12017-07-28 15:18:29 -04005216### Parameters
5217
Cary Clark682c58d2018-05-16 07:07:07 -04005218<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
5219 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5220 </tr>
5221 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
5222 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04005223 </tr>
5224</table>
5225
5226### Return Value
5227
5228fast computed bounds
5229
Cary Clark682c58d2018-05-16 07:07:07 -04005230<a name='SkPaint_doComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005231
5232---
Cary Clark12799e12017-07-28 15:18:29 -04005233
Cary Clark682c58d2018-05-16 07:07:07 -04005234<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5235const <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 -04005236</pre>
5237
Cary Clark61313f32018-10-08 14:57:48 -04005238Private: (to be made private)
5239
Cary Clark682c58d2018-05-16 07:07:07 -04005240Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
5241account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
5242altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005243
5244### Parameters
5245
Cary Clark682c58d2018-05-16 07:07:07 -04005246<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5247 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5248 </tr>
5249 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5250 <td>computed bounds of geometry</td>
5251 </tr>
5252 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
5253 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005254 </tr>
5255</table>
5256
5257### Return Value
5258
5259fast computed bounds
5260
Cary Clarka90ea222018-10-16 10:30:28 -04005261<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05005262