blob: 249a95c07dcac9e3bb5c051439dcdc2de90f74ac [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 Clark1a8d7622018-03-05 13:26:16 -05003706<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
3707</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 Clark682c58d2018-05-16 07:07:07 -04003717Returns <a href='#Text_Align'>Text Align</a>.
3718Returns <a href='#SkPaint_kLeft_Align'>kLeft Align</a> if <a href='#Text_Align'>Text Align</a> has not been set.
Cary Clark12799e12017-07-28 15:18:29 -04003719
3720### Return Value
3721
3722text placement relative to position
3723
3724### Example
3725
3726<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3727
3728#### Example Output
3729
3730~~~~
3731kLeft_Align == default
3732~~~~
3733
3734</fiddle-embed></div>
3735
Cary Clark682c58d2018-05-16 07:07:07 -04003736<a name='SkPaint_setTextAlign'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003737
3738---
Cary Clark12799e12017-07-28 15:18:29 -04003739
Cary Clark682c58d2018-05-16 07:07:07 -04003740<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3741void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04003742</pre>
3743
Cary Clark682c58d2018-05-16 07:07:07 -04003744Sets <a href='#Text_Align'>Text Align</a> to <a href='#SkPaint_setTextAlign_align'>align</a>.
3745Has no effect if <a href='#SkPaint_setTextAlign_align'>align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003746
3747### Parameters
3748
Cary Clark682c58d2018-05-16 07:07:07 -04003749<table> <tr> <td><a name='SkPaint_setTextAlign_align'><code><strong>align</strong></code></a></td>
3750 <td>text placement relative to position</td>
Cary Clark12799e12017-07-28 15:18:29 -04003751 </tr>
3752</table>
3753
3754### Example
3755
Cary Clark682c58d2018-05-16 07:07:07 -04003756<div><fiddle-embed name="d37540afd918506ac2594665ca63979b"><div><a href='undocumented#Text'>Text</a> is left-aligned by default, and then set to center. Setting the
Cary Clark1a8d7622018-03-05 13:26:16 -05003757alignment out of range has no effect.
3758</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003759
Cary Clarka90ea222018-10-16 10:30:28 -04003760<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003761
Cary Clarka90ea222018-10-16 10:30:28 -04003762---
Cary Clark08895c42018-02-01 09:37:32 -05003763
Cary Clark682c58d2018-05-16 07:07:07 -04003764<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
3765<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
3766<a href='#Text_Size'>Text Size</a> defaults to 12.
3767Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003768
3769### Example
3770
3771<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3772
Cary Clark682c58d2018-05-16 07:07:07 -04003773<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003774
3775---
Cary Clark12799e12017-07-28 15:18:29 -04003776
Cary Clark682c58d2018-05-16 07:07:07 -04003777<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3778<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003779</pre>
3780
Cary Clark682c58d2018-05-16 07:07:07 -04003781Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003782
3783### Return Value
3784
3785typographic height of text
3786
3787### Example
3788
skia-bookmaker233c6522018-07-04 05:33:26 +00003789<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003790
Cary Clark682c58d2018-05-16 07:07:07 -04003791<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003792
3793---
Cary Clark12799e12017-07-28 15:18:29 -04003794
Cary Clark682c58d2018-05-16 07:07:07 -04003795<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3796void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003797</pre>
3798
Cary Clark682c58d2018-05-16 07:07:07 -04003799Sets <a href='#Text_Size'>Text Size</a> in points.
3800Has 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 -04003801
3802### Parameters
3803
Cary Clark682c58d2018-05-16 07:07:07 -04003804<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
3805 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04003806 </tr>
3807</table>
3808
3809### Example
3810
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003811<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003812
Cary Clarka90ea222018-10-16 10:30:28 -04003813<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003814
Cary Clarka90ea222018-10-16 10:30:28 -04003815---
Cary Clark08895c42018-02-01 09:37:32 -05003816
Cary Clark682c58d2018-05-16 07:07:07 -04003817<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
3818<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003819is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003820<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
3821<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003822
3823### Example
3824
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003825<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003826
Cary Clark682c58d2018-05-16 07:07:07 -04003827<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003828
3829---
Cary Clark12799e12017-07-28 15:18:29 -04003830
Cary Clark682c58d2018-05-16 07:07:07 -04003831<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3832<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003833</pre>
3834
Cary Clark682c58d2018-05-16 07:07:07 -04003835Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003836Default value is 1.
3837
3838### Return Value
3839
3840text horizontal scale
3841
3842### Example
3843
3844<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3845
Cary Clark682c58d2018-05-16 07:07:07 -04003846<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003847
3848---
Cary Clark12799e12017-07-28 15:18:29 -04003849
Cary Clark682c58d2018-05-16 07:07:07 -04003850<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3851void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003852</pre>
3853
Cary Clark682c58d2018-05-16 07:07:07 -04003854Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003855Default value is 1.
3856
3857### Parameters
3858
Cary Clark682c58d2018-05-16 07:07:07 -04003859<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
3860 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003861 </tr>
3862</table>
3863
3864### Example
3865
3866<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3867
Cary Clarka90ea222018-10-16 10:30:28 -04003868<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003869
Cary Clarka90ea222018-10-16 10:30:28 -04003870---
Cary Clark08895c42018-02-01 09:37:32 -05003871
Cary Clark682c58d2018-05-16 07:07:07 -04003872<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
3873<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003874is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003875<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
3876<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003877
3878### Example
3879
3880<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3881
Cary Clark682c58d2018-05-16 07:07:07 -04003882<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003883
3884---
Cary Clark12799e12017-07-28 15:18:29 -04003885
Cary Clark682c58d2018-05-16 07:07:07 -04003886<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3887<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003888</pre>
3889
Cary Clark682c58d2018-05-16 07:07:07 -04003890Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003891Default value is zero.
3892
3893### Return Value
3894
3895additional shear in x-axis relative to y-axis
3896
3897### Example
3898
Cary Clark7f644ec2018-07-19 10:50:44 -04003899<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003900
Cary Clark682c58d2018-05-16 07:07:07 -04003901<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003902
3903---
Cary Clark12799e12017-07-28 15:18:29 -04003904
Cary Clark682c58d2018-05-16 07:07:07 -04003905<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3906void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003907</pre>
3908
Cary Clark682c58d2018-05-16 07:07:07 -04003909Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003910Default value is zero.
3911
3912### Parameters
3913
Cary Clark682c58d2018-05-16 07:07:07 -04003914<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
3915 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003916 </tr>
3917</table>
3918
3919### Example
3920
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003921<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003922
Cary Clarka90ea222018-10-16 10:30:28 -04003923<a name='Text_Encoding'></a>
3924
Cary Clark12799e12017-07-28 15:18:29 -04003925---
3926
Cary Clarka90ea222018-10-16 10:30:28 -04003927<a name='SkPaint_TextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003928
Cary Clarka90ea222018-10-16 10:30:28 -04003929---
Cary Clark12799e12017-07-28 15:18:29 -04003930
Cary Clarka560c472017-11-27 10:44:06 -05003931<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003932 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
Cary Clark61313f32018-10-08 14:57:48 -04003933 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
3934 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
3935 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
3936 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003937 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003938</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003939
Cary Clark682c58d2018-05-16 07:07:07 -04003940<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
3941size, 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 -04003942
Cary Clarka560c472017-11-27 10:44:06 -05003943Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003944All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003945in the total storage required.
3946
Cary Clark682c58d2018-05-16 07:07:07 -04003947<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 -04003948
Cary Clark682c58d2018-05-16 07:07:07 -04003949<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 -04003950
Cary Clark682c58d2018-05-16 07:07:07 -04003951<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 -04003952
Cary Clark682c58d2018-05-16 07:07:07 -04003953<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 -04003954A glyph index is a 16-bit word.
3955
Cary Clark682c58d2018-05-16 07:07:07 -04003956<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 -04003957
3958### Constants
3959
Cary Clark682c58d2018-05-16 07:07:07 -04003960<table style='border-collapse: collapse; width: 62.5em'>
3961 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3962<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3963<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3964 <tr style='background-color: #f0f0f0; '>
3965 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
3966 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3967 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3968uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04003969 </tr>
3970 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003971 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
3972 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3973 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3974uses two byte words to represent most of Unicode</td>
3975 </tr>
3976 <tr style='background-color: #f0f0f0; '>
3977 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
3978 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3979 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3980uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04003981 </tr>
3982 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003983 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
3984 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3985 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3986uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04003987 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003988</table>
Cary Clark12799e12017-07-28 15:18:29 -04003989
3990### Example
3991
Cary Clarka560c472017-11-27 10:44:06 -05003992<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3993Second line is encoded in UTF-16.
3994Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04003995Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003996</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003997
Cary Clark682c58d2018-05-16 07:07:07 -04003998<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003999
4000---
Cary Clark12799e12017-07-28 15:18:29 -04004001
Cary Clark682c58d2018-05-16 07:07:07 -04004002<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4003<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004004</pre>
4005
Cary Clark682c58d2018-05-16 07:07:07 -04004006Returns <a href='#Text_Encoding'>Text Encoding</a>.
4007<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 -04004008
4009### Return Value
4010
Cary Clark682c58d2018-05-16 07:07:07 -04004011one 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>
Cary Clark12799e12017-07-28 15:18:29 -04004013
4014### Example
4015
skia-bookmaker525f9a92018-05-03 06:27:39 +00004016<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04004017
4018#### Example Output
4019
4020~~~~
4021kUTF8_TextEncoding == text encoding
4022kGlyphID_TextEncoding == text encoding
4023~~~~
4024
4025</fiddle-embed></div>
4026
Cary Clark682c58d2018-05-16 07:07:07 -04004027<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004028
4029---
Cary Clark12799e12017-07-28 15:18:29 -04004030
Cary Clark682c58d2018-05-16 07:07:07 -04004031<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4032void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004033</pre>
4034
Cary Clark682c58d2018-05-16 07:07:07 -04004035Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4036<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4037Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004038
4039### Parameters
4040
Cary Clark682c58d2018-05-16 07:07:07 -04004041<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4042 <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
4043<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004044 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004045#
4046
Cary Clark12799e12017-07-28 15:18:29 -04004047</table>
4048
4049### Example
4050
Cary Clark75fd4492018-06-20 12:45:16 -04004051<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004052
4053#### Example Output
4054
4055~~~~
40564 != text encoding
4057~~~~
4058
4059</fiddle-embed></div>
4060
Cary Clarka90ea222018-10-16 10:30:28 -04004061<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004062
Cary Clarka90ea222018-10-16 10:30:28 -04004063---
Cary Clark08895c42018-02-01 09:37:32 -05004064
Cary Clark682c58d2018-05-16 07:07:07 -04004065<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>.
4066The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4067<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004068
Cary Clark682c58d2018-05-16 07:07:07 -04004069<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 -04004070X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4071are positive.
4072Y-axis values above the baseline are negative, and below the baseline are positive.
4073
4074### Example
4075
Ben Wagnere5806492017-11-09 12:08:31 -05004076<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004077
Cary Clark61313f32018-10-08 14:57:48 -04004078<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04004079
Cary Clarka90ea222018-10-16 10:30:28 -04004080---
4081
Cary Clarka560c472017-11-27 10:44:06 -05004082<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004083 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4084 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004085 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4086 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4087 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4088 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004089 };
Cary Clark12799e12017-07-28 15:18:29 -04004090
Cary Clarka90ea222018-10-16 10:30:28 -04004091 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4092 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4093 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4094 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4095 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4096 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4097 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4098 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4099 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4100 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4101 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4102 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4103 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4104 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4105 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4106 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004107
Cary Clark61313f32018-10-08 14:57:48 -04004108 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4109 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
4110 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4111 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
Cary Clark186d08f2018-04-03 08:43:27 -04004112 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004113</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004114
Cary Clark682c58d2018-05-16 07:07:07 -04004115<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
4116computed 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 -04004117not available.
4118
Cary Clark5538c132018-06-14 12:28:14 -04004119All vertical values are relative to the baseline, on a y-axis pointing down.
4120Zero is on the baseline, negative values are above the baseline, and positive
4121values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05004122
Cary Clark682c58d2018-05-16 07:07:07 -04004123<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 -04004124are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004125
Cary Clark682c58d2018-05-16 07:07:07 -04004126<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 -04004127are valid, since their value may be zero.
4128
Cary Clarka90ea222018-10-16 10:30:28 -04004129<a name='SkPaint_FontMetrics_FontMetricsFlags'></a>
4130
4131---
Cary Clark12799e12017-07-28 15:18:29 -04004132
Cary Clarka560c472017-11-27 10:44:06 -05004133<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004134 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004135 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4136 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4137 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4138 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004139 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004140</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004141
Cary Clark682c58d2018-05-16 07:07:07 -04004142<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 -04004143the underline or strikeout metric may be valid and zero.
4144Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4145
Cary Clark12799e12017-07-28 15:18:29 -04004146### Constants
4147
Cary Clark682c58d2018-05-16 07:07:07 -04004148<table style='border-collapse: collapse; width: 62.5em'>
4149 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4150<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4151<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4152 <tr style='background-color: #f0f0f0; '>
4153 <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>
4154 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4155 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4156set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004157 </tr>
4158 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004159 <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>
4160 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4161 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4162set if fUnderlinePosition is valid</td>
4163 </tr>
4164 <tr style='background-color: #f0f0f0; '>
4165 <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>
4166 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4167 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4168set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004169 </tr>
4170 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004171 <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>
4172 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4173 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4174set if fStrikeoutPosition is valid</td>
4175 </tr>
Cary Clark61313f32018-10-08 14:57:48 -04004176</table><table style='border-collapse: collapse; width: 62.5em'>
Cary Clark682c58d2018-05-16 07:07:07 -04004177
Cary Clark682c58d2018-05-16 07:07:07 -04004178 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
Cary Clark61313f32018-10-08 14:57:48 -04004179<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Member</th>
Cary Clark682c58d2018-05-16 07:07:07 -04004180<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4181 <tr style='background-color: #f0f0f0; '>
4182 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
4183 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
4184 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4185is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004186 </tr>
4187 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004188 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4189 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
4190 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004191Greatest extent above the baseline for any glyph.
4192Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004193</td>
4194 </tr>
4195 <tr style='background-color: #f0f0f0; '>
4196 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
4198 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004199Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004200Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004201</td>
4202 </tr>
4203 <tr>
4204 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4205 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
4206 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004207Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004208Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004209</td>
4210 </tr>
4211 <tr style='background-color: #f0f0f0; '>
4212 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4213 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
4214 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004215Greatest extent below the baseline for any glyph.
4216Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004217</td>
4218 </tr>
4219 <tr>
4220 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4221 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
4222 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004223Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004224Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004225</td>
4226 </tr>
4227 <tr style='background-color: #f0f0f0; '>
4228 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4229 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
4230 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004231Average character width, if it is available.
4232Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004233</td>
4234 </tr>
4235 <tr>
4236 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4237 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
4238 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4239maximum character width</td>
4240 </tr>
4241 <tr style='background-color: #f0f0f0; '>
4242 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4243 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
4244 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004245Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004246Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004247</td>
4248 </tr>
4249 <tr>
4250 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4251 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
4252 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004253Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004254Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004255</td>
4256 </tr>
4257 <tr style='background-color: #f0f0f0; '>
4258 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4259 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
4260 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004261May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004262</td>
4263 </tr>
4264 <tr>
4265 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4266 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
4267 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004268May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004269</td>
4270 </tr>
4271 <tr style='background-color: #f0f0f0; '>
4272 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4273 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
4274 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4275If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4276If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
4277</td>
4278 </tr>
4279 <tr>
4280 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4281 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
4282 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004283Position of the top of the underline stroke relative to the baseline.
4284Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004285
Cary Clark682c58d2018-05-16 07:07:07 -04004286If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4287If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
4288</td>
4289 </tr>
4290 <tr style='background-color: #f0f0f0; '>
4291 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4292 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
4293 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4294If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4295If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
4296</td>
4297 </tr>
4298 <tr>
4299 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4300 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
4301 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004302Position of the bottom of the strikeout stroke relative to the baseline.
4303Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004304
Cary Clark682c58d2018-05-16 07:07:07 -04004305If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4306If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
4307</td>
4308 </tr>
4309</table>
Cary Clark12799e12017-07-28 15:18:29 -04004310
Cary Clark682c58d2018-05-16 07:07:07 -04004311<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004312
4313---
Cary Clark12799e12017-07-28 15:18:29 -04004314
Cary Clark682c58d2018-05-16 07:07:07 -04004315<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4316bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004317</pre>
4318
Cary Clark80247e52018-07-11 16:18:41 -04004319Returns 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 -04004320<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,
4321return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004322
4323### Parameters
4324
Cary Clark682c58d2018-05-16 07:07:07 -04004325<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
4326 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004327 </tr>
4328</table>
4329
4330### Return Value
4331
4332true if font specifies underline width
4333
Cary Clark682c58d2018-05-16 07:07:07 -04004334<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004335
4336---
Cary Clark12799e12017-07-28 15:18:29 -04004337
Cary Clark682c58d2018-05-16 07:07:07 -04004338<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4339bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004340</pre>
4341
Cary Clark80247e52018-07-11 16:18:41 -04004342Returns 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 -04004343<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,
4344return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004345
4346### Parameters
4347
Cary Clark682c58d2018-05-16 07:07:07 -04004348<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
4349 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004350 </tr>
4351</table>
4352
4353### Return Value
4354
Cary Clark682c58d2018-05-16 07:07:07 -04004355true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004356
Cary Clark682c58d2018-05-16 07:07:07 -04004357<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004358
4359---
Cary Clark12799e12017-07-28 15:18:29 -04004360
Cary Clark682c58d2018-05-16 07:07:07 -04004361<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4362bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004363</pre>
4364
Cary Clark80247e52018-07-11 16:18:41 -04004365Returns 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 -04004366<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,
4367return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004368
4369### Parameters
4370
Cary Clark682c58d2018-05-16 07:07:07 -04004371<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
4372 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004373 </tr>
4374</table>
4375
4376### Return Value
4377
4378true if font specifies strikeout width
4379
Cary Clark682c58d2018-05-16 07:07:07 -04004380<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004381
4382---
Cary Clark12799e12017-07-28 15:18:29 -04004383
Cary Clark682c58d2018-05-16 07:07:07 -04004384<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4385bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004386</pre>
4387
Cary Clark80247e52018-07-11 16:18:41 -04004388Returns 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 -04004389<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,
4390return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004391
4392### Parameters
4393
Cary Clark682c58d2018-05-16 07:07:07 -04004394<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
4395 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004396 </tr>
4397</table>
4398
4399### Return Value
4400
Cary Clark682c58d2018-05-16 07:07:07 -04004401true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004402
Cary Clark682c58d2018-05-16 07:07:07 -04004403<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004404
4405---
Cary Clark12799e12017-07-28 15:18:29 -04004406
Cary Clark682c58d2018-05-16 07:07:07 -04004407<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4408<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 -04004409</pre>
4410
Cary Clark682c58d2018-05-16 07:07:07 -04004411Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
4412The 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 -04004413descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004414If <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>.
4415Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4416dimensions 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>,
4417<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
4418Results 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 -04004419is ignored.
4420
4421### Parameters
4422
Cary Clark682c58d2018-05-16 07:07:07 -04004423<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
4424 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
4425 </tr>
4426 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
4427 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04004428 </tr>
4429</table>
4430
4431### Return Value
4432
4433recommended spacing between lines
4434
4435### Example
4436
4437<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4438
4439### See Also
4440
Cary Clark682c58d2018-05-16 07:07:07 -04004441<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 -04004442
Cary Clark682c58d2018-05-16 07:07:07 -04004443<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004444
4445---
Cary Clark12799e12017-07-28 15:18:29 -04004446
Cary Clark682c58d2018-05-16 07:07:07 -04004447<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4448<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004449</pre>
4450
4451Returns the recommended spacing between lines: the sum of metrics
4452descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004453Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4454dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
4455Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004456
4457### Return Value
4458
4459recommended spacing between lines
4460
4461### Example
4462
4463<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4464
4465#### Example Output
4466
4467~~~~
4468textSize: 12 fontSpacing: 13.9688
4469textSize: 18 fontSpacing: 20.9531
4470textSize: 24 fontSpacing: 27.9375
4471textSize: 32 fontSpacing: 37.25
4472~~~~
4473
4474</fiddle-embed></div>
4475
Cary Clark682c58d2018-05-16 07:07:07 -04004476<a name='SkPaint_getFontBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004477
4478---
Cary Clark12799e12017-07-28 15:18:29 -04004479
Cary Clark682c58d2018-05-16 07:07:07 -04004480<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4481<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004482</pre>
4483
Cary Clark682c58d2018-05-16 07:07:07 -04004484Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
4485Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
4486ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
4487and <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 -04004488
Cary Clark682c58d2018-05-16 07:07:07 -04004489If <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,
4490returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
4491<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 -04004492
4493### Return Value
4494
Cary Clark682c58d2018-05-16 07:07:07 -04004495union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004496
4497### Example
4498
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004499<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
Cary Clark12799e12017-07-28 15:18:29 -04004500
4501#### Example Output
4502
4503~~~~
4504metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4505font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4506~~~~
4507
4508</fiddle-embed></div>
4509
Cary Clark682c58d2018-05-16 07:07:07 -04004510<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004511
4512---
Cary Clark12799e12017-07-28 15:18:29 -04004513
Cary Clark682c58d2018-05-16 07:07:07 -04004514<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4515int <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 -04004516</pre>
4517
Cary Clark682c58d2018-05-16 07:07:07 -04004518Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
4519Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
4520<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>.
4521<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004522
Cary Clark682c58d2018-05-16 07:07:07 -04004523Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004524
Cary Clark682c58d2018-05-16 07:07:07 -04004525If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
4526If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004527
Cary Clark682c58d2018-05-16 07:07:07 -04004528If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
4529<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004530
4531### Parameters
4532
Cary Clark682c58d2018-05-16 07:07:07 -04004533<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
4534 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4535 </tr>
4536 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
4537 <td>length of character storage in bytes</td>
4538 </tr>
4539 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
4540 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004541 </tr>
4542</table>
4543
4544### Return Value
4545
Cary Clark682c58d2018-05-16 07:07:07 -04004546number 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 -04004547
4548### Example
4549
4550<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4551
Cary Clark682c58d2018-05-16 07:07:07 -04004552<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004553
4554---
Cary Clark12799e12017-07-28 15:18:29 -04004555
Cary Clark682c58d2018-05-16 07:07:07 -04004556<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4557int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004558</pre>
4559
Cary Clark682c58d2018-05-16 07:07:07 -04004560Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
4561Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
4562Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004563
4564### Parameters
4565
Cary Clark682c58d2018-05-16 07:07:07 -04004566<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
4567 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4568 </tr>
4569 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
4570 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04004571 </tr>
4572</table>
4573
4574### Return Value
4575
Cary Clark682c58d2018-05-16 07:07:07 -04004576number 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 -04004577
4578### Example
4579
Cary Clarkf9603982018-07-17 08:20:27 -04004580<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04004581
4582#### Example Output
4583
4584~~~~
4585count = 5
4586~~~~
4587
4588</fiddle-embed></div>
4589
Cary Clark682c58d2018-05-16 07:07:07 -04004590<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004591
4592---
Cary Clark12799e12017-07-28 15:18:29 -04004593
Cary Clark682c58d2018-05-16 07:07:07 -04004594<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4595bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004596</pre>
4597
Cary Clark682c58d2018-05-16 07:07:07 -04004598Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
4599Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
4600<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004601
Cary Clark682c58d2018-05-16 07:07:07 -04004602If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
4603returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
4604does 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 -04004605
Cary Clark682c58d2018-05-16 07:07:07 -04004606Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004607
4608### Parameters
4609
Cary Clark682c58d2018-05-16 07:07:07 -04004610<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
4611 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
4612 </tr>
4613 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
4614 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004615 </tr>
4616</table>
4617
4618### Return Value
4619
Cary Clark682c58d2018-05-16 07:07:07 -04004620true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004621
Ruiqi Mao94d57c42018-07-02 15:20:10 -04004622<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05004623corresponding to the Unicode surrogate code point.
4624</div>
Cary Clark12799e12017-07-28 15:18:29 -04004625
4626#### Example Output
4627
4628~~~~
46290x00b0 == has char
46300xd800 != has char
4631~~~~
4632
Cary Clark12799e12017-07-28 15:18:29 -04004633### Example
4634
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004635<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 -04004636that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004637</div>
Cary Clark12799e12017-07-28 15:18:29 -04004638
4639#### Example Output
4640
4641~~~~
46420x01ff == has glyph
46430x0000 != has glyph
46440xffff == has glyph
4645~~~~
4646
4647</fiddle-embed></div>
4648
4649### See Also
4650
Cary Clark682c58d2018-05-16 07:07:07 -04004651<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004652
Cary Clark682c58d2018-05-16 07:07:07 -04004653<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004654
4655---
Cary Clark12799e12017-07-28 15:18:29 -04004656
Cary Clark682c58d2018-05-16 07:07:07 -04004657<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4658void <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 -04004659</pre>
4660
Cary Clark682c58d2018-05-16 07:07:07 -04004661Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
4662<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
4663Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
4664by <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 -04004665
Cary Clark682c58d2018-05-16 07:07:07 -04004666Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004667
4668### Parameters
4669
Cary Clark682c58d2018-05-16 07:07:07 -04004670<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
4671 <td>array of indices into font</td>
4672 </tr>
4673 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
4674 <td>length of glyph array</td>
4675 </tr>
4676 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
4677 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04004678 </tr>
4679</table>
4680
4681### Example
4682
skia-bookmakerb95bbba2018-07-06 05:23:23 +00004683<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 -05004684</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004685
Cary Clarka90ea222018-10-16 10:30:28 -04004686<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004687
Cary Clark682c58d2018-05-16 07:07:07 -04004688<a name='SkPaint_measureText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004689
4690---
Cary Clark12799e12017-07-28 15:18:29 -04004691
Cary Clark682c58d2018-05-16 07:07:07 -04004692<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4693<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 -04004694</pre>
4695
Cary Clark3aca39d2018-10-23 14:44:05 -04004696Returns the advance width of <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004697The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
4698Uses <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,
4699and <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
4700<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
4701Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
4702The 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 -04004703
4704### Parameters
4705
Cary Clark682c58d2018-05-16 07:07:07 -04004706<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
4707 <td>character codes or glyph indices to be measured</td>
4708 </tr>
4709 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
4710 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
4711 </tr>
4712 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
4713 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004714 </tr>
4715</table>
4716
4717### Return Value
4718
4719advance width or height
4720
4721### Example
4722
Cary Clark83647062018-07-18 16:21:51 -04004723<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004724
Cary Clark682c58d2018-05-16 07:07:07 -04004725<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05004726
Cary Clarka90ea222018-10-16 10:30:28 -04004727---
4728
Cary Clark682c58d2018-05-16 07:07:07 -04004729<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4730<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 -04004731</pre>
4732
Cary Clark3aca39d2018-10-23 14:44:05 -04004733Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004734The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
4735Uses <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,
4736and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4737Does 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 -04004738
4739### Parameters
4740
Cary Clark682c58d2018-05-16 07:07:07 -04004741<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
4742 <td>character codes or glyph indices to be measured</td>
4743 </tr>
4744 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
4745 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004746 </tr>
4747</table>
4748
4749### Return Value
4750
4751advance width or height
4752
4753### Example
4754
4755<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4756
4757#### Example Output
4758
4759~~~~
4760default width = 5
4761double width = 10
4762~~~~
4763
4764</fiddle-embed></div>
4765
Cary Clark682c58d2018-05-16 07:07:07 -04004766<a name='SkPaint_breakText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004767
4768---
Cary Clark12799e12017-07-28 15:18:29 -04004769
Cary Clark682c58d2018-05-16 07:07:07 -04004770<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4771size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
4772 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004773</pre>
4774
Cary Clark682c58d2018-05-16 07:07:07 -04004775Returns 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 -04004776The <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 -04004777Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4778Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
4779Uses <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,
4780and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4781Does 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 -04004782
4783### Parameters
4784
Cary Clark682c58d2018-05-16 07:07:07 -04004785<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
4786 <td>character codes or glyph indices to be measured</td>
4787 </tr>
4788 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
4789 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
4790 </tr>
4791 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
4792 <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>
4793 </tr>
4794 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
4795 <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 -04004796 </tr>
4797</table>
4798
4799### Return Value
4800
Cary Clark682c58d2018-05-16 07:07:07 -04004801bytes 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 -04004802
4803### Example
4804
Cary Clark682c58d2018-05-16 07:07:07 -04004805<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
4806<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 -05004807</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004808
Cary Clark682c58d2018-05-16 07:07:07 -04004809<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004810
4811---
Cary Clark12799e12017-07-28 15:18:29 -04004812
Cary Clark682c58d2018-05-16 07:07:07 -04004813<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4814int <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 -04004815</pre>
4816
Cary Clark682c58d2018-05-16 07:07:07 -04004817Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
4818the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4819Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4820If <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.
4821if <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 -04004822Widths returns the horizontal advance.
Cary Clark682c58d2018-05-16 07:07:07 -04004823Uses <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,
4824and <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>.
4825Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
4826Does 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 -04004827
4828### Parameters
4829
Cary Clark682c58d2018-05-16 07:07:07 -04004830<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
4831 <td>character codes or glyph indices to be measured</td>
4832 </tr>
4833 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
4834 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
4835 </tr>
4836 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
4837 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
4838 </tr>
4839 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
4840 <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 -04004841 </tr>
4842</table>
4843
4844### Return Value
4845
Cary Clark682c58d2018-05-16 07:07:07 -04004846glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004847
4848### Example
4849
Cary Clarkf9603982018-07-17 08:20:27 -04004850<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 -04004851The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004852</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004853
Cary Clarka90ea222018-10-16 10:30:28 -04004854<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004855
Cary Clark682c58d2018-05-16 07:07:07 -04004856<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 -04004857
Cary Clark682c58d2018-05-16 07:07:07 -04004858<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004859
4860---
Cary Clark12799e12017-07-28 15:18:29 -04004861
Cary Clark682c58d2018-05-16 07:07:07 -04004862<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4863void <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 -04004864</pre>
4865
Cary Clark682c58d2018-05-16 07:07:07 -04004866Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
4867Uses <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,
4868and <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.
4869All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
4870Uses <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 -04004871
4872### Parameters
4873
Cary Clark682c58d2018-05-16 07:07:07 -04004874<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
4875 <td>character codes or glyph indices</td>
4876 </tr>
4877 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4878 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4879 </tr>
4880 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004881 <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 -04004882 </tr>
4883 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004884 <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 -04004885 </tr>
4886 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
4887 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004888 </tr>
4889</table>
4890
4891### Example
4892
Cary Clark682c58d2018-05-16 07:07:07 -04004893<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 -05004894the offset location. The result is rendered with one draw call.
4895</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004896
Cary Clark682c58d2018-05-16 07:07:07 -04004897<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004898
4899---
Cary Clark12799e12017-07-28 15:18:29 -04004900
Cary Clark682c58d2018-05-16 07:07:07 -04004901<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4902void <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 -04004903</pre>
4904
Cary Clark682c58d2018-05-16 07:07:07 -04004905Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
4906Uses <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,
4907and <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.
4908All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
4909Uses <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>.
4910<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004911
4912### Parameters
4913
Cary Clark682c58d2018-05-16 07:07:07 -04004914<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
4915 <td>character codes or glyph indices</td>
4916 </tr>
4917 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4918 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4919 </tr>
4920 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
4921 <td>positions of each glyph</td>
4922 </tr>
4923 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
4924 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004925 </tr>
4926</table>
4927
4928### Example
4929
Cary Clark682c58d2018-05-16 07:07:07 -04004930<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 -05004931</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004932
Cary Clarka90ea222018-10-16 10:30:28 -04004933<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004934
Cary Clark682c58d2018-05-16 07:07:07 -04004935<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
4936of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04004937underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004938
Cary Clark682c58d2018-05-16 07:07:07 -04004939<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004940
4941---
Cary Clark12799e12017-07-28 15:18:29 -04004942
Cary Clark682c58d2018-05-16 07:07:07 -04004943<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4944int <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,
4945 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004946</pre>
4947
Cary Clark682c58d2018-05-16 07:07:07 -04004948Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
4949<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
4950The 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 -05004951the string.
Cary Clark682c58d2018-05-16 07:07:07 -04004952Uses <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,
4953and <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.
4954Uses <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 +00004955
Cary Clark682c58d2018-05-16 07:07:07 -04004956Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004957
Cary Clark682c58d2018-05-16 07:07:07 -04004958<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004959
4960### Parameters
4961
Cary Clark682c58d2018-05-16 07:07:07 -04004962<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
4963 <td>character codes or glyph indices</td>
4964 </tr>
4965 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
4966 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
4967 </tr>
4968 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004969 <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 -04004970 </tr>
4971 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004972 <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 -04004973 </tr>
4974 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
4975 <td>lower and upper line parallel to the advance</td>
4976 </tr>
4977 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4978 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004979 </tr>
4980</table>
4981
4982### Return Value
4983
4984number of intersections; may be zero
4985
4986### Example
4987
Cary Clark1a8d7622018-03-05 13:26:16 -05004988<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
4989</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004990
Cary Clark682c58d2018-05-16 07:07:07 -04004991<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004992
4993---
Cary Clark12799e12017-07-28 15:18:29 -04004994
Cary Clark682c58d2018-05-16 07:07:07 -04004995<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4996int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
4997 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004998</pre>
4999
Cary Clark682c58d2018-05-16 07:07:07 -04005000Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
5001<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
5002The 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 -05005003the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005004Uses <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,
5005and <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.
5006Uses <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 +00005007
Cary Clark682c58d2018-05-16 07:07:07 -04005008Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005009
Cary Clark682c58d2018-05-16 07:07:07 -04005010<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005011
5012### Parameters
5013
Cary Clark682c58d2018-05-16 07:07:07 -04005014<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
5015 <td>character codes or glyph indices</td>
5016 </tr>
5017 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
5018 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
5019 </tr>
5020 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
5021 <td>positions of each glyph</td>
5022 </tr>
5023 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5024 <td>lower and upper line parallel to the advance</td>
5025 </tr>
5026 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5027 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005028 </tr>
5029</table>
5030
5031### Return Value
5032
Cary Clarka523d2d2017-08-30 08:58:10 -04005033number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005034
5035### Example
5036
Cary Clark92694be2018-10-25 08:15:36 -04005037<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 -05005038</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005039
Cary Clark682c58d2018-05-16 07:07:07 -04005040<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005041
5042---
Cary Clark12799e12017-07-28 15:18:29 -04005043
Cary Clark682c58d2018-05-16 07:07:07 -04005044<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5045int <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,
5046 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005047</pre>
5048
Cary Clark682c58d2018-05-16 07:07:07 -04005049Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5050<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5051The 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 -05005052the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005053Uses <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,
5054and <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.
5055Uses <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 +00005056
Cary Clark682c58d2018-05-16 07:07:07 -04005057Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005058
Cary Clark682c58d2018-05-16 07:07:07 -04005059<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005060
5061### Parameters
5062
Cary Clark682c58d2018-05-16 07:07:07 -04005063<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5064 <td>character codes or glyph indices</td>
5065 </tr>
5066 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5067 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5068 </tr>
5069 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5070 <td>positions of each glyph in x</td>
5071 </tr>
5072 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5073 <td>position of each glyph in y</td>
5074 </tr>
5075 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5076 <td>lower and upper line parallel to the advance</td>
5077 </tr>
5078 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5079 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005080 </tr>
5081</table>
5082
5083### Return Value
5084
5085number of intersections; may be zero
5086
5087### Example
5088
Cary Clark80247e52018-07-11 16:18:41 -04005089<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 -05005090</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005091
Cary Clark682c58d2018-05-16 07:07:07 -04005092<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005093
5094---
Cary Clark12799e12017-07-28 15:18:29 -04005095
Cary Clark682c58d2018-05-16 07:07:07 -04005096<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkd2ca79c2018-08-10 13:09:13 -04005097int <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 -04005098</pre>
5099
Cary Clark682c58d2018-05-16 07:07:07 -04005100Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
5101<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
5102The 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 -05005103the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005104Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5105and <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.
5106Uses 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 +00005107
Cary Clark682c58d2018-05-16 07:07:07 -04005108<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 -05005109
Cary Clark682c58d2018-05-16 07:07:07 -04005110Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005111
Cary Clark682c58d2018-05-16 07:07:07 -04005112<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005113
5114### Parameters
5115
Cary Clark682c58d2018-05-16 07:07:07 -04005116<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
5117 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
5118 </tr>
5119 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5120 <td>lower and upper line parallel to the advance</td>
5121 </tr>
5122 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5123 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005124 </tr>
5125</table>
5126
5127### Return Value
5128
5129number of intersections; may be zero
5130
5131### Example
5132
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005133<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005134
Cary Clark682c58d2018-05-16 07:07:07 -04005135<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005136
5137---
Cary Clark12799e12017-07-28 15:18:29 -04005138
Cary Clark682c58d2018-05-16 07:07:07 -04005139<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5140bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005141</pre>
5142
Cary Clark682c58d2018-05-16 07:07:07 -04005143Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
5144otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005145
Cary Clark224c7002018-06-27 11:00:21 -04005146Returns 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 -04005147new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005148
5149### Return Value
5150
Cary Clark682c58d2018-05-16 07:07:07 -04005151true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005152
5153### Example
5154
Cary Clark83647062018-07-18 16:21:51 -04005155<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04005156
5157#### Example Output
5158
5159~~~~
5160initial nothing to draw: false
5161blend dst nothing to draw: true
5162blend src over nothing to draw: false
5163alpha 0 nothing to draw: true
5164~~~~
5165
5166</fiddle-embed></div>
5167
Cary Clarka90ea222018-10-16 10:30:28 -04005168<a name='Fast_Bounds'></a>
Cary Clark08895c42018-02-01 09:37:32 -05005169
Cary Clark61313f32018-10-08 14:57:48 -04005170Private: To be made private.
5171
Cary Clark682c58d2018-05-16 07:07:07 -04005172<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
5173<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005174
Cary Clark682c58d2018-05-16 07:07:07 -04005175<a name='SkPaint_canComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005176
5177---
Cary Clark12799e12017-07-28 15:18:29 -04005178
Cary Clark682c58d2018-05-16 07:07:07 -04005179<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5180bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005181</pre>
5182
Cary Clark61313f32018-10-08 14:57:48 -04005183Private: (to be made private)
5184
Cary Clark682c58d2018-05-16 07:07:07 -04005185Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
5186to 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 -04005187always returns false.
5188
5189### Return Value
5190
Cary Clark682c58d2018-05-16 07:07:07 -04005191true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005192
Cary Clark682c58d2018-05-16 07:07:07 -04005193<a name='SkPaint_computeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005194
5195---
Cary Clark12799e12017-07-28 15:18:29 -04005196
Cary Clark682c58d2018-05-16 07:07:07 -04005197<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5198const <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 -04005199</pre>
5200
Cary Clark61313f32018-10-08 14:57:48 -04005201Private: (to be made private)
5202
Cary Clark682c58d2018-05-16 07:07:07 -04005203Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005204raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04005205effects 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 -04005206parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04005207for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005208
Cary Clark682c58d2018-05-16 07:07:07 -04005209The 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
5210should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
5211use 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
5212<a href='SkRect_Reference#Rect'>Rect</a>.
5213
Cary Clark61313f32018-10-08 14:57:48 -04005214Private: For example:
5215 if (!path.isInverseFillType() && paint.canComputeFastBounds()) {
5216 SkRect storage;
5217 if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &storage))) {
5218 return; // do not draw the path
5219 }
5220 }
5221 // draw the path
5222
Cary Clark12799e12017-07-28 15:18:29 -04005223### Parameters
5224
Cary Clark682c58d2018-05-16 07:07:07 -04005225<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5226 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5227 </tr>
5228 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5229 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005230 </tr>
5231</table>
5232
5233### Return Value
5234
5235fast computed bounds
5236
Cary Clark682c58d2018-05-16 07:07:07 -04005237<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005238
5239---
Cary Clark12799e12017-07-28 15:18:29 -04005240
Cary Clark682c58d2018-05-16 07:07:07 -04005241<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5242const <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 -04005243</pre>
5244
Cary Clark61313f32018-10-08 14:57:48 -04005245Private: (to be made private)
5246
Cary Clark12799e12017-07-28 15:18:29 -04005247### Parameters
5248
Cary Clark682c58d2018-05-16 07:07:07 -04005249<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
5250 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5251 </tr>
5252 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
5253 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04005254 </tr>
5255</table>
5256
5257### Return Value
5258
5259fast computed bounds
5260
Cary Clark682c58d2018-05-16 07:07:07 -04005261<a name='SkPaint_doComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005262
5263---
Cary Clark12799e12017-07-28 15:18:29 -04005264
Cary Clark682c58d2018-05-16 07:07:07 -04005265<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5266const <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 -04005267</pre>
5268
Cary Clark61313f32018-10-08 14:57:48 -04005269Private: (to be made private)
5270
Cary Clark682c58d2018-05-16 07:07:07 -04005271Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
5272account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
5273altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005274
5275### Parameters
5276
Cary Clark682c58d2018-05-16 07:07:07 -04005277<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5278 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5279 </tr>
5280 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5281 <td>computed bounds of geometry</td>
5282 </tr>
5283 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
5284 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005285 </tr>
5286</table>
5287
5288### Return Value
5289
5290fast computed bounds
5291
Cary Clarka90ea222018-10-16 10:30:28 -04005292<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05005293