blob: 84f97fa7143944a3389ca9eba864a3211a58324d [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> |
Cary Clark682c58d2018-05-16 07:07:07 -0400302| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
303| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
304| <a href='#Text_Size'>Text Size</a> | 12 |
305| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
306| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
307| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
308| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
309| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
310| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400311
312The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500313paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400314build system.
315
316### Return Value
317
Cary Clark682c58d2018-05-16 07:07:07 -0400318default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400319
320### Example
321
322<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
323
Cary Clark682c58d2018-05-16 07:07:07 -0400324<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400325
326---
Cary Clark12799e12017-07-28 15:18:29 -0400327
Cary Clark682c58d2018-05-16 07:07:07 -0400328<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
329<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400330</pre>
331
Cary Clark682c58d2018-05-16 07:07:07 -0400332Makes 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>,
333<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
334between 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 -0400335their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400336
Cary Clark682c58d2018-05-16 07:07:07 -0400337The 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>,
338<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
339This 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 -0400340
341### Parameters
342
Cary Clark682c58d2018-05-16 07:07:07 -0400343<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
344 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400345 </tr>
346</table>
347
348### Return Value
349
Cary Clark682c58d2018-05-16 07:07:07 -0400350shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400351
352### Example
353
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000354<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400355
356#### Example Output
357
358~~~~
359SK_ColorRED == paint1.getColor()
360SK_ColorBLUE == paint2.getColor()
361~~~~
362
363</fiddle-embed></div>
364
Cary Clark682c58d2018-05-16 07:07:07 -0400365<a name='SkPaint_move_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400366
367---
Cary Clark12799e12017-07-28 15:18:29 -0400368
Cary Clark682c58d2018-05-16 07:07:07 -0400369<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
370<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400371</pre>
372
Cary Clarkd0530ba2017-09-14 11:25:39 -0400373Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -0400374of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400375
Cary Clark682c58d2018-05-16 07:07:07 -0400376After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400377
378### Parameters
379
Cary Clark682c58d2018-05-16 07:07:07 -0400380<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
381 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400382 </tr>
383</table>
384
385### Return Value
386
Cary Clark682c58d2018-05-16 07:07:07 -0400387content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400388
389### Example
390
Cary Clark83647062018-07-18 16:21:51 -0400391<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -0400392
393#### Example Output
394
395~~~~
396path effect unique: true
397~~~~
398
399</fiddle-embed></div>
400
Cary Clark682c58d2018-05-16 07:07:07 -0400401<a name='SkPaint_reset'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400402
403---
Cary Clark12799e12017-07-28 15:18:29 -0400404
Cary Clark682c58d2018-05-16 07:07:07 -0400405<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
406void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400407</pre>
408
Cary Clark682c58d2018-05-16 07:07:07 -0400409Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
410<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400411
412### Example
413
414<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
415
416#### Example Output
417
418~~~~
419paint1 == paint2
420~~~~
421
422</fiddle-embed></div>
423
Cary Clark682c58d2018-05-16 07:07:07 -0400424<a name='SkPaint_destructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400425
426---
Cary Clark12799e12017-07-28 15:18:29 -0400427
Cary Clark682c58d2018-05-16 07:07:07 -0400428<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
429<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400430</pre>
431
Cary Clark682c58d2018-05-16 07:07:07 -0400432Decreases <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>,
433<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
434objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400435
Cary Clarka90ea222018-10-16 10:30:28 -0400436<a name='Management'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400437
Cary Clark682c58d2018-05-16 07:07:07 -0400438<a name='SkPaint_copy_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400439
440---
Cary Clark12799e12017-07-28 15:18:29 -0400441
Cary Clark682c58d2018-05-16 07:07:07 -0400442<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
443<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400444</pre>
445
Cary Clark682c58d2018-05-16 07:07:07 -0400446Makes 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>,
447<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
448between 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 -0400449prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -0400450resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
451are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400452
453### Parameters
454
Cary Clark682c58d2018-05-16 07:07:07 -0400455<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
456 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400457 </tr>
458</table>
459
460### Return Value
461
Cary Clark682c58d2018-05-16 07:07:07 -0400462content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400463
464### Example
465
466<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
467
468#### Example Output
469
470~~~~
471SK_ColorRED == paint1.getColor()
472SK_ColorRED == paint2.getColor()
473~~~~
474
475</fiddle-embed></div>
476
Cary Clark682c58d2018-05-16 07:07:07 -0400477<a name='SkPaint_move_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400478
479---
Cary Clark12799e12017-07-28 15:18:29 -0400480
Cary Clark682c58d2018-05-16 07:07:07 -0400481<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
482<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400483</pre>
484
Cary Clark682c58d2018-05-16 07:07:07 -0400485Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
486of 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 -0400487prior destination are decreased by one; those objects are deleted if the resulting count
488is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400489
Cary Clark682c58d2018-05-16 07:07:07 -0400490After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400491
492### Parameters
493
Cary Clark682c58d2018-05-16 07:07:07 -0400494<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
495 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400496 </tr>
497</table>
498
499### Return Value
500
Cary Clark682c58d2018-05-16 07:07:07 -0400501content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400502
503### Example
504
Ravi Mistry874e22b2018-07-19 03:49:13 +0000505<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -0400506
507#### Example Output
508
509~~~~
510SK_ColorRED == paint2.getColor()
511~~~~
512
513</fiddle-embed></div>
514
Cary Clark682c58d2018-05-16 07:07:07 -0400515<a name='SkPaint_equal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400516
517---
Cary Clark12799e12017-07-28 15:18:29 -0400518
Cary Clark682c58d2018-05-16 07:07:07 -0400519<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
520bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400521</pre>
522
Cary Clark682c58d2018-05-16 07:07:07 -0400523Compares <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
524if <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>,
525<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 -0400526
527### Parameters
528
Cary Clark682c58d2018-05-16 07:07:07 -0400529<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
530 <td><a href='#Paint'>Paint</a> to compare</td>
531 </tr>
532 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
533 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400534 </tr>
535</table>
536
537### Return Value
538
Cary Clark682c58d2018-05-16 07:07:07 -0400539true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400540
541### Example
542
543<div><fiddle-embed name="7481a948e34672720337a631830586dd">
544
545#### Example Output
546
547~~~~
548paint1 == paint2
549paint1 != paint2
550~~~~
551
552</fiddle-embed></div>
553
Cary Clark06c20f32018-03-20 15:53:27 -0400554### See Also
555
Cary Clark682c58d2018-05-16 07:07:07 -0400556<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400557
Cary Clark682c58d2018-05-16 07:07:07 -0400558<a name='SkPaint_notequal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400559
560---
Cary Clark12799e12017-07-28 15:18:29 -0400561
Cary Clark682c58d2018-05-16 07:07:07 -0400562<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
563bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400564</pre>
565
Cary Clark682c58d2018-05-16 07:07:07 -0400566Compares <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
567if <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>,
568<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 -0400569
570### Parameters
571
Cary Clark682c58d2018-05-16 07:07:07 -0400572<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
573 <td><a href='#Paint'>Paint</a> to compare</td>
574 </tr>
575 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
576 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400577 </tr>
578</table>
579
580### Return Value
581
Cary Clark682c58d2018-05-16 07:07:07 -0400582true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400583
584### Example
585
skia-bookmakera717ca92018-07-08 05:32:09 +0000586<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -0400587
588#### Example Output
589
590~~~~
591paint1 == paint2
592paint1 == paint2
593~~~~
594
595</fiddle-embed></div>
596
Cary Clark06c20f32018-03-20 15:53:27 -0400597### See Also
598
Cary Clark682c58d2018-05-16 07:07:07 -0400599<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400600
Cary Clark682c58d2018-05-16 07:07:07 -0400601<a name='SkPaint_getHash'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400602
603---
Cary Clark12799e12017-07-28 15:18:29 -0400604
Cary Clark682c58d2018-05-16 07:07:07 -0400605<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
606uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400607</pre>
608
Cary Clark682c58d2018-05-16 07:07:07 -0400609Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400610Identical hashes guarantee that the paints are
611equivalent, but differing hashes do not guarantee that the paints have differing
612contents.
613
Cary Clark682c58d2018-05-16 07:07:07 -0400614If <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 -0400615their hashes are also equal.
616
617The hash returned is platform and implementation specific.
618
619### Return Value
620
621a shallow hash
622
623### Example
624
Cary Clark83647062018-07-18 16:21:51 -0400625<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -0400626
627#### Example Output
628
629~~~~
630paint1 == paint2
631paint1.getHash() == paint2.getHash()
632~~~~
633
634</fiddle-embed></div>
635
Cary Clarka90ea222018-10-16 10:30:28 -0400636<a name='Hinting'></a>
637
638<a name='SkPaint_Hinting'></a>
639
Cary Clark12799e12017-07-28 15:18:29 -0400640---
641
Cary Clarka560c472017-11-27 10:44:06 -0500642<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400643 enum <a href='#SkPaint_Hinting'>Hinting</a> {
Cary Clarka90ea222018-10-16 10:30:28 -0400644 <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a> = 0,
645 <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a> = 1,
646 <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a> = 2,
647 <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -0400648 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500649</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400650
Cary Clark682c58d2018-05-16 07:07:07 -0400651<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
652look 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 -0400653muted effect or no effect at all depending on the platform.
654
Cary Clark7cfcbca2018-01-04 16:11:51 -0500655The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -0400656as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400657
658### Constants
659
Cary Clark682c58d2018-05-16 07:07:07 -0400660<table style='border-collapse: collapse; width: 62.5em'>
661 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
662<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
663<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
664 <tr style='background-color: #f0f0f0; '>
665 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
666 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
668Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500669With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
670bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400671outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -0500672to 26.6 fractional pixels.
673</td>
Cary Clark12799e12017-07-28 15:18:29 -0400674 </tr>
675 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400676 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
677 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
678 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
679Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500680With FreeType, this is equivalent in spirit to the
681FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400682lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -0400683Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -0500684</td>
Cary Clark12799e12017-07-28 15:18:29 -0400685 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400686 <tr style='background-color: #f0f0f0; '>
687 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
688 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
689 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
690Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500691With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
692choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -0500693gray-level rendering.
694</td>
Cary Clark12799e12017-07-28 15:18:29 -0400695 </tr>
696 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400697 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
698 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -0400700Modifies glyph outlines for maximum constrast. With FreeType, this selects
Cary Clark682c58d2018-05-16 07:07:07 -0400701FT_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 -0500702FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
703horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -0500704variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
705</td>
Cary Clark12799e12017-07-28 15:18:29 -0400706 </tr>
707</table>
708
Cary Clark682c58d2018-05-16 07:07:07 -0400709On <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 -0400710to 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 -0400711Normal 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 -0400712the LCD output is reduced to a single <a href='undocumented#Grayscale'>Grayscale</a> channel.
Cary Clark12799e12017-07-28 15:18:29 -0400713
Cary Clark682c58d2018-05-16 07:07:07 -0400714On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400715
Cary Clark682c58d2018-05-16 07:07:07 -0400716<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
717Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400718
Cary Clark682c58d2018-05-16 07:07:07 -0400719<a name='SkPaint_getHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400720
721---
Cary Clark12799e12017-07-28 15:18:29 -0400722
Cary Clark682c58d2018-05-16 07:07:07 -0400723<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
724<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400725</pre>
726
727Returns level of glyph outline adjustment.
728
729### Return Value
730
Cary Clark682c58d2018-05-16 07:07:07 -0400731one 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 -0400732
733### Example
734
Cary Clark83647062018-07-18 16:21:51 -0400735<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
Cary Clark12799e12017-07-28 15:18:29 -0400736
737#### Example Output
738
739~~~~
740SkPaint::kNormal_Hinting == paint.getHinting()
741~~~~
742
743</fiddle-embed></div>
744
Cary Clark682c58d2018-05-16 07:07:07 -0400745<a name='SkPaint_setHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400746
747---
Cary Clark12799e12017-07-28 15:18:29 -0400748
Cary Clark682c58d2018-05-16 07:07:07 -0400749<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
750void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400751</pre>
752
753Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400754Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400755
Cary Clark682c58d2018-05-16 07:07:07 -0400756| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400757| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -0400758| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
759| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
760| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
761| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400762
763### Parameters
764
Cary Clark682c58d2018-05-16 07:07:07 -0400765<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
766 <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 -0400767 </tr>
768</table>
769
770### Example
771
772<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
773
774#### Example Output
775
776~~~~
777paint1 == paint2
778~~~~
779
780</fiddle-embed></div>
781
Cary Clarka90ea222018-10-16 10:30:28 -0400782<a name='Flags'></a>
783
784<a name='SkPaint_Flags'></a>
785
Cary Clark12799e12017-07-28 15:18:29 -0400786---
787
Cary Clarka560c472017-11-27 10:44:06 -0500788<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400789 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clarka90ea222018-10-16 10:30:28 -0400790 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
791 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
792 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
793 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
794 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
795 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
Cary Clark61313f32018-10-08 14:57:48 -0400796 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
Cary Clarka90ea222018-10-16 10:30:28 -0400797 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
Cary Clark682c58d2018-05-16 07:07:07 -0400798 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400799 };
Cary Clark12799e12017-07-28 15:18:29 -0400800</pre>
801
Cary Clark682c58d2018-05-16 07:07:07 -0400802The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
803The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
804with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
805All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400806multiple settings at once.
807
808### Constants
809
Cary Clark682c58d2018-05-16 07:07:07 -0400810<table style='border-collapse: collapse; width: 62.5em'>
811 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
812<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
813<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
814 <tr style='background-color: #f0f0f0; '>
815 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
816 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
817 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400818mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400819 </tr>
820 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400821 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
822 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
824mask for setting Dither</td>
825 </tr>
826 <tr style='background-color: #f0f0f0; '>
827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
828 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
829 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
830mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -0400831 </tr>
832 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400833 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
834 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
836mask for setting Linear_Text</td>
837 </tr>
838 <tr style='background-color: #f0f0f0; '>
839 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
840 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
841 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
842mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400843 </tr>
844 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400845 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
846 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
847 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
848mask for setting LCD_Text</td>
849 </tr>
850 <tr style='background-color: #f0f0f0; '>
851 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
852 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
853 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
854mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400855 </tr>
856 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400857 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
858 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
860mask for setting Automatic_Hinting</td>
861 </tr>
862 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
864 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
865 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
866mask 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 -0400867 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400868<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
869</table>
Cary Clark12799e12017-07-28 15:18:29 -0400870
Cary Clarka90ea222018-10-16 10:30:28 -0400871<a name='SkPaint_ReserveFlags'></a>
872
873---
Cary Clark06c20f32018-03-20 15:53:27 -0400874
Cary Clarke8161dd2018-09-06 12:47:04 -0400875To be deprecated soon.
Cary Clark12799e12017-07-28 15:18:29 -0400876
Cary Clarke8161dd2018-09-06 12:47:04 -0400877Only valid for Android framework.
Cary Clark4855f782018-02-06 09:41:53 -0500878
Cary Clarka560c472017-11-27 10:44:06 -0500879<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400880 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
Cary Clarka90ea222018-10-16 10:30:28 -0400881 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText_ReserveFlag</a> = 0x08,
882 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText_ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -0400883 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500884</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400885
886### Constants
887
Cary Clark682c58d2018-05-16 07:07:07 -0400888<table style='border-collapse: collapse; width: 62.5em'>
889 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
890<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
891<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
892 <tr style='background-color: #f0f0f0; '>
893 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
894 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
895 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400896To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400897
Cary Clarke8161dd2018-09-06 12:47:04 -0400898</td>
Cary Clark12799e12017-07-28 15:18:29 -0400899 </tr>
900 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400901 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
902 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400904To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400905
Cary Clarke8161dd2018-09-06 12:47:04 -0400906</td>
Cary Clark12799e12017-07-28 15:18:29 -0400907 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400908</table>
Cary Clark4855f782018-02-06 09:41:53 -0500909
Cary Clark682c58d2018-05-16 07:07:07 -0400910<a name='SkPaint_getFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400911
912---
Cary Clark12799e12017-07-28 15:18:29 -0400913
Cary Clark682c58d2018-05-16 07:07:07 -0400914<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
915uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400916</pre>
917
Cary Clark682c58d2018-05-16 07:07:07 -0400918Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
919bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400920
921### Return Value
922
Cary Clark682c58d2018-05-16 07:07:07 -0400923zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400924
925### Example
926
927<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
928
929#### Example Output
930
931~~~~
932(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
933~~~~
934
935</fiddle-embed></div>
936
Cary Clark682c58d2018-05-16 07:07:07 -0400937<a name='SkPaint_setFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400938
939---
Cary Clark12799e12017-07-28 15:18:29 -0400940
Cary Clark682c58d2018-05-16 07:07:07 -0400941<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
942void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400943</pre>
944
Cary Clark682c58d2018-05-16 07:07:07 -0400945Replaces <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.
946All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400947
948### Parameters
949
Cary Clark682c58d2018-05-16 07:07:07 -0400950<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
951 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400952 </tr>
953</table>
954
955### Example
956
957<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
958
959#### Example Output
960
961~~~~
962paint.isAntiAlias()
963paint.isDither()
964~~~~
965
966</fiddle-embed></div>
967
Cary Clarka90ea222018-10-16 10:30:28 -0400968<a name='Anti_Alias'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400969
Cary Clarka90ea222018-10-16 10:30:28 -0400970---
Cary Clark08895c42018-02-01 09:37:32 -0500971
Cary Clarkffb3d682018-05-17 12:17:28 -0400972<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -0400973If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
974If <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 -0400975
Cary Clark682c58d2018-05-16 07:07:07 -0400976The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400977passing through the pixel center may, but is not required to, draw the pixel.
978
Cary Clark682c58d2018-05-16 07:07:07 -0400979<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
980active <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 -0400981
Cary Clarkffb3d682018-05-17 12:17:28 -0400982A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
983<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 -0400984<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400985
Cary Clarkffb3d682018-05-17 12:17:28 -0400986The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400987
Cary Clarkffb3d682018-05-17 12:17:28 -0400988<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
989<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 -0400990at compile time.
991
992### Example
993
994<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
995A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -0400996The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
997<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500998</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400999
Cary Clark682c58d2018-05-16 07:07:07 -04001000<a name='SkPaint_isAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001001
1002---
Cary Clark12799e12017-07-28 15:18:29 -04001003
Cary Clark682c58d2018-05-16 07:07:07 -04001004<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1005bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001006</pre>
1007
Cary Clark80247e52018-07-11 16:18:41 -04001008Returns 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 -04001009
Cary Clark682c58d2018-05-16 07:07:07 -04001010Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001011
1012### Return Value
1013
Cary Clark682c58d2018-05-16 07:07:07 -04001014<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001015
1016### Example
1017
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001018<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -04001019
1020#### Example Output
1021
1022~~~~
1023paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1024paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1025~~~~
1026
1027</fiddle-embed></div>
1028
Cary Clark682c58d2018-05-16 07:07:07 -04001029<a name='SkPaint_setAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001030
1031---
Cary Clark12799e12017-07-28 15:18:29 -04001032
Cary Clark682c58d2018-05-16 07:07:07 -04001033<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1034void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001035</pre>
1036
Cary Clark682c58d2018-05-16 07:07:07 -04001037Requests, 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 -04001038partial transparency.
1039
Cary Clark682c58d2018-05-16 07:07:07 -04001040Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1041Clears <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 -04001042
1043### Parameters
1044
Cary Clark682c58d2018-05-16 07:07:07 -04001045<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1046 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001047 </tr>
1048</table>
1049
1050### Example
1051
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001052<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -04001053
1054#### Example Output
1055
1056~~~~
1057paint1 == paint2
1058~~~~
1059
1060</fiddle-embed></div>
1061
Cary Clarka90ea222018-10-16 10:30:28 -04001062<a name='Dither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001063
Cary Clarka90ea222018-10-16 10:30:28 -04001064---
Cary Clark08895c42018-02-01 09:37:32 -05001065
Cary Clark682c58d2018-05-16 07:07:07 -04001066<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001067This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001068Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1069and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1070and 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 -04001071
1072Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001073<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>.
1074<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
1075<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 -04001076
Cary Clark682c58d2018-05-16 07:07:07 -04001077<a href='#Dither'>Dither</a> is disabled by default.
1078<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 -04001079at compile time.
1080
Cary Clark2be81cf2018-09-13 12:04:30 -04001081Some 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 -04001082
1083### Example
1084
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001085<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 -05001086alternating nearby colors from pixel to pixel.
1087</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001088
1089### Example
1090
Cary Clarka619d452018-07-16 08:12:01 -04001091<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark224c7002018-06-27 11:00:21 -04001092Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001093dither, making it easier to see.
1094</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001095
Cary Clarka90ea222018-10-16 10:30:28 -04001096### See Also
1097
1098Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1099
Cary Clark682c58d2018-05-16 07:07:07 -04001100<a name='SkPaint_isDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001101
1102---
Cary Clark12799e12017-07-28 15:18:29 -04001103
Cary Clark682c58d2018-05-16 07:07:07 -04001104<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1105bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001106</pre>
1107
Cary Clark80247e52018-07-11 16:18:41 -04001108Returns true if color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001109
Cary Clark682c58d2018-05-16 07:07:07 -04001110Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001111
1112### Return Value
1113
Cary Clark682c58d2018-05-16 07:07:07 -04001114<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001115
1116### Example
1117
1118<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1119
1120#### Example Output
1121
1122~~~~
1123paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1124paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1125~~~~
1126
1127</fiddle-embed></div>
1128
Cary Clark682c58d2018-05-16 07:07:07 -04001129<a name='SkPaint_setDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001130
1131---
Cary Clark12799e12017-07-28 15:18:29 -04001132
Cary Clark682c58d2018-05-16 07:07:07 -04001133<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1134void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001135</pre>
1136
1137Requests, but does not require, to distribute color error.
1138
Cary Clark682c58d2018-05-16 07:07:07 -04001139Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1140Clears <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 -04001141
1142### Parameters
1143
Cary Clark682c58d2018-05-16 07:07:07 -04001144<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1145 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001146 </tr>
1147</table>
1148
1149### Example
1150
1151<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1152
1153#### Example Output
1154
1155~~~~
1156paint1 == paint2
1157~~~~
1158
1159</fiddle-embed></div>
1160
1161### See Also
1162
Cary Clark682c58d2018-05-16 07:07:07 -04001163<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001164
Cary Clarka90ea222018-10-16 10:30:28 -04001165<a name='Device_Text'></a>
1166
Cary Clark12799e12017-07-28 15:18:29 -04001167---
1168
Cary Clark682c58d2018-05-16 07:07:07 -04001169<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 -04001170
Cary Clarkffb3d682018-05-17 12:17:28 -04001171When 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 -04001172create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001173on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001174<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 -04001175the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001176
Cary Clark682c58d2018-05-16 07:07:07 -04001177<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 -04001178As the opaqueness
1179of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1180
1181Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001182<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1183<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
1184<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 -04001185
1186### Example
1187
Cary Clark682c58d2018-05-16 07:07:07 -04001188<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>.
1189When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1190When <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 -05001191</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001192
Cary Clarka90ea222018-10-16 10:30:28 -04001193<a name='Linear_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001194
Cary Clark682c58d2018-05-16 07:07:07 -04001195<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>.
1196If <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>.
1197If <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 -04001198
Cary Clark682c58d2018-05-16 07:07:07 -04001199<a name='SkPaint_isLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001200
1201---
Cary Clark12799e12017-07-28 15:18:29 -04001202
Cary Clark682c58d2018-05-16 07:07:07 -04001203<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1204bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001205</pre>
1206
Cary Clark80247e52018-07-11 16:18:41 -04001207Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001208
Cary Clark682c58d2018-05-16 07:07:07 -04001209Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001210
1211### Return Value
1212
Cary Clark682c58d2018-05-16 07:07:07 -04001213<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001214
1215### Example
1216
1217<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1218
1219### See Also
1220
Cary Clark682c58d2018-05-16 07:07:07 -04001221<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001222
Cary Clark682c58d2018-05-16 07:07:07 -04001223<a name='SkPaint_setLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001224
1225---
Cary Clark12799e12017-07-28 15:18:29 -04001226
Cary Clark682c58d2018-05-16 07:07:07 -04001227<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1228void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001229</pre>
1230
Cary Clark80247e52018-07-11 16:18:41 -04001231Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark682c58d2018-05-16 07:07:07 -04001232By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001233
Cary Clark682c58d2018-05-16 07:07:07 -04001234Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1235Clears <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 -04001236
1237### Parameters
1238
Cary Clark682c58d2018-05-16 07:07:07 -04001239<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1240 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001241 </tr>
1242</table>
1243
1244### Example
1245
Cary Clark83647062018-07-18 16:21:51 -04001246<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001247
1248### See Also
1249
Cary Clark682c58d2018-05-16 07:07:07 -04001250<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001251
Cary Clarka90ea222018-10-16 10:30:28 -04001252<a name='Subpixel_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001253
Cary Clark682c58d2018-05-16 07:07:07 -04001254<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 -04001255As the opaqueness
1256of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1257
Cary Clark682c58d2018-05-16 07:07:07 -04001258<a name='SkPaint_isSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001259
1260---
Cary Clark12799e12017-07-28 15:18:29 -04001261
Cary Clark682c58d2018-05-16 07:07:07 -04001262<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1263bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001264</pre>
1265
Cary Clark80247e52018-07-11 16:18:41 -04001266Returns 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 -04001267
Cary Clark682c58d2018-05-16 07:07:07 -04001268Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001269
1270### Return Value
1271
Cary Clark682c58d2018-05-16 07:07:07 -04001272<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001273
1274### Example
1275
1276<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1277
1278#### Example Output
1279
1280~~~~
1281paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1282paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1283~~~~
1284
1285</fiddle-embed></div>
1286
Cary Clark682c58d2018-05-16 07:07:07 -04001287<a name='SkPaint_setSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001288
1289---
Cary Clark12799e12017-07-28 15:18:29 -04001290
Cary Clark682c58d2018-05-16 07:07:07 -04001291<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1292void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001293</pre>
1294
Cary Clark682c58d2018-05-16 07:07:07 -04001295Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001296
Cary Clark682c58d2018-05-16 07:07:07 -04001297Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1298Clears <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 -04001299
1300### Parameters
1301
Cary Clark682c58d2018-05-16 07:07:07 -04001302<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1303 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001304 </tr>
1305</table>
1306
1307### Example
1308
1309<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1310
1311#### Example Output
1312
1313~~~~
1314paint1 == paint2
1315~~~~
1316
1317</fiddle-embed></div>
1318
Cary Clarka90ea222018-10-16 10:30:28 -04001319<a name='LCD_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001320
Cary Clarkffb3d682018-05-17 12:17:28 -04001321When 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 -04001322create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001323on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001324<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 -04001325the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001326
Cary Clark682c58d2018-05-16 07:07:07 -04001327<a name='SkPaint_isLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001328
1329---
Cary Clark12799e12017-07-28 15:18:29 -04001330
Cary Clark682c58d2018-05-16 07:07:07 -04001331<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1332bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001333</pre>
1334
Cary Clark80247e52018-07-11 16:18:41 -04001335Returns true if <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001336
Cary Clark682c58d2018-05-16 07:07:07 -04001337Returns 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 -04001338
1339### Return Value
1340
Cary Clark682c58d2018-05-16 07:07:07 -04001341<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001342
1343### Example
1344
skia-bookmakera391c722018-07-09 05:28:19 +00001345<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001346
1347#### Example Output
1348
1349~~~~
1350paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1351paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1352~~~~
1353
1354</fiddle-embed></div>
1355
Cary Clark682c58d2018-05-16 07:07:07 -04001356<a name='SkPaint_setLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001357
1358---
Cary Clark12799e12017-07-28 15:18:29 -04001359
Cary Clark682c58d2018-05-16 07:07:07 -04001360<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1361void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001362</pre>
1363
Cary Clark682c58d2018-05-16 07:07:07 -04001364Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001365
Cary Clark682c58d2018-05-16 07:07:07 -04001366Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1367Clears <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 -04001368
1369### Parameters
1370
Cary Clark682c58d2018-05-16 07:07:07 -04001371<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
1372 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001373 </tr>
1374</table>
1375
1376### Example
1377
skia-bookmakere0a458f2018-07-16 05:29:00 +00001378<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001379
1380#### Example Output
1381
1382~~~~
1383paint1 == paint2
1384~~~~
1385
1386</fiddle-embed></div>
1387
Cary Clarka90ea222018-10-16 10:30:28 -04001388<a name='Font_Embedded_Bitmaps'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001389
Cary Clarka90ea222018-10-16 10:30:28 -04001390---
Cary Clark08895c42018-02-01 09:37:32 -05001391
Cary Clark682c58d2018-05-16 07:07:07 -04001392<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
1393<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 -05001394in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001395
Cary Clark682c58d2018-05-16 07:07:07 -04001396FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
1397the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001398Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04001399<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001400
Cary Clark682c58d2018-05-16 07:07:07 -04001401<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
1402<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
1403<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001404
1405### Example
1406
Cary Clarka560c472017-11-27 10:44:06 -05001407<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001408<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001409 includes an embedded bitmap Glyph at odd font sizes. This example works
1410 on platforms that use FreeType as their Font_Engine.
1411 Windows may, but is not required to, return a bitmap glyph if
1412 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1413 bitmap.allocN32Pixels(30, 15);
1414 bitmap.eraseColor(0);
1415 SkCanvas offscreen(bitmap);
1416 SkPaint paint;
1417 paint.setAntiAlias(true);
1418 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001419 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001420 for (bool embedded : { false, true}) {
1421 paint.setEmbeddedBitmapText(embedded);
1422 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1423 }
1424 canvas->drawBitmap(bitmap, 0, 0);
1425 canvas->scale(10, 10);
1426 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001427
Cary Clarka560c472017-11-27 10:44:06 -05001428</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001429
Cary Clark682c58d2018-05-16 07:07:07 -04001430<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001431
1432---
Cary Clark12799e12017-07-28 15:18:29 -04001433
Cary Clark682c58d2018-05-16 07:07:07 -04001434<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1435bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001436</pre>
1437
Cary Clark80247e52018-07-11 16:18:41 -04001438Returns 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 -04001439
Cary Clark682c58d2018-05-16 07:07:07 -04001440Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001441
1442### Return Value
1443
Cary Clark682c58d2018-05-16 07:07:07 -04001444<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001445
1446### Example
1447
1448<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1449
1450#### Example Output
1451
1452~~~~
1453paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1454paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1455~~~~
1456
1457</fiddle-embed></div>
1458
Cary Clark682c58d2018-05-16 07:07:07 -04001459<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001460
1461---
Cary Clark12799e12017-07-28 15:18:29 -04001462
Cary Clark682c58d2018-05-16 07:07:07 -04001463<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1464void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001465</pre>
1466
1467Requests, but does not require, to use bitmaps in fonts instead of outlines.
1468
Cary Clark682c58d2018-05-16 07:07:07 -04001469Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1470Clears <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 -04001471
1472### Parameters
1473
Cary Clark682c58d2018-05-16 07:07:07 -04001474<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
1475 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001476 </tr>
1477</table>
1478
1479### Example
1480
1481<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1482
1483#### Example Output
1484
1485~~~~
1486paint1 == paint2
1487~~~~
1488
1489</fiddle-embed></div>
1490
Cary Clarka90ea222018-10-16 10:30:28 -04001491<a name='Automatic_Hinting'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001492
Cary Clark682c58d2018-05-16 07:07:07 -04001493If <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>
1494instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
1495<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
1496<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001497
Cary Clark682c58d2018-05-16 07:07:07 -04001498<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 -04001499
Cary Clark682c58d2018-05-16 07:07:07 -04001500<a name='SkPaint_isAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001501
1502---
Cary Clark12799e12017-07-28 15:18:29 -04001503
Cary Clark682c58d2018-05-16 07:07:07 -04001504<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1505bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001506</pre>
1507
Cary Clark80247e52018-07-11 16:18:41 -04001508Returns 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
1509platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>. If true, instructs
1510the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001511
Cary Clark682c58d2018-05-16 07:07:07 -04001512Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001513
1514### Return Value
1515
Cary Clark682c58d2018-05-16 07:07:07 -04001516<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001517
1518### Example
1519
1520<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1521
1522#### Example Output
1523
1524~~~~
1525paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1526paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1527~~~~
1528
1529</fiddle-embed></div>
1530
1531### See Also
1532
Cary Clark682c58d2018-05-16 07:07:07 -04001533<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001534
Cary Clark682c58d2018-05-16 07:07:07 -04001535<a name='SkPaint_setAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001536
1537---
Cary Clark12799e12017-07-28 15:18:29 -04001538
Cary Clark682c58d2018-05-16 07:07:07 -04001539<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1540void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001541</pre>
1542
Cary Clark80247e52018-07-11 16:18:41 -04001543Sets whether to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001544If <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 -04001545instructs 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 -04001546<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
1547<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001548
Cary Clark682c58d2018-05-16 07:07:07 -04001549Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001550
Cary Clark682c58d2018-05-16 07:07:07 -04001551Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1552Clears <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 -04001553
1554### Parameters
1555
Cary Clark682c58d2018-05-16 07:07:07 -04001556<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
1557 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001558 </tr>
1559</table>
1560
1561### Example
1562
1563<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1564
1565### See Also
1566
Cary Clark682c58d2018-05-16 07:07:07 -04001567<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001568
Cary Clarka90ea222018-10-16 10:30:28 -04001569<a name='Fake_Bold'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001570
Cary Clarka90ea222018-10-16 10:30:28 -04001571---
Cary Clark08895c42018-02-01 09:37:32 -05001572
Cary Clark682c58d2018-05-16 07:07:07 -04001573<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 -05001574is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04001575bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001576
Cary Clark682c58d2018-05-16 07:07:07 -04001577Use <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 -04001578is not available.
1579
Cary Clark7cfcbca2018-01-04 16:11:51 -05001580A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04001581the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
1582by 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 -04001583
Cary Clark682c58d2018-05-16 07:07:07 -04001584<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001585
1586### Example
1587
1588<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1589
Cary Clark682c58d2018-05-16 07:07:07 -04001590<a name='SkPaint_isFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001591
1592---
Cary Clark12799e12017-07-28 15:18:29 -04001593
Cary Clark682c58d2018-05-16 07:07:07 -04001594<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1595bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001596</pre>
1597
Cary Clark80247e52018-07-11 16:18:41 -04001598Returns true if approximate bold by increasing the stroke width when creating glyph bitmaps
Cary Clark12799e12017-07-28 15:18:29 -04001599from outlines.
1600
Cary Clark682c58d2018-05-16 07:07:07 -04001601Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001602
1603### Return Value
1604
Cary Clark682c58d2018-05-16 07:07:07 -04001605<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001606
1607### Example
1608
1609<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1610
1611#### Example Output
1612
1613~~~~
1614paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1615paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1616~~~~
1617
1618</fiddle-embed></div>
1619
Cary Clark682c58d2018-05-16 07:07:07 -04001620<a name='SkPaint_setFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001621
1622---
Cary Clark12799e12017-07-28 15:18:29 -04001623
Cary Clark682c58d2018-05-16 07:07:07 -04001624<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1625void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001626</pre>
1627
Cary Clark80247e52018-07-11 16:18:41 -04001628Increases stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001629
Cary Clark682c58d2018-05-16 07:07:07 -04001630Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1631Clears <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 -04001632
1633### Parameters
1634
Cary Clark682c58d2018-05-16 07:07:07 -04001635<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
1636 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001637 </tr>
1638</table>
1639
1640### Example
1641
1642<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1643
1644#### Example Output
1645
1646~~~~
1647paint1 == paint2
1648~~~~
1649
1650</fiddle-embed></div>
1651
Cary Clarka90ea222018-10-16 10:30:28 -04001652<a name='Full_Hinting_Spacing'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001653
Cary Clark682c58d2018-05-16 07:07:07 -04001654if <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 -04001655spacing 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 -04001656<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
1657FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001658
Cary Clark137b8742018-05-30 09:21:49 -04001659<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text <a href='undocumented#Kerning'>Kerning</a>, where the space between
1660a 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 -04001661
Cary Clark682c58d2018-05-16 07:07:07 -04001662<a name='SkPaint_isDevKernText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001663
1664---
Cary Clark12799e12017-07-28 15:18:29 -04001665
Cary Clark682c58d2018-05-16 07:07:07 -04001666<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1667bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001668</pre>
1669
Cary Clark682c58d2018-05-16 07:07:07 -04001670Deprecated.
1671
Cary Clark682c58d2018-05-16 07:07:07 -04001672<a name='SkPaint_setDevKernText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001673
1674---
Cary Clark12799e12017-07-28 15:18:29 -04001675
Cary Clark682c58d2018-05-16 07:07:07 -04001676<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1677void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04001678</pre>
1679
Cary Clark682c58d2018-05-16 07:07:07 -04001680Deprecated.
1681
Cary Clarka90ea222018-10-16 10:30:28 -04001682<a name='Filter_Quality_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001683
Cary Clarka90ea222018-10-16 10:30:28 -04001684---
Cary Clark08895c42018-02-01 09:37:32 -05001685
Cary Clark682c58d2018-05-16 07:07:07 -04001686<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
1687A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
1688A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
1689If 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 -04001690in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001691
Cary Clark682c58d2018-05-16 07:07:07 -04001692<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 -04001693
1694<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001695 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
1696 </tr> <tr>
1697 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
1698 </tr> <tr>
1699 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
1700 </tr> <tr>
1701 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
1702 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001703</table>
1704
Cary Clark682c58d2018-05-16 07:07:07 -04001705and 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 -04001706
Cary Clark682c58d2018-05-16 07:07:07 -04001707<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 -04001708
1709### Example
1710
skia-bookmaker525f9a92018-05-03 06:27:39 +00001711<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001712
Cary Clark682c58d2018-05-16 07:07:07 -04001713<a name='SkPaint_getFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001714
1715---
Cary Clark12799e12017-07-28 15:18:29 -04001716
Cary Clark682c58d2018-05-16 07:07:07 -04001717<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1718<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001719</pre>
1720
Cary Clark682c58d2018-05-16 07:07:07 -04001721Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001722draws faster; a higher setting looks better when the image is scaled.
1723
1724### Return Value
1725
Cary Clark682c58d2018-05-16 07:07:07 -04001726one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
1727<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001728
1729### Example
1730
1731<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1732
1733#### Example Output
1734
1735~~~~
1736kNone_SkFilterQuality == paint.getFilterQuality()
1737~~~~
1738
1739</fiddle-embed></div>
1740
Cary Clark682c58d2018-05-16 07:07:07 -04001741<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001742
1743---
Cary Clark12799e12017-07-28 15:18:29 -04001744
Cary Clark682c58d2018-05-16 07:07:07 -04001745<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1746void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001747</pre>
1748
Cary Clark682c58d2018-05-16 07:07:07 -04001749Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001750draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04001751Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001752
1753### Parameters
1754
Cary Clark682c58d2018-05-16 07:07:07 -04001755<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
1756 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
1757<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001758 </tr>
1759</table>
1760
1761### Example
1762
1763<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1764
1765#### Example Output
1766
1767~~~~
1768kHigh_SkFilterQuality == paint.getFilterQuality()
1769~~~~
1770
1771</fiddle-embed></div>
1772
1773### See Also
1774
Cary Clark682c58d2018-05-16 07:07:07 -04001775<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001776
Cary Clarka90ea222018-10-16 10:30:28 -04001777<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001778
Cary Clarka90ea222018-10-16 10:30:28 -04001779---
Cary Clark12799e12017-07-28 15:18:29 -04001780
Cary Clarkab2621d2018-01-30 10:08:57 -05001781| name | description |
1782| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04001783| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
1784| <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 -04001785
Cary Clarkffb3d682018-05-17 12:17:28 -04001786<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 -05001787values used to draw a filled or stroked shape in a 32-bit value. Each component
1788occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1789All values in any combination are valid.
1790
Cary Clark682c58d2018-05-16 07:07:07 -04001791<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 -04001792RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001793
Cary Clarkffb3d682018-05-17 12:17:28 -04001794The 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 -05001795positions on the output device, which may have more or fewer bits, and may have
1796a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001797
Cary Clarkffb3d682018-05-17 12:17:28 -04001798| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001799| --- | --- | --- | --- | --- |
1800| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1801
1802### Example
1803
Ravi Mistry874e22b2018-07-19 03:49:13 +00001804<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001805
Cary Clark682c58d2018-05-16 07:07:07 -04001806<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001807
1808---
Cary Clark12799e12017-07-28 15:18:29 -04001809
Cary Clark682c58d2018-05-16 07:07:07 -04001810<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1811<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001812</pre>
1813
Cary Clarkffb3d682018-05-17 12:17:28 -04001814Retrieves <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 -04001815Use 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 -04001816a color component.
1817
1818### Return Value
1819
Cary Clarkffb3d682018-05-17 12:17:28 -04001820<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001821
1822### Example
1823
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001824<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001825
1826#### Example Output
1827
1828~~~~
1829Yellow is 100% red, 100% green, and 0% blue.
1830~~~~
1831
1832</fiddle-embed></div>
1833
1834### See Also
1835
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001836<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1837
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001838<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001839
1840---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001841
1842<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1843<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const
1844</pre>
1845
1846Retrieves alpha and RGB, unpmreultiplied, as four floating point values. RGB are
1847are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1848
1849### Return Value
1850
1851<a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA
1852
1853### Example
1854
1855<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1856
1857#### Example Output
1858
1859~~~~
1860Yellow is 100% red, 100% green, and 0% blue.
1861~~~~
1862
1863</fiddle-embed></div>
1864
1865### See Also
1866
1867<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001868
Cary Clark682c58d2018-05-16 07:07:07 -04001869<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001870
1871---
Cary Clark12799e12017-07-28 15:18:29 -04001872
Cary Clark682c58d2018-05-16 07:07:07 -04001873<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1874void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04001875</pre>
1876
Cary Clarkffb3d682018-05-17 12:17:28 -04001877Sets <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,
1878<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 -04001879
1880### Parameters
1881
Cary Clark682c58d2018-05-16 07:07:07 -04001882<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001883 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001884 </tr>
1885</table>
1886
1887### Example
1888
skia-bookmaker233c6522018-07-04 05:33:26 +00001889<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001890
1891#### Example Output
1892
1893~~~~
1894green1 == green2
1895~~~~
1896
1897</fiddle-embed></div>
1898
1899### See Also
1900
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001901<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>
1902
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001903<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001904
1905---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001906
1907<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1908void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& color, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
1909</pre>
1910
1911Sets alpha and RGB used when stroking and filling. The <a href='#SkPaint_setColor4f_color'>color</a> is four floating
1912point values, unpremultiplied. The <a href='#SkPaint_setColor4f_color'>color</a> values are interpreted as being in
1913the <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
1914sRGB <a href='#SkPaint_setColor4f_color'>color</a> space.
1915
1916### Parameters
1917
1918<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
1919 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA</td>
1920 </tr>
1921 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
1922 <td><a href='undocumented#Color_Space'>Color Space</a> describing the encoding of <a href='#SkPaint_setColor4f_color'>color</a></td>
1923 </tr>
1924</table>
1925
1926### Example
1927
1928<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
1929
1930#### Example Output
1931
1932~~~~
1933green1 == green2
1934~~~~
1935
1936</fiddle-embed></div>
1937
1938### See Also
1939
1940<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 -04001941
Cary Clarka90ea222018-10-16 10:30:28 -04001942<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001943
Cary Clarkffb3d682018-05-17 12:17:28 -04001944<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 -04001945
Cary Clark682c58d2018-05-16 07:07:07 -04001946<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001947
1948---
Cary Clark12799e12017-07-28 15:18:29 -04001949
Cary Clark682c58d2018-05-16 07:07:07 -04001950<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1951uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001952</pre>
1953
Cary Clark682c58d2018-05-16 07:07:07 -04001954Retrieves <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 -04001955
1956### Return Value
1957
Cary Clark682c58d2018-05-16 07:07:07 -04001958<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001959
1960### Example
1961
Cary Clark83647062018-07-18 16:21:51 -04001962<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04001963
1964#### Example Output
1965
1966~~~~
1967255 == paint.getAlpha()
1968~~~~
1969
1970</fiddle-embed></div>
1971
Cary Clark682c58d2018-05-16 07:07:07 -04001972<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001973
1974---
Cary Clark12799e12017-07-28 15:18:29 -04001975
Cary Clark682c58d2018-05-16 07:07:07 -04001976<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1977void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04001978</pre>
1979
Cary Clarkffb3d682018-05-17 12:17:28 -04001980Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04001981unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04001982build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
1983<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 -04001984fully opaque.
1985
1986### Parameters
1987
Cary Clark682c58d2018-05-16 07:07:07 -04001988<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
1989 <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 -04001990 </tr>
1991</table>
1992
1993### Example
1994
Ravi Mistry874e22b2018-07-19 03:49:13 +00001995<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04001996
1997#### Example Output
1998
1999~~~~
20000x44112233 == paint.getColor()
2001~~~~
2002
2003</fiddle-embed></div>
2004
Cary Clark682c58d2018-05-16 07:07:07 -04002005<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002006
2007---
Cary Clark12799e12017-07-28 15:18:29 -04002008
Cary Clark682c58d2018-05-16 07:07:07 -04002009<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2010void <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 -04002011</pre>
2012
Cary Clark682c58d2018-05-16 07:07:07 -04002013Sets <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 -04002014The 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 -04002015
2016### Parameters
2017
Cary Clark682c58d2018-05-16 07:07:07 -04002018<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2019 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2020 </tr>
2021 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002022 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002023 </tr>
2024 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002025 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002026 </tr>
2027 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002028 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002029 </tr>
2030</table>
2031
2032### Example
2033
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002034<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04002035
2036#### Example Output
2037
2038~~~~
2039transRed1 == transRed2
2040~~~~
2041
2042</fiddle-embed></div>
2043
2044### See Also
2045
Cary Clark682c58d2018-05-16 07:07:07 -04002046<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002047
Cary Clarka90ea222018-10-16 10:30:28 -04002048<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002049
Cary Clarka90ea222018-10-16 10:30:28 -04002050---
Cary Clark08895c42018-02-01 09:37:32 -05002051
Cary Clark682c58d2018-05-16 07:07:07 -04002052<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2053Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002054
Cary Clarka90ea222018-10-16 10:30:28 -04002055<a name='Style_Fill'></a>
2056
Cary Clark682c58d2018-05-16 07:07:07 -04002057Set <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 -04002058The fill covers the area inside the geometry for most shapes.
2059
Cary Clarka90ea222018-10-16 10:30:28 -04002060<a name='Style_Stroke'></a>
2061
Cary Clark682c58d2018-05-16 07:07:07 -04002062Set <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 -04002063
Cary Clarkbc5697d2017-10-04 14:31:33 -04002064The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002065<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>.
2066The 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 -04002067The 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 -04002068may 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 -04002069
Cary Clarka90ea222018-10-16 10:30:28 -04002070### See Also
Cary Clark12799e12017-07-28 15:18:29 -04002071
Cary Clarka90ea222018-10-16 10:30:28 -04002072<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>
2073
2074<a name='Hairline'></a>
2075
2076---
2077
2078<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Hairline'>Hairline</a>.
2079<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 -05002080flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002081
Cary Clarka90ea222018-10-16 10:30:28 -04002082<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 -04002083two 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 -04002084pixel. 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 -05002085GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002086while stroking.
2087
Cary Clarka90ea222018-10-16 10:30:28 -04002088### See Also
2089
2090<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>
2091
2092<a name='SkPaint_Style'></a>
2093
2094---
Cary Clark12799e12017-07-28 15:18:29 -04002095
Cary Clarka560c472017-11-27 10:44:06 -05002096<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002097 enum <a href='#SkPaint_Style'>Style</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002098 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
2099 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
2100 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002101 };
Cary Clarka90ea222018-10-16 10:30:28 -04002102</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04002103
Cary Clarka90ea222018-10-16 10:30:28 -04002104<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002105 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 -05002106</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002107
Cary Clark682c58d2018-05-16 07:07:07 -04002108Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002109The stroke and fill
2110share all paint attributes; for instance, they are drawn with the same color.
2111
Cary Clark682c58d2018-05-16 07:07:07 -04002112Use <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 -04002113a fill draw.
2114
2115### Constants
2116
Cary Clark682c58d2018-05-16 07:07:07 -04002117<table style='border-collapse: collapse; width: 62.5em'>
2118 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2119<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2120<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2121 <tr style='background-color: #f0f0f0; '>
2122 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2123 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2124 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002125Applies 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>.
2126<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 -04002127<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2128The <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 -04002129and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002130<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 -05002131</td>
Cary Clark12799e12017-07-28 15:18:29 -04002132 </tr>
2133 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002134 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2135 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2136 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002137Applies 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 -04002138<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,
2139and ignore the set <a href='#SkPaint_Style'>Style</a>.
2140The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2141</td>
2142 </tr>
2143 <tr style='background-color: #f0f0f0; '>
2144 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2145 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2146 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002147Applies 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 -04002148<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>,
2149and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002150</td>
Cary Clark12799e12017-07-28 15:18:29 -04002151 </tr>
2152 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002153 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2154 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2155 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2156May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002157</td>
Cary Clark12799e12017-07-28 15:18:29 -04002158 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002159</table>
Cary Clark12799e12017-07-28 15:18:29 -04002160
Cary Clark682c58d2018-05-16 07:07:07 -04002161<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002162
2163---
Cary Clark12799e12017-07-28 15:18:29 -04002164
Cary Clark682c58d2018-05-16 07:07:07 -04002165<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2166<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002167</pre>
2168
Cary Clark80247e52018-07-11 16:18:41 -04002169Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002170
2171### Return Value
2172
Cary Clark682c58d2018-05-16 07:07:07 -04002173one 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 -04002174
2175### Example
2176
2177<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2178
2179#### Example Output
2180
2181~~~~
2182SkPaint::kFill_Style == paint.getStyle()
2183~~~~
2184
2185</fiddle-embed></div>
2186
2187### See Also
2188
Cary Clark682c58d2018-05-16 07:07:07 -04002189<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002190
Cary Clark682c58d2018-05-16 07:07:07 -04002191<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002192
2193---
Cary Clark12799e12017-07-28 15:18:29 -04002194
Cary Clark682c58d2018-05-16 07:07:07 -04002195<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2196void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002197</pre>
2198
2199Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002200Has 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 -04002201
2202### Parameters
2203
Cary Clark682c58d2018-05-16 07:07:07 -04002204<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2205 <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 -04002206 </tr>
2207</table>
2208
2209### Example
2210
2211<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2212
2213### See Also
2214
Cary Clark682c58d2018-05-16 07:07:07 -04002215<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002216
Cary Clarka90ea222018-10-16 10:30:28 -04002217<a name='Stroke_Width'></a>
2218
Cary Clark12799e12017-07-28 15:18:29 -04002219---
2220
Cary Clark682c58d2018-05-16 07:07:07 -04002221<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002222of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002223set 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 -04002224
2225When width is greater than zero, the stroke encompasses as many pixels partially
2226or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002227the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002228
Cary Clarka90ea222018-10-16 10:30:28 -04002229The stroke dimensions are scaled by the canvas matrix, but <a href='#Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002230remains one pixel wide regardless of scaling.
2231
2232The default width for the paint is zero.
2233
2234### Example
2235
skia-bookmaker525f9a92018-05-03 06:27:39 +00002236<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 -05002237line and the platform implementation.
2238</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002239
Cary Clark682c58d2018-05-16 07:07:07 -04002240<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002241
2242---
Cary Clark12799e12017-07-28 15:18:29 -04002243
Cary Clark682c58d2018-05-16 07:07:07 -04002244<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2245<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002246</pre>
2247
Cary Clark682c58d2018-05-16 07:07:07 -04002248Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002249outline the shape.
2250
2251### Return Value
2252
Cary Clarka90ea222018-10-16 10:30:28 -04002253zero for <a href='#Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002254
2255### Example
2256
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002257<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002258
2259#### Example Output
2260
2261~~~~
22620 == paint.getStrokeWidth()
2263~~~~
2264
2265</fiddle-embed></div>
2266
Cary Clark682c58d2018-05-16 07:07:07 -04002267<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002268
2269---
Cary Clark12799e12017-07-28 15:18:29 -04002270
Cary Clark682c58d2018-05-16 07:07:07 -04002271<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2272void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002273</pre>
2274
2275Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002276outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002277Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002278
2279### Parameters
2280
Cary Clark682c58d2018-05-16 07:07:07 -04002281<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clarka90ea222018-10-16 10:30:28 -04002282 <td>zero thickness for <a href='#Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002283 </tr>
2284</table>
2285
2286### Example
2287
2288<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2289
2290#### Example Output
2291
2292~~~~
22935 == paint.getStrokeWidth()
2294~~~~
2295
2296</fiddle-embed></div>
2297
Cary Clarka90ea222018-10-16 10:30:28 -04002298<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002299
Cary Clarka90ea222018-10-16 10:30:28 -04002300---
Cary Clark08895c42018-02-01 09:37:32 -05002301
Cary Clark682c58d2018-05-16 07:07:07 -04002302<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002303relative to the stroke width.
2304
Cary Clark682c58d2018-05-16 07:07:07 -04002305<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
2306is 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>
2307or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002308
Cary Clark682c58d2018-05-16 07:07:07 -04002309If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
2310is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002311
Cary Clark2be81cf2018-09-13 12:04:30 -04002312<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle using:
2313<code>miter limit&nbsp;=&nbsp;1&nbsp;/&nbsp;sin&nbsp;\(&nbsp;angle&nbsp;/&nbsp;2&nbsp;\)</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002314
Cary Clark2be81cf2018-09-13 12:04:30 -04002315<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
Cary Clark682c58d2018-05-16 07:07:07 -04002316The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002317in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002318
2319Here are some miter limits and the angles that triggers them.
2320
2321| miter limit | angle in degrees |
2322| --- | --- |
2323| 10 | 11.48 |
2324| 9 | 12.76 |
2325| 8 | 14.36 |
2326| 7 | 16.43 |
2327| 6 | 19.19 |
2328| 5 | 23.07 |
2329| 4 | 28.96 |
2330| 3 | 38.94 |
2331| 2 | 60 |
2332| 1 | 180 |
2333
2334### Example
2335
Cary Clarka619d452018-07-16 08:12:01 -04002336<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark12799e12017-07-28 15:18:29 -04002337When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002338by a bevel join.
2339</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002340
Cary Clark682c58d2018-05-16 07:07:07 -04002341<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002342
2343---
Cary Clark12799e12017-07-28 15:18:29 -04002344
Cary Clark682c58d2018-05-16 07:07:07 -04002345<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2346<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002347</pre>
2348
Cary Clark80247e52018-07-11 16:18:41 -04002349Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002350
2351### Return Value
2352
Cary Clark682c58d2018-05-16 07:07:07 -04002353zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002354
2355### Example
2356
2357<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2358
2359#### Example Output
2360
2361~~~~
2362default miter limit == 4
2363~~~~
2364
2365</fiddle-embed></div>
2366
2367### See Also
2368
Cary Clark682c58d2018-05-16 07:07:07 -04002369<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 -04002370
Cary Clark682c58d2018-05-16 07:07:07 -04002371<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002372
2373---
Cary Clark12799e12017-07-28 15:18:29 -04002374
Cary Clark682c58d2018-05-16 07:07:07 -04002375<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2376void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002377</pre>
2378
Cary Clark80247e52018-07-11 16:18:41 -04002379Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002380Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04002381Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002382
2383### Parameters
2384
Cary Clark682c58d2018-05-16 07:07:07 -04002385<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
2386 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002387 </tr>
2388</table>
2389
2390### Example
2391
skia-bookmakera717ca92018-07-08 05:32:09 +00002392<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002393
2394#### Example Output
2395
2396~~~~
2397default miter limit == 8
2398~~~~
2399
2400</fiddle-embed></div>
2401
2402### See Also
2403
Cary Clark682c58d2018-05-16 07:07:07 -04002404<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 -04002405
Cary Clarka90ea222018-10-16 10:30:28 -04002406<a name='Stroke_Cap'></a>
2407
2408<a name='SkPaint_Cap'></a>
2409
Cary Clark12799e12017-07-28 15:18:29 -04002410---
2411
Cary Clarka560c472017-11-27 10:44:06 -05002412<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002413 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002414 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2415 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2416 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002417 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2418 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002419 };
Cary Clarka90ea222018-10-16 10:30:28 -04002420</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002421
Cary Clarka90ea222018-10-16 10:30:28 -04002422<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002423 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 -05002424</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002425
Cary Clark61313f32018-10-08 14:57:48 -04002426<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 -04002427
2428### Constants
2429
Cary Clark682c58d2018-05-16 07:07:07 -04002430<table style='border-collapse: collapse; width: 62.5em'>
2431 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2432<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2433<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2434 <tr style='background-color: #f0f0f0; '>
2435 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2436 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2437 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2438Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002439</td>
Cary Clark12799e12017-07-28 15:18:29 -04002440 </tr>
2441 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002442 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2443 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2444 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2445Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05002446and end.
2447</td>
Cary Clark12799e12017-07-28 15:18:29 -04002448 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002449 <tr style='background-color: #f0f0f0; '>
2450 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2451 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2452 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2453Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04002454and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002455of the stroke.
2456</td>
Cary Clark12799e12017-07-28 15:18:29 -04002457 </tr>
2458 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002459 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2460 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2461 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2462Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
2463</td>
2464 </tr>
2465 <tr style='background-color: #f0f0f0; '>
2466 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2467 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2468 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2469<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 -05002470</td>
Cary Clark12799e12017-07-28 15:18:29 -04002471 </tr>
2472 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002473 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2474 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2475 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2476May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002477</td>
Cary Clark12799e12017-07-28 15:18:29 -04002478 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002479</table>
Cary Clark12799e12017-07-28 15:18:29 -04002480
Cary Clark682c58d2018-05-16 07:07:07 -04002481Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002482follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002483
Cary Clark61313f32018-10-08 14:57:48 -04002484If 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 -04002485visible beginning and end.
2486
Cary Clark61313f32018-10-08 14:57:48 -04002487<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 -04002488
Cary Clark61313f32018-10-08 14:57:48 -04002489<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
2490<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 -04002491at the contour point.
Cary Clark61313f32018-10-08 14:57:48 -04002492<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 -04002493<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002494
Cary Clark682c58d2018-05-16 07:07:07 -04002495<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 -04002496
Cary Clark12799e12017-07-28 15:18:29 -04002497### Example
2498
Cary Clark2ade9972017-11-02 17:49:34 -04002499<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002500
Cary Clark682c58d2018-05-16 07:07:07 -04002501<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002502
2503---
Cary Clark12799e12017-07-28 15:18:29 -04002504
Cary Clark682c58d2018-05-16 07:07:07 -04002505<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2506<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002507</pre>
2508
Cary Clark80247e52018-07-11 16:18:41 -04002509Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002510
2511### Return Value
2512
Cary Clark682c58d2018-05-16 07:07:07 -04002513one 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 -04002514
2515### Example
2516
2517<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2518
2519#### Example Output
2520
2521~~~~
2522kButt_Cap == default stroke cap
2523~~~~
2524
2525</fiddle-embed></div>
2526
2527### See Also
2528
Cary Clark682c58d2018-05-16 07:07:07 -04002529<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002530
Cary Clark682c58d2018-05-16 07:07:07 -04002531<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002532
2533---
Cary Clark12799e12017-07-28 15:18:29 -04002534
Cary Clark682c58d2018-05-16 07:07:07 -04002535<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2536void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002537</pre>
2538
Cary Clark80247e52018-07-11 16:18:41 -04002539Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002540
2541### Parameters
2542
Cary Clark682c58d2018-05-16 07:07:07 -04002543<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
2544 <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>;
2545has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002546 </tr>
2547</table>
2548
2549### Example
2550
2551<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2552
2553#### Example Output
2554
2555~~~~
2556kRound_Cap == paint.getStrokeCap()
2557~~~~
2558
2559</fiddle-embed></div>
2560
2561### See Also
2562
Cary Clark682c58d2018-05-16 07:07:07 -04002563<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002564
Cary Clarka90ea222018-10-16 10:30:28 -04002565<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002566
Cary Clark61313f32018-10-08 14:57:48 -04002567<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 -04002568
Cary Clark682c58d2018-05-16 07:07:07 -04002569Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002570follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002571
2572If the contour direction changes abruptly, because the tangent direction leading
2573to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04002574the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002575
2576### Example
2577
Cary Clark2ade9972017-11-02 17:49:34 -04002578<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002579
Cary Clarka90ea222018-10-16 10:30:28 -04002580<a name='SkPaint_Join'></a>
2581
2582---
Cary Clark12799e12017-07-28 15:18:29 -04002583
Cary Clarka560c472017-11-27 10:44:06 -05002584<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002585 enum <a href='#SkPaint_Join'>Join</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002586 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2587 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2588 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002589 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2590 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002591 };
Cary Clarka90ea222018-10-16 10:30:28 -04002592</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002593
Cary Clarka90ea222018-10-16 10:30:28 -04002594<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002595 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 -05002596</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002597
Cary Clark682c58d2018-05-16 07:07:07 -04002598<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 -04002599affects the four corners of a stroked rectangle, and the connected segments in a
2600stroked path.
2601
2602Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2603radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2604connect the thick strokes.
2605
Cary Clark7cfcbca2018-01-04 16:11:51 -05002606The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002607not contain the actual join. For instance, a fill path constructed with round joins does
2608not necessarily include circles at each connected segment.
2609
2610### Constants
2611
Cary Clark682c58d2018-05-16 07:07:07 -04002612<table style='border-collapse: collapse; width: 62.5em'>
2613 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2614<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2615<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2616 <tr style='background-color: #f0f0f0; '>
2617 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2618 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2619 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2620Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
2621If 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 -05002622</td>
Cary Clark12799e12017-07-28 15:18:29 -04002623 </tr>
2624 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002625 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2626 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2627 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2628Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
2629</td>
2630 </tr>
2631 <tr style='background-color: #f0f0f0; '>
2632 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2633 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2634 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2635Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002636</td>
Cary Clark12799e12017-07-28 15:18:29 -04002637 </tr>
2638 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002639 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2640 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2641 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2642equivalent to the largest value for Stroke_Join</td>
2643 </tr>
2644 <tr style='background-color: #f0f0f0; '>
2645 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2646 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2647 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2648<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 -05002649</td>
Cary Clark12799e12017-07-28 15:18:29 -04002650 </tr>
2651 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002652 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2653 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2654 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2655May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002656</td>
Cary Clark12799e12017-07-28 15:18:29 -04002657 </tr>
2658</table>
2659
2660### Example
2661
2662<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2663
2664### See Also
2665
Cary Clark682c58d2018-05-16 07:07:07 -04002666<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 -04002667
Cary Clark682c58d2018-05-16 07:07:07 -04002668<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002669
2670---
Cary Clark12799e12017-07-28 15:18:29 -04002671
Cary Clark682c58d2018-05-16 07:07:07 -04002672<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2673<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002674</pre>
2675
Cary Clark80247e52018-07-11 16:18:41 -04002676Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002677
2678### Return Value
2679
Cary Clark682c58d2018-05-16 07:07:07 -04002680one 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 -04002681
2682### Example
2683
Cary Clark7f644ec2018-07-19 10:50:44 -04002684<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002685
2686#### Example Output
2687
2688~~~~
2689kMiter_Join == default stroke join
2690~~~~
2691
2692</fiddle-embed></div>
2693
2694### See Also
2695
Cary Clark682c58d2018-05-16 07:07:07 -04002696<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002697
Cary Clark682c58d2018-05-16 07:07:07 -04002698<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002699
2700---
Cary Clark12799e12017-07-28 15:18:29 -04002701
Cary Clark682c58d2018-05-16 07:07:07 -04002702<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2703void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002704</pre>
2705
Cary Clark80247e52018-07-11 16:18:41 -04002706Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002707
2708### Parameters
2709
Cary Clark682c58d2018-05-16 07:07:07 -04002710<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
2711 <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 -04002712otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002713 </tr>
2714</table>
2715
2716### Example
2717
2718<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2719
2720#### Example Output
2721
2722~~~~
2723kMiter_Join == paint.getStrokeJoin()
2724~~~~
2725
2726</fiddle-embed></div>
2727
2728### See Also
2729
Cary Clark682c58d2018-05-16 07:07:07 -04002730<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002731
Cary Clark12799e12017-07-28 15:18:29 -04002732### See Also
2733
Cary Clark682c58d2018-05-16 07:07:07 -04002734<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002735
Cary Clarka90ea222018-10-16 10:30:28 -04002736<a name='Fill_Path'></a>
2737
2738---
Cary Clark08895c42018-02-01 09:37:32 -05002739
Cary Clark682c58d2018-05-16 07:07:07 -04002740<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 -04002741
Cary Clark682c58d2018-05-16 07:07:07 -04002742If <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
2743replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2744destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002745
Cary Clark682c58d2018-05-16 07:07:07 -04002746Fill <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
2747the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002748
Cary Clark682c58d2018-05-16 07:07:07 -04002749If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
2750and <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>,
2751and <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 -04002752
Cary Clark682c58d2018-05-16 07:07:07 -04002753Fill <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 -04002754
Cary Clark682c58d2018-05-16 07:07:07 -04002755If 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 -04002756returns false since <a href='#Hairline'>Hairline</a> has no filled equivalent.
2757
2758### See Also
2759
2760<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 -04002761
Cary Clark682c58d2018-05-16 07:07:07 -04002762<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002763
2764---
Cary Clark12799e12017-07-28 15:18:29 -04002765
Cary Clark682c58d2018-05-16 07:07:07 -04002766<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2767bool <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 -04002768</pre>
2769
Cary Clark80247e52018-07-11 16:18:41 -04002770Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04002771
2772### Parameters
2773
Cary Clark682c58d2018-05-16 07:07:07 -04002774<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
2775 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
2776 </tr>
2777 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
2778 <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>
2779 </tr>
2780 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
2781 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
2782 </tr>
2783 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
2784 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04002785to favor speed and size</td>
2786 </tr>
2787</table>
2788
2789### Return Value
2790
Cary Clarka90ea222018-10-16 10:30:28 -04002791true 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 -04002792
2793### Example
2794
Cary Clark682c58d2018-05-16 07:07:07 -04002795<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.
2796At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002797At the highest precision, the filled path has high fidelity compared to the original stroke.
2798</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002799
Cary Clark682c58d2018-05-16 07:07:07 -04002800<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002801
Cary Clarka90ea222018-10-16 10:30:28 -04002802---
2803
Cary Clark682c58d2018-05-16 07:07:07 -04002804<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2805bool <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 -04002806</pre>
2807
Cary Clark80247e52018-07-11 16:18:41 -04002808Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04002809
Cary Clark682c58d2018-05-16 07:07:07 -04002810Replaces <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>.
2811<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 -04002812
2813### Parameters
2814
Cary Clark682c58d2018-05-16 07:07:07 -04002815<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
2816 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
2817 </tr>
2818 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
2819 <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 -04002820 </tr>
2821</table>
2822
2823### Return Value
2824
Cary Clarka90ea222018-10-16 10:30:28 -04002825true 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 -04002826
2827### Example
2828
2829<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2830
Cary Clarka90ea222018-10-16 10:30:28 -04002831<a name='Shader_Methods'></a>
2832
Cary Clark12799e12017-07-28 15:18:29 -04002833---
2834
Cary Clark682c58d2018-05-16 07:07:07 -04002835<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2836<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
2837If <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 -04002838
Cary Clark682c58d2018-05-16 07:07:07 -04002839<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>.
2840If <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 -04002841the fill.
2842
Cary Clark682c58d2018-05-16 07:07:07 -04002843The 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 -04002844
2845### Example
2846
2847<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2848
Cary Clark682c58d2018-05-16 07:07:07 -04002849If <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 -04002850
2851### Example
2852
skia-bookmaker525f9a92018-05-03 06:27:39 +00002853<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002854
Cary Clark682c58d2018-05-16 07:07:07 -04002855<a name='SkPaint_getShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002856
2857---
Cary Clark12799e12017-07-28 15:18:29 -04002858
Cary Clark682c58d2018-05-16 07:07:07 -04002859<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2860<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002861</pre>
2862
Cary Clark80247e52018-07-11 16:18:41 -04002863Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002864
Cary Clark682c58d2018-05-16 07:07:07 -04002865Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002866
2867### Return Value
2868
Cary Clark682c58d2018-05-16 07:07:07 -04002869<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002870
2871### Example
2872
2873<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2874
2875#### Example Output
2876
2877~~~~
2878nullptr == shader
2879nullptr != shader
2880~~~~
2881
2882</fiddle-embed></div>
2883
Cary Clark682c58d2018-05-16 07:07:07 -04002884<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002885
2886---
Cary Clark12799e12017-07-28 15:18:29 -04002887
Cary Clark682c58d2018-05-16 07:07:07 -04002888<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2889<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 -04002890</pre>
2891
Cary Clark80247e52018-07-11 16:18:41 -04002892Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002893
Cary Clark682c58d2018-05-16 07:07:07 -04002894Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002895
2896### Return Value
2897
Cary Clark682c58d2018-05-16 07:07:07 -04002898<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002899
2900### Example
2901
2902<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2903
2904#### Example Output
2905
2906~~~~
2907shader unique: true
2908shader unique: false
2909~~~~
2910
2911</fiddle-embed></div>
2912
Cary Clark682c58d2018-05-16 07:07:07 -04002913<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002914
2915---
Cary Clark12799e12017-07-28 15:18:29 -04002916
Cary Clark682c58d2018-05-16 07:07:07 -04002917<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2918void <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 -04002919</pre>
2920
Cary Clark80247e52018-07-11 16:18:41 -04002921Sets optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002922
Cary Clark682c58d2018-05-16 07:07:07 -04002923Sets <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>.
2924Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002925
2926### Parameters
2927
Cary Clark682c58d2018-05-16 07:07:07 -04002928<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
2929 <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 -04002930 </tr>
2931</table>
2932
2933### Example
2934
skia-bookmakere0a458f2018-07-16 05:29:00 +00002935<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002936
Cary Clarka90ea222018-10-16 10:30:28 -04002937<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002938
Cary Clarka90ea222018-10-16 10:30:28 -04002939---
Cary Clark08895c42018-02-01 09:37:32 -05002940
Cary Clark682c58d2018-05-16 07:07:07 -04002941<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
Cary Clark224c7002018-06-27 11:00:21 -04002942<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 -04002943If <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 -04002944
Cary Clark682c58d2018-05-16 07:07:07 -04002945The 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 -04002946
2947### Example
2948
2949<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2950
Cary Clark682c58d2018-05-16 07:07:07 -04002951<a name='SkPaint_getColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002952
2953---
Cary Clark12799e12017-07-28 15:18:29 -04002954
Cary Clark682c58d2018-05-16 07:07:07 -04002955<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2956<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002957</pre>
2958
Cary Clark682c58d2018-05-16 07:07:07 -04002959Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
2960Does 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 -04002961
2962### Return Value
2963
Cary Clark682c58d2018-05-16 07:07:07 -04002964<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002965
2966### Example
2967
2968<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2969
2970#### Example Output
2971
2972~~~~
2973nullptr == color filter
2974nullptr != color filter
2975~~~~
2976
2977</fiddle-embed></div>
2978
Cary Clark682c58d2018-05-16 07:07:07 -04002979<a name='SkPaint_refColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002980
2981---
Cary Clark12799e12017-07-28 15:18:29 -04002982
Cary Clark682c58d2018-05-16 07:07:07 -04002983<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2984<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 -04002985</pre>
2986
Cary Clark682c58d2018-05-16 07:07:07 -04002987Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
2988Increases <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 -04002989
2990### Return Value
2991
Cary Clark682c58d2018-05-16 07:07:07 -04002992<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002993
2994### Example
2995
2996<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2997
2998#### Example Output
2999
3000~~~~
3001color filter unique: true
3002color filter unique: false
3003~~~~
3004
3005</fiddle-embed></div>
3006
Cary Clark682c58d2018-05-16 07:07:07 -04003007<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003008
3009---
Cary Clark12799e12017-07-28 15:18:29 -04003010
Cary Clark682c58d2018-05-16 07:07:07 -04003011<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3012void <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 -04003013</pre>
3014
Cary Clark682c58d2018-05-16 07:07:07 -04003015Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3016<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 -04003017
Cary Clark682c58d2018-05-16 07:07:07 -04003018Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003019
3020### Parameters
3021
Cary Clark682c58d2018-05-16 07:07:07 -04003022<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3023 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003024 </tr>
3025</table>
3026
3027### Example
3028
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003029<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003030
Cary Clarka90ea222018-10-16 10:30:28 -04003031<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003032
Cary Clarka90ea222018-10-16 10:30:28 -04003033---
Cary Clark08895c42018-02-01 09:37:32 -05003034
Cary Clark224c7002018-06-27 11:00:21 -04003035<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3036The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003037over the destination color.
3038
3039### Example
3040
Cary Clark83647062018-07-18 16:21:51 -04003041<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003042
3043### See Also
3044
Cary Clark224c7002018-06-27 11:00:21 -04003045<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003046
Cary Clark682c58d2018-05-16 07:07:07 -04003047<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003048
3049---
Cary Clark12799e12017-07-28 15:18:29 -04003050
Cary Clark682c58d2018-05-16 07:07:07 -04003051<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003052<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003053</pre>
3054
Cary Clark224c7002018-06-27 11:00:21 -04003055Returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
3056By default, returns <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003057
3058### Return Value
3059
3060mode used to combine source color with destination color
3061
3062### Example
3063
skia-bookmaker525f9a92018-05-03 06:27:39 +00003064<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003065
3066#### Example Output
3067
3068~~~~
3069kSrcOver == getBlendMode
3070kSrcOver != getBlendMode
3071~~~~
3072
3073</fiddle-embed></div>
3074
Cary Clark682c58d2018-05-16 07:07:07 -04003075<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003076
3077---
Cary Clark12799e12017-07-28 15:18:29 -04003078
Cary Clark682c58d2018-05-16 07:07:07 -04003079<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3080bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003081</pre>
3082
Cary Clark224c7002018-06-27 11:00:21 -04003083Returns 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 -04003084
3085### Return Value
3086
Cary Clark224c7002018-06-27 11:00:21 -04003087true 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 -04003088
3089### Example
3090
3091<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3092
3093#### Example Output
3094
3095~~~~
3096isSrcOver == true
3097isSrcOver != true
3098~~~~
3099
3100</fiddle-embed></div>
3101
Cary Clark682c58d2018-05-16 07:07:07 -04003102<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003103
3104---
Cary Clark12799e12017-07-28 15:18:29 -04003105
Cary Clark682c58d2018-05-16 07:07:07 -04003106<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003107void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003108</pre>
3109
Cary Clark224c7002018-06-27 11:00:21 -04003110Sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003111Does not check for valid input.
3112
3113### Parameters
3114
Cary Clark682c58d2018-05-16 07:07:07 -04003115<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark224c7002018-06-27 11:00:21 -04003116 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003117 </tr>
3118</table>
3119
3120### Example
3121
3122<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3123
3124#### Example Output
3125
3126~~~~
3127isSrcOver == true
3128isSrcOver != true
3129~~~~
3130
3131</fiddle-embed></div>
3132
Cary Clarka90ea222018-10-16 10:30:28 -04003133<a name='Path_Effect_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003134
Cary Clarka90ea222018-10-16 10:30:28 -04003135---
Cary Clark08895c42018-02-01 09:37:32 -05003136
Cary Clark682c58d2018-05-16 07:07:07 -04003137<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3138<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3139If <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 -04003140
3141### Example
3142
3143<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3144
3145### See Also
3146
Cary Clark682c58d2018-05-16 07:07:07 -04003147<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003148
Cary Clark682c58d2018-05-16 07:07:07 -04003149<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003150
3151---
Cary Clark12799e12017-07-28 15:18:29 -04003152
Cary Clark682c58d2018-05-16 07:07:07 -04003153<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3154<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003155</pre>
3156
Cary Clark682c58d2018-05-16 07:07:07 -04003157Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3158Does 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 -04003159
3160### Return Value
3161
Cary Clark682c58d2018-05-16 07:07:07 -04003162<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003163
3164### Example
3165
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003166<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003167
3168#### Example Output
3169
3170~~~~
3171nullptr == path effect
3172nullptr != path effect
3173~~~~
3174
3175</fiddle-embed></div>
3176
Cary Clark682c58d2018-05-16 07:07:07 -04003177<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003178
3179---
Cary Clark12799e12017-07-28 15:18:29 -04003180
Cary Clark682c58d2018-05-16 07:07:07 -04003181<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3182<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 -04003183</pre>
3184
Cary Clark682c58d2018-05-16 07:07:07 -04003185Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3186Increases <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 -04003187
3188### Return Value
3189
Cary Clark682c58d2018-05-16 07:07:07 -04003190<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003191
3192### Example
3193
Cary Clark83647062018-07-18 16:21:51 -04003194<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003195
3196#### Example Output
3197
3198~~~~
3199path effect unique: true
3200path effect unique: false
3201~~~~
3202
3203</fiddle-embed></div>
3204
Cary Clark682c58d2018-05-16 07:07:07 -04003205<a name='SkPaint_setPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003206
3207---
Cary Clark12799e12017-07-28 15:18:29 -04003208
Cary Clark682c58d2018-05-16 07:07:07 -04003209<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3210void <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 -04003211</pre>
3212
Cary Clark682c58d2018-05-16 07:07:07 -04003213Sets <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
3214<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003215
Cary Clark682c58d2018-05-16 07:07:07 -04003216Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003217
3218### Parameters
3219
Cary Clark682c58d2018-05-16 07:07:07 -04003220<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3221 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003222 </tr>
3223</table>
3224
3225### Example
3226
3227<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3228
Cary Clarka90ea222018-10-16 10:30:28 -04003229<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003230
Cary Clarka90ea222018-10-16 10:30:28 -04003231---
Cary Clark08895c42018-02-01 09:37:32 -05003232
Cary Clark682c58d2018-05-16 07:07:07 -04003233<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3234<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003235
Cary Clark682c58d2018-05-16 07:07:07 -04003236<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3237creating 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 -04003238modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003239
3240### Example
3241
Cary Clark681287e2018-03-16 11:34:15 -04003242<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003243
Cary Clark682c58d2018-05-16 07:07:07 -04003244<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003245
3246---
Cary Clark12799e12017-07-28 15:18:29 -04003247
Cary Clark682c58d2018-05-16 07:07:07 -04003248<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3249<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003250</pre>
3251
Cary Clark682c58d2018-05-16 07:07:07 -04003252Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
3253Does 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 -04003254
3255### Return Value
3256
Cary Clark682c58d2018-05-16 07:07:07 -04003257<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003258
3259### Example
3260
Cary Clark681287e2018-03-16 11:34:15 -04003261<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003262
3263#### Example Output
3264
3265~~~~
3266nullptr == mask filter
3267nullptr != mask filter
3268~~~~
3269
3270</fiddle-embed></div>
3271
Cary Clark682c58d2018-05-16 07:07:07 -04003272<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003273
3274---
Cary Clark12799e12017-07-28 15:18:29 -04003275
Cary Clark682c58d2018-05-16 07:07:07 -04003276<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3277<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 -04003278</pre>
3279
Cary Clark682c58d2018-05-16 07:07:07 -04003280Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003281
Cary Clark682c58d2018-05-16 07:07:07 -04003282Increases <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 -04003283
3284### Return Value
3285
Cary Clark682c58d2018-05-16 07:07:07 -04003286<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003287
3288### Example
3289
Cary Clark83647062018-07-18 16:21:51 -04003290<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003291
3292#### Example Output
3293
3294~~~~
3295mask filter unique: true
3296mask filter unique: false
3297~~~~
3298
3299</fiddle-embed></div>
3300
Cary Clark682c58d2018-05-16 07:07:07 -04003301<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003302
3303---
Cary Clark12799e12017-07-28 15:18:29 -04003304
Cary Clark682c58d2018-05-16 07:07:07 -04003305<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3306void <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 -04003307</pre>
3308
Cary Clark682c58d2018-05-16 07:07:07 -04003309Sets <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
3310<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
3311<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003312
Cary Clark682c58d2018-05-16 07:07:07 -04003313Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003314
3315### Parameters
3316
Cary Clark682c58d2018-05-16 07:07:07 -04003317<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3318 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003319 </tr>
3320</table>
3321
3322### Example
3323
Cary Clark681287e2018-03-16 11:34:15 -04003324<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003325
Cary Clarka90ea222018-10-16 10:30:28 -04003326<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003327
Cary Clarka90ea222018-10-16 10:30:28 -04003328---
Cary Clark08895c42018-02-01 09:37:32 -05003329
Cary Clark682c58d2018-05-16 07:07:07 -04003330<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
3331<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
3332The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003333implementation.
3334
3335### Example
3336
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003337<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003338
Cary Clark682c58d2018-05-16 07:07:07 -04003339<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003340
3341---
Cary Clark12799e12017-07-28 15:18:29 -04003342
Cary Clark682c58d2018-05-16 07:07:07 -04003343<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3344<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003345</pre>
3346
Cary Clark682c58d2018-05-16 07:07:07 -04003347Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
Cary Clark81abc432018-06-25 16:30:08 -04003348Does not alter <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003349
3350### Return Value
3351
Cary Clark682c58d2018-05-16 07:07:07 -04003352<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003353
3354### Example
3355
Cary Clarkf9603982018-07-17 08:20:27 -04003356<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003357
3358#### Example Output
3359
3360~~~~
3361nullptr == typeface
3362nullptr != typeface
3363~~~~
3364
3365</fiddle-embed></div>
3366
Cary Clark682c58d2018-05-16 07:07:07 -04003367<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003368
3369---
Cary Clark12799e12017-07-28 15:18:29 -04003370
Cary Clark682c58d2018-05-16 07:07:07 -04003371<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3372<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 -04003373</pre>
3374
Cary Clark682c58d2018-05-16 07:07:07 -04003375Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003376
3377### Return Value
3378
Cary Clark682c58d2018-05-16 07:07:07 -04003379<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003380
3381### Example
3382
Cary Clark83647062018-07-18 16:21:51 -04003383<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003384
3385#### Example Output
3386
3387~~~~
3388typeface1 != typeface2
3389typeface1 == typeface2
3390~~~~
3391
3392</fiddle-embed></div>
3393
Cary Clark682c58d2018-05-16 07:07:07 -04003394<a name='SkPaint_setTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003395
3396---
Cary Clark12799e12017-07-28 15:18:29 -04003397
Cary Clark682c58d2018-05-16 07:07:07 -04003398<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3399void <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 -04003400</pre>
3401
Cary Clark682c58d2018-05-16 07:07:07 -04003402Sets <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>.
3403Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3404<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003405
3406### Parameters
3407
Cary Clark682c58d2018-05-16 07:07:07 -04003408<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
3409 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04003410 </tr>
3411</table>
3412
3413### Example
3414
Cary Clark71961fb2018-01-05 14:21:59 -05003415<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003416
Cary Clarka90ea222018-10-16 10:30:28 -04003417<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003418
Cary Clarka90ea222018-10-16 10:30:28 -04003419---
Cary Clark08895c42018-02-01 09:37:32 -05003420
Cary Clark682c58d2018-05-16 07:07:07 -04003421<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 -04003422with <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,
3423which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003424
Cary Clark682c58d2018-05-16 07:07:07 -04003425<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>
3426can 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.
3427<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
3428<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003429
3430### Example
3431
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003432<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003433
Cary Clark682c58d2018-05-16 07:07:07 -04003434<a name='SkPaint_getImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003435
3436---
Cary Clark12799e12017-07-28 15:18:29 -04003437
Cary Clark682c58d2018-05-16 07:07:07 -04003438<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3439<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003440</pre>
3441
Cary Clark682c58d2018-05-16 07:07:07 -04003442Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
3443Does 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 -04003444
3445### Return Value
3446
Cary Clark682c58d2018-05-16 07:07:07 -04003447<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003448
3449### Example
3450
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003451<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003452
3453#### Example Output
3454
3455~~~~
3456nullptr == image filter
3457nullptr != image filter
3458~~~~
3459
3460</fiddle-embed></div>
3461
Cary Clark682c58d2018-05-16 07:07:07 -04003462<a name='SkPaint_refImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003463
3464---
Cary Clark12799e12017-07-28 15:18:29 -04003465
Cary Clark682c58d2018-05-16 07:07:07 -04003466<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3467<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 -04003468</pre>
3469
Cary Clark682c58d2018-05-16 07:07:07 -04003470Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
3471Increases <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 -04003472
3473### Return Value
3474
Cary Clark682c58d2018-05-16 07:07:07 -04003475<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003476
3477### Example
3478
3479<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3480
3481#### Example Output
3482
3483~~~~
3484image filter unique: true
3485image filter unique: false
3486~~~~
3487
3488</fiddle-embed></div>
3489
Cary Clark682c58d2018-05-16 07:07:07 -04003490<a name='SkPaint_setImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003491
3492---
Cary Clark12799e12017-07-28 15:18:29 -04003493
Cary Clark682c58d2018-05-16 07:07:07 -04003494<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3495void <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 -04003496</pre>
3497
Cary Clark682c58d2018-05-16 07:07:07 -04003498Sets <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
3499<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 -04003500on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003501
Cary Clark682c58d2018-05-16 07:07:07 -04003502Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003503
3504### Parameters
3505
Cary Clark682c58d2018-05-16 07:07:07 -04003506<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
3507 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003508 </tr>
3509</table>
3510
3511### Example
3512
3513<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3514
Cary Clarka90ea222018-10-16 10:30:28 -04003515<a name='Draw_Looper_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003516
Cary Clarka90ea222018-10-16 10:30:28 -04003517---
Cary Clark08895c42018-02-01 09:37:32 -05003518
Cary Clark682c58d2018-05-16 07:07:07 -04003519<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 -04003520to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003521
Cary Clark682c58d2018-05-16 07:07:07 -04003522<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3523<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3524Set <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 -04003525
3526### Example
3527
3528<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3529
Cary Clark682c58d2018-05-16 07:07:07 -04003530<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003531
3532---
Cary Clark12799e12017-07-28 15:18:29 -04003533
Cary Clark682c58d2018-05-16 07:07:07 -04003534<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3535<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003536</pre>
3537
Cary Clark682c58d2018-05-16 07:07:07 -04003538Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
3539Does 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 -04003540
3541### Return Value
3542
Cary Clark682c58d2018-05-16 07:07:07 -04003543<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003544
3545### Example
3546
3547<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3548
3549#### Example Output
3550
3551~~~~
3552nullptr == draw looper
3553nullptr != draw looper
3554~~~~
3555
3556</fiddle-embed></div>
3557
Cary Clark682c58d2018-05-16 07:07:07 -04003558<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003559
3560---
Cary Clark12799e12017-07-28 15:18:29 -04003561
Cary Clark682c58d2018-05-16 07:07:07 -04003562<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3563<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 -04003564</pre>
3565
Cary Clark682c58d2018-05-16 07:07:07 -04003566Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
3567Increases <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 -04003568
3569### Return Value
3570
Cary Clark682c58d2018-05-16 07:07:07 -04003571<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003572
3573### Example
3574
3575<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3576
3577#### Example Output
3578
3579~~~~
3580draw looper unique: true
3581draw looper unique: false
3582~~~~
3583
3584</fiddle-embed></div>
3585
Cary Clark682c58d2018-05-16 07:07:07 -04003586<a name='SkPaint_getLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003587
3588---
Cary Clark12799e12017-07-28 15:18:29 -04003589
Cary Clark682c58d2018-05-16 07:07:07 -04003590<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3591<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003592</pre>
3593
Cary Clark682c58d2018-05-16 07:07:07 -04003594Deprecated.
3595
Cary Clark682c58d2018-05-16 07:07:07 -04003596<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003597
3598---
Cary Clark12799e12017-07-28 15:18:29 -04003599
Cary Clark682c58d2018-05-16 07:07:07 -04003600<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3601void <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 -04003602</pre>
3603
Cary Clark682c58d2018-05-16 07:07:07 -04003604Sets <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
3605<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 -04003606drawing unaltered.
3607
Cary Clark682c58d2018-05-16 07:07:07 -04003608Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003609
3610### Parameters
3611
Cary Clark682c58d2018-05-16 07:07:07 -04003612<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
3613 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003614 </tr>
3615</table>
3616
3617### Example
3618
3619<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3620
Cary Clark682c58d2018-05-16 07:07:07 -04003621<a name='SkPaint_setLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003622
3623---
Cary Clark12799e12017-07-28 15:18:29 -04003624
Cary Clark682c58d2018-05-16 07:07:07 -04003625<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3626void <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 -04003627</pre>
3628
Cary Clark682c58d2018-05-16 07:07:07 -04003629Deprecated.
3630
Cary Clarka90ea222018-10-16 10:30:28 -04003631<a name='Text_Align'></a>
3632
Cary Clarka90ea222018-10-16 10:30:28 -04003633<a name='SkPaint_Align'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003634
Cary Clarka90ea222018-10-16 10:30:28 -04003635---
Cary Clark12799e12017-07-28 15:18:29 -04003636
Cary Clarka560c472017-11-27 10:44:06 -05003637<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003638 enum <a href='#SkPaint_Align'>Align</a> {
Cary Clark61313f32018-10-08 14:57:48 -04003639 <a href='#SkPaint_kLeft_Align'>kLeft_Align</a>,
3640 <a href='#SkPaint_kCenter_Align'>kCenter_Align</a>,
3641 <a href='#SkPaint_kRight_Align'>kRight_Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003642 };
Cary Clarka90ea222018-10-16 10:30:28 -04003643</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04003644
Cary Clark12799e12017-07-28 15:18:29 -04003645### Constants
3646
Cary Clark682c58d2018-05-16 07:07:07 -04003647<table style='border-collapse: collapse; width: 62.5em'>
3648 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3649<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3650<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3651 <tr style='background-color: #f0f0f0; '>
3652 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003653 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003654 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003655Deprecated.
3656
Cary Clark1a8d7622018-03-05 13:26:16 -05003657</td>
Cary Clark12799e12017-07-28 15:18:29 -04003658 </tr>
3659 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003660 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003661 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003662 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003663Deprecated.
3664
Cary Clark682c58d2018-05-16 07:07:07 -04003665</td>
3666 </tr>
3667 <tr style='background-color: #f0f0f0; '>
3668 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003669 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3670 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003671Deprecated.
3672
Cary Clark137b8742018-05-30 09:21:49 -04003673</td>
Cary Clark12799e12017-07-28 15:18:29 -04003674 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003675</table>
Cary Clark12799e12017-07-28 15:18:29 -04003676
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003677Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04003678
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003679### Constants
3680
3681<table style='border-collapse: collapse; width: 62.5em'>
3682 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3683<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3684<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3685 <tr style='background-color: #f0f0f0; '>
3686 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
3687 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3688 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3689Deprecated.
3690
3691</td>
3692 </tr>
3693</table>
Cary Clark12799e12017-07-28 15:18:29 -04003694
Cary Clark682c58d2018-05-16 07:07:07 -04003695<a name='SkPaint_getTextAlign'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003696
3697---
Cary Clark12799e12017-07-28 15:18:29 -04003698
Cary Clark682c58d2018-05-16 07:07:07 -04003699<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3700<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003701</pre>
3702
Cary Clark14768f62018-10-29 20:33:51 -04003703Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04003704
Cary Clark682c58d2018-05-16 07:07:07 -04003705<a name='SkPaint_setTextAlign'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003706
3707---
Cary Clark12799e12017-07-28 15:18:29 -04003708
Cary Clark682c58d2018-05-16 07:07:07 -04003709<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3710void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04003711</pre>
3712
Cary Clark14768f62018-10-29 20:33:51 -04003713Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04003714
Cary Clarka90ea222018-10-16 10:30:28 -04003715<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003716
Cary Clarka90ea222018-10-16 10:30:28 -04003717---
Cary Clark08895c42018-02-01 09:37:32 -05003718
Cary Clark682c58d2018-05-16 07:07:07 -04003719<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
3720<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
3721<a href='#Text_Size'>Text Size</a> defaults to 12.
3722Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003723
3724### Example
3725
3726<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3727
Cary Clark682c58d2018-05-16 07:07:07 -04003728<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003729
3730---
Cary Clark12799e12017-07-28 15:18:29 -04003731
Cary Clark682c58d2018-05-16 07:07:07 -04003732<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3733<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003734</pre>
3735
Cary Clark682c58d2018-05-16 07:07:07 -04003736Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003737
3738### Return Value
3739
3740typographic height of text
3741
3742### Example
3743
skia-bookmaker233c6522018-07-04 05:33:26 +00003744<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003745
Cary Clark682c58d2018-05-16 07:07:07 -04003746<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003747
3748---
Cary Clark12799e12017-07-28 15:18:29 -04003749
Cary Clark682c58d2018-05-16 07:07:07 -04003750<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3751void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003752</pre>
3753
Cary Clark682c58d2018-05-16 07:07:07 -04003754Sets <a href='#Text_Size'>Text Size</a> in points.
3755Has 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 -04003756
3757### Parameters
3758
Cary Clark682c58d2018-05-16 07:07:07 -04003759<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
3760 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04003761 </tr>
3762</table>
3763
3764### Example
3765
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003766<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003767
Cary Clarka90ea222018-10-16 10:30:28 -04003768<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003769
Cary Clarka90ea222018-10-16 10:30:28 -04003770---
Cary Clark08895c42018-02-01 09:37:32 -05003771
Cary Clark682c58d2018-05-16 07:07:07 -04003772<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
3773<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003774is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003775<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
3776<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003777
3778### Example
3779
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003780<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003781
Cary Clark682c58d2018-05-16 07:07:07 -04003782<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003783
3784---
Cary Clark12799e12017-07-28 15:18:29 -04003785
Cary Clark682c58d2018-05-16 07:07:07 -04003786<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3787<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003788</pre>
3789
Cary Clark682c58d2018-05-16 07:07:07 -04003790Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003791Default value is 1.
3792
3793### Return Value
3794
3795text horizontal scale
3796
3797### Example
3798
3799<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3800
Cary Clark682c58d2018-05-16 07:07:07 -04003801<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003802
3803---
Cary Clark12799e12017-07-28 15:18:29 -04003804
Cary Clark682c58d2018-05-16 07:07:07 -04003805<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3806void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003807</pre>
3808
Cary Clark682c58d2018-05-16 07:07:07 -04003809Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003810Default value is 1.
3811
3812### Parameters
3813
Cary Clark682c58d2018-05-16 07:07:07 -04003814<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
3815 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003816 </tr>
3817</table>
3818
3819### Example
3820
3821<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3822
Cary Clarka90ea222018-10-16 10:30:28 -04003823<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003824
Cary Clarka90ea222018-10-16 10:30:28 -04003825---
Cary Clark08895c42018-02-01 09:37:32 -05003826
Cary Clark682c58d2018-05-16 07:07:07 -04003827<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
3828<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003829is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003830<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
3831<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003832
3833### Example
3834
3835<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3836
Cary Clark682c58d2018-05-16 07:07:07 -04003837<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003838
3839---
Cary Clark12799e12017-07-28 15:18:29 -04003840
Cary Clark682c58d2018-05-16 07:07:07 -04003841<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3842<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003843</pre>
3844
Cary Clark682c58d2018-05-16 07:07:07 -04003845Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003846Default value is zero.
3847
3848### Return Value
3849
3850additional shear in x-axis relative to y-axis
3851
3852### Example
3853
Cary Clark7f644ec2018-07-19 10:50:44 -04003854<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003855
Cary Clark682c58d2018-05-16 07:07:07 -04003856<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003857
3858---
Cary Clark12799e12017-07-28 15:18:29 -04003859
Cary Clark682c58d2018-05-16 07:07:07 -04003860<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3861void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003862</pre>
3863
Cary Clark682c58d2018-05-16 07:07:07 -04003864Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003865Default value is zero.
3866
3867### Parameters
3868
Cary Clark682c58d2018-05-16 07:07:07 -04003869<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
3870 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003871 </tr>
3872</table>
3873
3874### Example
3875
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003876<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003877
Cary Clarka90ea222018-10-16 10:30:28 -04003878<a name='Text_Encoding'></a>
3879
Cary Clark12799e12017-07-28 15:18:29 -04003880---
3881
Cary Clarka90ea222018-10-16 10:30:28 -04003882<a name='SkPaint_TextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003883
Cary Clarka90ea222018-10-16 10:30:28 -04003884---
Cary Clark12799e12017-07-28 15:18:29 -04003885
Cary Clarka560c472017-11-27 10:44:06 -05003886<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003887 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
Cary Clark61313f32018-10-08 14:57:48 -04003888 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
3889 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
3890 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
3891 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003892 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003893</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003894
Cary Clark682c58d2018-05-16 07:07:07 -04003895<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
3896size, 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 -04003897
Cary Clarka560c472017-11-27 10:44:06 -05003898Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003899All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003900in the total storage required.
3901
Cary Clark682c58d2018-05-16 07:07:07 -04003902<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 -04003903
Cary Clark682c58d2018-05-16 07:07:07 -04003904<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 -04003905
Cary Clark682c58d2018-05-16 07:07:07 -04003906<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 -04003907
Cary Clark682c58d2018-05-16 07:07:07 -04003908<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 -04003909A glyph index is a 16-bit word.
3910
Cary Clark682c58d2018-05-16 07:07:07 -04003911<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 -04003912
3913### Constants
3914
Cary Clark682c58d2018-05-16 07:07:07 -04003915<table style='border-collapse: collapse; width: 62.5em'>
3916 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3917<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3918<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3919 <tr style='background-color: #f0f0f0; '>
3920 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
3921 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3922 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3923uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04003924 </tr>
3925 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003926 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
3927 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3928 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3929uses two byte words to represent most of Unicode</td>
3930 </tr>
3931 <tr style='background-color: #f0f0f0; '>
3932 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
3933 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3934 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3935uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04003936 </tr>
3937 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003938 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
3939 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3940 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3941uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04003942 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003943</table>
Cary Clark12799e12017-07-28 15:18:29 -04003944
3945### Example
3946
Cary Clarka560c472017-11-27 10:44:06 -05003947<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3948Second line is encoded in UTF-16.
3949Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04003950Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003951</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003952
Cary Clark682c58d2018-05-16 07:07:07 -04003953<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003954
3955---
Cary Clark12799e12017-07-28 15:18:29 -04003956
Cary Clark682c58d2018-05-16 07:07:07 -04003957<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3958<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003959</pre>
3960
Cary Clark682c58d2018-05-16 07:07:07 -04003961Returns <a href='#Text_Encoding'>Text Encoding</a>.
3962<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 -04003963
3964### Return Value
3965
Cary Clark682c58d2018-05-16 07:07:07 -04003966one 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
3967<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003968
3969### Example
3970
skia-bookmaker525f9a92018-05-03 06:27:39 +00003971<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04003972
3973#### Example Output
3974
3975~~~~
3976kUTF8_TextEncoding == text encoding
3977kGlyphID_TextEncoding == text encoding
3978~~~~
3979
3980</fiddle-embed></div>
3981
Cary Clark682c58d2018-05-16 07:07:07 -04003982<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003983
3984---
Cary Clark12799e12017-07-28 15:18:29 -04003985
Cary Clark682c58d2018-05-16 07:07:07 -04003986<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3987void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04003988</pre>
3989
Cary Clark682c58d2018-05-16 07:07:07 -04003990Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
3991<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
3992Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003993
3994### Parameters
3995
Cary Clark682c58d2018-05-16 07:07:07 -04003996<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
3997 <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
3998<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003999 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004000#
4001
Cary Clark12799e12017-07-28 15:18:29 -04004002</table>
4003
4004### Example
4005
Cary Clark75fd4492018-06-20 12:45:16 -04004006<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004007
4008#### Example Output
4009
4010~~~~
40114 != text encoding
4012~~~~
4013
4014</fiddle-embed></div>
4015
Cary Clarka90ea222018-10-16 10:30:28 -04004016<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004017
Cary Clarka90ea222018-10-16 10:30:28 -04004018---
Cary Clark08895c42018-02-01 09:37:32 -05004019
Cary Clark682c58d2018-05-16 07:07:07 -04004020<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>.
4021The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4022<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004023
Cary Clark682c58d2018-05-16 07:07:07 -04004024<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 -04004025X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4026are positive.
4027Y-axis values above the baseline are negative, and below the baseline are positive.
4028
4029### Example
4030
Ben Wagnere5806492017-11-09 12:08:31 -05004031<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004032
Cary Clark61313f32018-10-08 14:57:48 -04004033<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04004034
Cary Clarka90ea222018-10-16 10:30:28 -04004035---
4036
Cary Clarka560c472017-11-27 10:44:06 -05004037<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004038 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4039 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004040 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4041 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4042 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4043 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004044 };
Cary Clark12799e12017-07-28 15:18:29 -04004045
Cary Clarka90ea222018-10-16 10:30:28 -04004046 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4047 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4048 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4049 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4050 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4051 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4052 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4053 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4054 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4055 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4056 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4057 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4058 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4059 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4060 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4061 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004062
Cary Clark61313f32018-10-08 14:57:48 -04004063 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4064 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
4065 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4066 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
Cary Clark186d08f2018-04-03 08:43:27 -04004067 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004068</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004069
Cary Clark682c58d2018-05-16 07:07:07 -04004070<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
4071computed 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 -04004072not available.
4073
Cary Clark5538c132018-06-14 12:28:14 -04004074All vertical values are relative to the baseline, on a y-axis pointing down.
4075Zero is on the baseline, negative values are above the baseline, and positive
4076values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05004077
Cary Clark682c58d2018-05-16 07:07:07 -04004078<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 -04004079are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004080
Cary Clark682c58d2018-05-16 07:07:07 -04004081<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 -04004082are valid, since their value may be zero.
4083
Cary Clarka90ea222018-10-16 10:30:28 -04004084<a name='SkPaint_FontMetrics_FontMetricsFlags'></a>
4085
4086---
Cary Clark12799e12017-07-28 15:18:29 -04004087
Cary Clarka560c472017-11-27 10:44:06 -05004088<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004089 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004090 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4091 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4092 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4093 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004094 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004095</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004096
Cary Clark682c58d2018-05-16 07:07:07 -04004097<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 -04004098the underline or strikeout metric may be valid and zero.
4099Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4100
Cary Clark12799e12017-07-28 15:18:29 -04004101### Constants
4102
Cary Clark682c58d2018-05-16 07:07:07 -04004103<table style='border-collapse: collapse; width: 62.5em'>
4104 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4105<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4106<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4107 <tr style='background-color: #f0f0f0; '>
4108 <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>
4109 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4110 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4111set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004112 </tr>
4113 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004114 <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>
4115 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4116 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4117set if fUnderlinePosition is valid</td>
4118 </tr>
4119 <tr style='background-color: #f0f0f0; '>
4120 <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>
4121 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4122 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4123set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004124 </tr>
4125 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004126 <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>
4127 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4128 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4129set if fStrikeoutPosition is valid</td>
4130 </tr>
Cary Clark61313f32018-10-08 14:57:48 -04004131</table><table style='border-collapse: collapse; width: 62.5em'>
Cary Clark682c58d2018-05-16 07:07:07 -04004132
Cary Clark682c58d2018-05-16 07:07:07 -04004133 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
Cary Clark61313f32018-10-08 14:57:48 -04004134<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Member</th>
Cary Clark682c58d2018-05-16 07:07:07 -04004135<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4136 <tr style='background-color: #f0f0f0; '>
4137 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
4138 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
4139 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4140is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004141 </tr>
4142 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004143 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4144 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
4145 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004146Greatest extent above the baseline for any glyph.
4147Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004148</td>
4149 </tr>
4150 <tr style='background-color: #f0f0f0; '>
4151 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4152 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
4153 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004154Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004155Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004156</td>
4157 </tr>
4158 <tr>
4159 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4160 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
4161 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004162Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004163Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004164</td>
4165 </tr>
4166 <tr style='background-color: #f0f0f0; '>
4167 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4168 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
4169 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004170Greatest extent below the baseline for any glyph.
4171Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004172</td>
4173 </tr>
4174 <tr>
4175 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4176 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
4177 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004178Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004179Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004180</td>
4181 </tr>
4182 <tr style='background-color: #f0f0f0; '>
4183 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4184 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
4185 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004186Average character width, if it is available.
4187Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004188</td>
4189 </tr>
4190 <tr>
4191 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4192 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
4193 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4194maximum character width</td>
4195 </tr>
4196 <tr style='background-color: #f0f0f0; '>
4197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4198 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
4199 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004200Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004201Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004202</td>
4203 </tr>
4204 <tr>
4205 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4206 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
4207 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004208Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004209Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004210</td>
4211 </tr>
4212 <tr style='background-color: #f0f0f0; '>
4213 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4214 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
4215 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004216May be zero if no lower-case height is stored in the font.
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_fCapHeight'><code>fCapHeight</code></a></td>
4222 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004223May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004224</td>
4225 </tr>
4226 <tr style='background-color: #f0f0f0; '>
4227 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4228 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
4229 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4230If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4231If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
4232</td>
4233 </tr>
4234 <tr>
4235 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4236 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
4237 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004238Position of the top of the underline stroke relative to the baseline.
4239Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004240
Cary Clark682c58d2018-05-16 07:07:07 -04004241If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4242If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
4243</td>
4244 </tr>
4245 <tr style='background-color: #f0f0f0; '>
4246 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4247 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
4248 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4249If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4250If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
4251</td>
4252 </tr>
4253 <tr>
4254 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4255 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
4256 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004257Position of the bottom of the strikeout stroke relative to the baseline.
4258Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004259
Cary Clark682c58d2018-05-16 07:07:07 -04004260If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4261If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
4262</td>
4263 </tr>
4264</table>
Cary Clark12799e12017-07-28 15:18:29 -04004265
Cary Clark682c58d2018-05-16 07:07:07 -04004266<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004267
4268---
Cary Clark12799e12017-07-28 15:18:29 -04004269
Cary Clark682c58d2018-05-16 07:07:07 -04004270<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4271bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004272</pre>
4273
Cary Clark80247e52018-07-11 16:18:41 -04004274Returns 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 -04004275<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,
4276return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004277
4278### Parameters
4279
Cary Clark682c58d2018-05-16 07:07:07 -04004280<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
4281 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004282 </tr>
4283</table>
4284
4285### Return Value
4286
4287true if font specifies underline width
4288
Cary Clark682c58d2018-05-16 07:07:07 -04004289<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004290
4291---
Cary Clark12799e12017-07-28 15:18:29 -04004292
Cary Clark682c58d2018-05-16 07:07:07 -04004293<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4294bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004295</pre>
4296
Cary Clark80247e52018-07-11 16:18:41 -04004297Returns 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 -04004298<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,
4299return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004300
4301### Parameters
4302
Cary Clark682c58d2018-05-16 07:07:07 -04004303<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
4304 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004305 </tr>
4306</table>
4307
4308### Return Value
4309
Cary Clark682c58d2018-05-16 07:07:07 -04004310true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004311
Cary Clark682c58d2018-05-16 07:07:07 -04004312<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004313
4314---
Cary Clark12799e12017-07-28 15:18:29 -04004315
Cary Clark682c58d2018-05-16 07:07:07 -04004316<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4317bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004318</pre>
4319
Cary Clark80247e52018-07-11 16:18:41 -04004320Returns 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 -04004321<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,
4322return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004323
4324### Parameters
4325
Cary Clark682c58d2018-05-16 07:07:07 -04004326<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
4327 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004328 </tr>
4329</table>
4330
4331### Return Value
4332
4333true if font specifies strikeout width
4334
Cary Clark682c58d2018-05-16 07:07:07 -04004335<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004336
4337---
Cary Clark12799e12017-07-28 15:18:29 -04004338
Cary Clark682c58d2018-05-16 07:07:07 -04004339<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4340bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004341</pre>
4342
Cary Clark80247e52018-07-11 16:18:41 -04004343Returns 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 -04004344<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,
4345return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004346
4347### Parameters
4348
Cary Clark682c58d2018-05-16 07:07:07 -04004349<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
4350 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004351 </tr>
4352</table>
4353
4354### Return Value
4355
Cary Clark682c58d2018-05-16 07:07:07 -04004356true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004357
Cary Clark682c58d2018-05-16 07:07:07 -04004358<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004359
4360---
Cary Clark12799e12017-07-28 15:18:29 -04004361
Cary Clark682c58d2018-05-16 07:07:07 -04004362<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4363<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 -04004364</pre>
4365
Cary Clark682c58d2018-05-16 07:07:07 -04004366Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
4367The return value is the recommended spacing between lines: the sum of <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>
Cary Clark12799e12017-07-28 15:18:29 -04004368descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004369If <a href='#SkPaint_getFontMetrics_metrics'>metrics</a> is not nullptr, <a href='#Font_Metrics'>Font Metrics</a> is copied to <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>.
4370Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4371dimensions required by <a href='#Text_Scale_X'>Text Scale X</a>, <a href='#Text_Skew_X'>Text Skew X</a>, <a href='#Fake_Bold'>Fake Bold</a>,
4372<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
4373Results can be additionally scaled by <a href='#SkPaint_getFontMetrics_scale'>scale</a>; a <a href='#SkPaint_getFontMetrics_scale'>scale</a> of zero
Cary Clark12799e12017-07-28 15:18:29 -04004374is ignored.
4375
4376### Parameters
4377
Cary Clark682c58d2018-05-16 07:07:07 -04004378<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
4379 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
4380 </tr>
4381 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
4382 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04004383 </tr>
4384</table>
4385
4386### Return Value
4387
4388recommended spacing between lines
4389
4390### Example
4391
4392<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4393
4394### See Also
4395
Cary Clark682c58d2018-05-16 07:07:07 -04004396<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 -04004397
Cary Clark682c58d2018-05-16 07:07:07 -04004398<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004399
4400---
Cary Clark12799e12017-07-28 15:18:29 -04004401
Cary Clark682c58d2018-05-16 07:07:07 -04004402<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4403<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004404</pre>
4405
4406Returns the recommended spacing between lines: the sum of metrics
4407descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004408Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4409dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
4410Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004411
4412### Return Value
4413
4414recommended spacing between lines
4415
4416### Example
4417
4418<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4419
4420#### Example Output
4421
4422~~~~
4423textSize: 12 fontSpacing: 13.9688
4424textSize: 18 fontSpacing: 20.9531
4425textSize: 24 fontSpacing: 27.9375
4426textSize: 32 fontSpacing: 37.25
4427~~~~
4428
4429</fiddle-embed></div>
4430
Cary Clark682c58d2018-05-16 07:07:07 -04004431<a name='SkPaint_getFontBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004432
4433---
Cary Clark12799e12017-07-28 15:18:29 -04004434
Cary Clark682c58d2018-05-16 07:07:07 -04004435<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4436<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004437</pre>
4438
Cary Clark682c58d2018-05-16 07:07:07 -04004439Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
4440Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
4441ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
4442and <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 -04004443
Cary Clark682c58d2018-05-16 07:07:07 -04004444If <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,
4445returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
4446<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 -04004447
4448### Return Value
4449
Cary Clark682c58d2018-05-16 07:07:07 -04004450union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004451
4452### Example
4453
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004454<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
Cary Clark12799e12017-07-28 15:18:29 -04004455
4456#### Example Output
4457
4458~~~~
4459metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4460font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4461~~~~
4462
4463</fiddle-embed></div>
4464
Cary Clark682c58d2018-05-16 07:07:07 -04004465<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004466
4467---
Cary Clark12799e12017-07-28 15:18:29 -04004468
Cary Clark682c58d2018-05-16 07:07:07 -04004469<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4470int <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 -04004471</pre>
4472
Cary Clark682c58d2018-05-16 07:07:07 -04004473Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
4474Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
4475<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>.
4476<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004477
Cary Clark682c58d2018-05-16 07:07:07 -04004478Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004479
Cary Clark682c58d2018-05-16 07:07:07 -04004480If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
4481If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004482
Cary Clark682c58d2018-05-16 07:07:07 -04004483If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
4484<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004485
4486### Parameters
4487
Cary Clark682c58d2018-05-16 07:07:07 -04004488<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
4489 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4490 </tr>
4491 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
4492 <td>length of character storage in bytes</td>
4493 </tr>
4494 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
4495 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004496 </tr>
4497</table>
4498
4499### Return Value
4500
Cary Clark682c58d2018-05-16 07:07:07 -04004501number of <a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> represented by <a href='#SkPaint_textToGlyphs_text'>text</a> of length <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a>
Cary Clark12799e12017-07-28 15:18:29 -04004502
4503### Example
4504
4505<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4506
Cary Clark682c58d2018-05-16 07:07:07 -04004507<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004508
4509---
Cary Clark12799e12017-07-28 15:18:29 -04004510
Cary Clark682c58d2018-05-16 07:07:07 -04004511<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4512int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004513</pre>
4514
Cary Clark682c58d2018-05-16 07:07:07 -04004515Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
4516Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
4517Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004518
4519### Parameters
4520
Cary Clark682c58d2018-05-16 07:07:07 -04004521<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
4522 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4523 </tr>
4524 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
4525 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04004526 </tr>
4527</table>
4528
4529### Return Value
4530
Cary Clark682c58d2018-05-16 07:07:07 -04004531number 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 -04004532
4533### Example
4534
Cary Clarkf9603982018-07-17 08:20:27 -04004535<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04004536
4537#### Example Output
4538
4539~~~~
4540count = 5
4541~~~~
4542
4543</fiddle-embed></div>
4544
Cary Clark682c58d2018-05-16 07:07:07 -04004545<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004546
4547---
Cary Clark12799e12017-07-28 15:18:29 -04004548
Cary Clark682c58d2018-05-16 07:07:07 -04004549<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4550bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004551</pre>
4552
Cary Clark682c58d2018-05-16 07:07:07 -04004553Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
4554Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
4555<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004556
Cary Clark682c58d2018-05-16 07:07:07 -04004557If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
4558returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
4559does 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 -04004560
Cary Clark682c58d2018-05-16 07:07:07 -04004561Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004562
4563### Parameters
4564
Cary Clark682c58d2018-05-16 07:07:07 -04004565<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
4566 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
4567 </tr>
4568 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
4569 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004570 </tr>
4571</table>
4572
4573### Return Value
4574
Cary Clark682c58d2018-05-16 07:07:07 -04004575true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004576
Ruiqi Mao94d57c42018-07-02 15:20:10 -04004577<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05004578corresponding to the Unicode surrogate code point.
4579</div>
Cary Clark12799e12017-07-28 15:18:29 -04004580
4581#### Example Output
4582
4583~~~~
45840x00b0 == has char
45850xd800 != has char
4586~~~~
4587
Cary Clark12799e12017-07-28 15:18:29 -04004588### Example
4589
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004590<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 -04004591that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004592</div>
Cary Clark12799e12017-07-28 15:18:29 -04004593
4594#### Example Output
4595
4596~~~~
45970x01ff == has glyph
45980x0000 != has glyph
45990xffff == has glyph
4600~~~~
4601
4602</fiddle-embed></div>
4603
4604### See Also
4605
Cary Clark682c58d2018-05-16 07:07:07 -04004606<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004607
Cary Clark682c58d2018-05-16 07:07:07 -04004608<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004609
4610---
Cary Clark12799e12017-07-28 15:18:29 -04004611
Cary Clark682c58d2018-05-16 07:07:07 -04004612<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4613void <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 -04004614</pre>
4615
Cary Clark682c58d2018-05-16 07:07:07 -04004616Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
4617<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
4618Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
4619by <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 -04004620
Cary Clark682c58d2018-05-16 07:07:07 -04004621Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004622
4623### Parameters
4624
Cary Clark682c58d2018-05-16 07:07:07 -04004625<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
4626 <td>array of indices into font</td>
4627 </tr>
4628 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
4629 <td>length of glyph array</td>
4630 </tr>
4631 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
4632 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04004633 </tr>
4634</table>
4635
4636### Example
4637
skia-bookmakerb95bbba2018-07-06 05:23:23 +00004638<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 -05004639</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004640
Cary Clarka90ea222018-10-16 10:30:28 -04004641<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004642
Cary Clark682c58d2018-05-16 07:07:07 -04004643<a name='SkPaint_measureText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004644
4645---
Cary Clark12799e12017-07-28 15:18:29 -04004646
Cary Clark682c58d2018-05-16 07:07:07 -04004647<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4648<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 -04004649</pre>
4650
Cary Clark3aca39d2018-10-23 14:44:05 -04004651Returns the advance width of <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004652The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
4653Uses <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,
4654and <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
4655<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
4656Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
4657The 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 -04004658
4659### Parameters
4660
Cary Clark682c58d2018-05-16 07:07:07 -04004661<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
4662 <td>character codes or glyph indices to be measured</td>
4663 </tr>
4664 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
4665 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
4666 </tr>
4667 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
4668 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004669 </tr>
4670</table>
4671
4672### Return Value
4673
4674advance width or height
4675
4676### Example
4677
Cary Clark83647062018-07-18 16:21:51 -04004678<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004679
Cary Clark682c58d2018-05-16 07:07:07 -04004680<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05004681
Cary Clarka90ea222018-10-16 10:30:28 -04004682---
4683
Cary Clark682c58d2018-05-16 07:07:07 -04004684<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4685<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 -04004686</pre>
4687
Cary Clark3aca39d2018-10-23 14:44:05 -04004688Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004689The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
4690Uses <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,
4691and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4692Does 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 -04004693
4694### Parameters
4695
Cary Clark682c58d2018-05-16 07:07:07 -04004696<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
4697 <td>character codes or glyph indices to be measured</td>
4698 </tr>
4699 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
4700 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004701 </tr>
4702</table>
4703
4704### Return Value
4705
4706advance width or height
4707
4708### Example
4709
4710<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4711
4712#### Example Output
4713
4714~~~~
4715default width = 5
4716double width = 10
4717~~~~
4718
4719</fiddle-embed></div>
4720
Cary Clark682c58d2018-05-16 07:07:07 -04004721<a name='SkPaint_breakText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004722
4723---
Cary Clark12799e12017-07-28 15:18:29 -04004724
Cary Clark682c58d2018-05-16 07:07:07 -04004725<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4726size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
4727 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004728</pre>
4729
Cary Clark682c58d2018-05-16 07:07:07 -04004730Returns 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 -04004731The <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 -04004732Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4733Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
4734Uses <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,
4735and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4736Does 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 -04004737
4738### Parameters
4739
Cary Clark682c58d2018-05-16 07:07:07 -04004740<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
4741 <td>character codes or glyph indices to be measured</td>
4742 </tr>
4743 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
4744 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
4745 </tr>
4746 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
4747 <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>
4748 </tr>
4749 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
4750 <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 -04004751 </tr>
4752</table>
4753
4754### Return Value
4755
Cary Clark682c58d2018-05-16 07:07:07 -04004756bytes 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 -04004757
4758### Example
4759
Cary Clark682c58d2018-05-16 07:07:07 -04004760<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
4761<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 -05004762</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004763
Cary Clark682c58d2018-05-16 07:07:07 -04004764<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004765
4766---
Cary Clark12799e12017-07-28 15:18:29 -04004767
Cary Clark682c58d2018-05-16 07:07:07 -04004768<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4769int <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 -04004770</pre>
4771
Cary Clark682c58d2018-05-16 07:07:07 -04004772Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
4773the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4774Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4775If <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.
4776if <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 -04004777Widths returns the horizontal advance.
Cary Clark682c58d2018-05-16 07:07:07 -04004778Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getTextWidths_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the font metrics,
4779and <a href='#Text_Size'>Text Size</a> to scale the <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a>.
4780Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
4781Does include <a href='#Fake_Bold'>Fake Bold</a> and <a href='undocumented#Path_Effect'>Path Effect</a> in the <a href='#SkPaint_getTextWidths_bounds'>bounds</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004782
4783### Parameters
4784
Cary Clark682c58d2018-05-16 07:07:07 -04004785<table> <tr> <td><a name='SkPaint_getTextWidths_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_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
4789 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
4790 </tr>
4791 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
4792 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
4793 </tr>
4794 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
4795 <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 -04004796 </tr>
4797</table>
4798
4799### Return Value
4800
Cary Clark682c58d2018-05-16 07:07:07 -04004801glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004802
4803### Example
4804
Cary Clarkf9603982018-07-17 08:20:27 -04004805<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 -04004806The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004807</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004808
Cary Clarka90ea222018-10-16 10:30:28 -04004809<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004810
Cary Clark682c58d2018-05-16 07:07:07 -04004811<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 -04004812
Cary Clark682c58d2018-05-16 07:07:07 -04004813<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004814
4815---
Cary Clark12799e12017-07-28 15:18:29 -04004816
Cary Clark682c58d2018-05-16 07:07:07 -04004817<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4818void <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 -04004819</pre>
4820
Cary Clark682c58d2018-05-16 07:07:07 -04004821Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
4822Uses <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,
4823and <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.
4824All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
4825Uses <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 -04004826
4827### Parameters
4828
Cary Clark682c58d2018-05-16 07:07:07 -04004829<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
4830 <td>character codes or glyph indices</td>
4831 </tr>
4832 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4833 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4834 </tr>
4835 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004836 <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 -04004837 </tr>
4838 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004839 <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 -04004840 </tr>
4841 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
4842 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004843 </tr>
4844</table>
4845
4846### Example
4847
Cary Clark682c58d2018-05-16 07:07:07 -04004848<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 -05004849the offset location. The result is rendered with one draw call.
4850</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004851
Cary Clark682c58d2018-05-16 07:07:07 -04004852<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004853
4854---
Cary Clark12799e12017-07-28 15:18:29 -04004855
Cary Clark682c58d2018-05-16 07:07:07 -04004856<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4857void <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 -04004858</pre>
4859
Cary Clark682c58d2018-05-16 07:07:07 -04004860Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
4861Uses <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,
4862and <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.
4863All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
4864Uses <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>.
4865<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004866
4867### Parameters
4868
Cary Clark682c58d2018-05-16 07:07:07 -04004869<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
4870 <td>character codes or glyph indices</td>
4871 </tr>
4872 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4873 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4874 </tr>
4875 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
4876 <td>positions of each glyph</td>
4877 </tr>
4878 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
4879 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004880 </tr>
4881</table>
4882
4883### Example
4884
Cary Clark682c58d2018-05-16 07:07:07 -04004885<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 -05004886</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004887
Cary Clarka90ea222018-10-16 10:30:28 -04004888<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004889
Cary Clark682c58d2018-05-16 07:07:07 -04004890<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
4891of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04004892underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004893
Cary Clark682c58d2018-05-16 07:07:07 -04004894<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004895
4896---
Cary Clark12799e12017-07-28 15:18:29 -04004897
Cary Clark682c58d2018-05-16 07:07:07 -04004898<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4899int <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,
4900 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004901</pre>
4902
Cary Clark682c58d2018-05-16 07:07:07 -04004903Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
4904<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
4905The 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 -05004906the string.
Cary Clark682c58d2018-05-16 07:07:07 -04004907Uses <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,
4908and <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.
4909Uses <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 +00004910
Cary Clark682c58d2018-05-16 07:07:07 -04004911Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004912
Cary Clark682c58d2018-05-16 07:07:07 -04004913<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004914
4915### Parameters
4916
Cary Clark682c58d2018-05-16 07:07:07 -04004917<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
4918 <td>character codes or glyph indices</td>
4919 </tr>
4920 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
4921 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
4922 </tr>
4923 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004924 <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 -04004925 </tr>
4926 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004927 <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 -04004928 </tr>
4929 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
4930 <td>lower and upper line parallel to the advance</td>
4931 </tr>
4932 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4933 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004934 </tr>
4935</table>
4936
4937### Return Value
4938
4939number of intersections; may be zero
4940
4941### Example
4942
Cary Clark1a8d7622018-03-05 13:26:16 -05004943<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
4944</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004945
Cary Clark682c58d2018-05-16 07:07:07 -04004946<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004947
4948---
Cary Clark12799e12017-07-28 15:18:29 -04004949
Cary Clark682c58d2018-05-16 07:07:07 -04004950<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4951int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
4952 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004953</pre>
4954
Cary Clark682c58d2018-05-16 07:07:07 -04004955Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
4956<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
4957The 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 -05004958the string.
Cary Clark682c58d2018-05-16 07:07:07 -04004959Uses <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,
4960and <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.
4961Uses <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 +00004962
Cary Clark682c58d2018-05-16 07:07:07 -04004963Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004964
Cary Clark682c58d2018-05-16 07:07:07 -04004965<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004966
4967### Parameters
4968
Cary Clark682c58d2018-05-16 07:07:07 -04004969<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
4970 <td>character codes or glyph indices</td>
4971 </tr>
4972 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
4973 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
4974 </tr>
4975 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
4976 <td>positions of each glyph</td>
4977 </tr>
4978 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
4979 <td>lower and upper line parallel to the advance</td>
4980 </tr>
4981 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4982 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004983 </tr>
4984</table>
4985
4986### Return Value
4987
Cary Clarka523d2d2017-08-30 08:58:10 -04004988number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004989
4990### Example
4991
Cary Clark92694be2018-10-25 08:15:36 -04004992<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 -05004993</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004994
Cary Clark682c58d2018-05-16 07:07:07 -04004995<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004996
4997---
Cary Clark12799e12017-07-28 15:18:29 -04004998
Cary Clark682c58d2018-05-16 07:07:07 -04004999<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5000int <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,
5001 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005002</pre>
5003
Cary Clark682c58d2018-05-16 07:07:07 -04005004Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5005<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5006The 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 -05005007the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005008Uses <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,
5009and <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.
5010Uses <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 +00005011
Cary Clark682c58d2018-05-16 07:07:07 -04005012Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005013
Cary Clark682c58d2018-05-16 07:07:07 -04005014<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005015
5016### Parameters
5017
Cary Clark682c58d2018-05-16 07:07:07 -04005018<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5019 <td>character codes or glyph indices</td>
5020 </tr>
5021 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5022 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5023 </tr>
5024 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5025 <td>positions of each glyph in x</td>
5026 </tr>
5027 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5028 <td>position of each glyph in y</td>
5029 </tr>
5030 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5031 <td>lower and upper line parallel to the advance</td>
5032 </tr>
5033 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5034 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005035 </tr>
5036</table>
5037
5038### Return Value
5039
5040number of intersections; may be zero
5041
5042### Example
5043
Cary Clark80247e52018-07-11 16:18:41 -04005044<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 -05005045</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005046
Cary Clark682c58d2018-05-16 07:07:07 -04005047<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005048
5049---
Cary Clark12799e12017-07-28 15:18:29 -04005050
Cary Clark682c58d2018-05-16 07:07:07 -04005051<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkd2ca79c2018-08-10 13:09:13 -04005052int <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 -04005053</pre>
5054
Cary Clark682c58d2018-05-16 07:07:07 -04005055Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
5056<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
5057The 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 -05005058the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005059Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5060and <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.
5061Uses 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 +00005062
Cary Clark682c58d2018-05-16 07:07:07 -04005063<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 -05005064
Cary Clark682c58d2018-05-16 07:07:07 -04005065Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005066
Cary Clark682c58d2018-05-16 07:07:07 -04005067<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005068
5069### Parameters
5070
Cary Clark682c58d2018-05-16 07:07:07 -04005071<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
5072 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
5073 </tr>
5074 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5075 <td>lower and upper line parallel to the advance</td>
5076 </tr>
5077 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5078 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005079 </tr>
5080</table>
5081
5082### Return Value
5083
5084number of intersections; may be zero
5085
5086### Example
5087
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005088<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005089
Cary Clark682c58d2018-05-16 07:07:07 -04005090<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005091
5092---
Cary Clark12799e12017-07-28 15:18:29 -04005093
Cary Clark682c58d2018-05-16 07:07:07 -04005094<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5095bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005096</pre>
5097
Cary Clark682c58d2018-05-16 07:07:07 -04005098Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
5099otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005100
Cary Clark224c7002018-06-27 11:00:21 -04005101Returns 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 -04005102new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005103
5104### Return Value
5105
Cary Clark682c58d2018-05-16 07:07:07 -04005106true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005107
5108### Example
5109
Cary Clark83647062018-07-18 16:21:51 -04005110<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04005111
5112#### Example Output
5113
5114~~~~
5115initial nothing to draw: false
5116blend dst nothing to draw: true
5117blend src over nothing to draw: false
5118alpha 0 nothing to draw: true
5119~~~~
5120
5121</fiddle-embed></div>
5122
Cary Clarka90ea222018-10-16 10:30:28 -04005123<a name='Fast_Bounds'></a>
Cary Clark08895c42018-02-01 09:37:32 -05005124
Cary Clark61313f32018-10-08 14:57:48 -04005125Private: To be made private.
5126
Cary Clark682c58d2018-05-16 07:07:07 -04005127<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
5128<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005129
Cary Clark682c58d2018-05-16 07:07:07 -04005130<a name='SkPaint_canComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005131
5132---
Cary Clark12799e12017-07-28 15:18:29 -04005133
Cary Clark682c58d2018-05-16 07:07:07 -04005134<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5135bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005136</pre>
5137
Cary Clark61313f32018-10-08 14:57:48 -04005138Private: (to be made private)
5139
Cary Clark682c58d2018-05-16 07:07:07 -04005140Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
5141to 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 -04005142always returns false.
5143
5144### Return Value
5145
Cary Clark682c58d2018-05-16 07:07:07 -04005146true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005147
Cary Clark682c58d2018-05-16 07:07:07 -04005148<a name='SkPaint_computeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005149
5150---
Cary Clark12799e12017-07-28 15:18:29 -04005151
Cary Clark682c58d2018-05-16 07:07:07 -04005152<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5153const <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 -04005154</pre>
5155
Cary Clark61313f32018-10-08 14:57:48 -04005156Private: (to be made private)
5157
Cary Clark682c58d2018-05-16 07:07:07 -04005158Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005159raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04005160effects 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 -04005161parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04005162for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005163
Cary Clark682c58d2018-05-16 07:07:07 -04005164The 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
5165should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
5166use 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
5167<a href='SkRect_Reference#Rect'>Rect</a>.
5168
Cary Clark61313f32018-10-08 14:57:48 -04005169Private: For example:
5170 if (!path.isInverseFillType() && paint.canComputeFastBounds()) {
5171 SkRect storage;
5172 if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &storage))) {
5173 return; // do not draw the path
5174 }
5175 }
5176 // draw the path
5177
Cary Clark12799e12017-07-28 15:18:29 -04005178### Parameters
5179
Cary Clark682c58d2018-05-16 07:07:07 -04005180<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5181 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5182 </tr>
5183 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5184 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005185 </tr>
5186</table>
5187
5188### Return Value
5189
5190fast computed bounds
5191
Cary Clark682c58d2018-05-16 07:07:07 -04005192<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005193
5194---
Cary Clark12799e12017-07-28 15:18:29 -04005195
Cary Clark682c58d2018-05-16 07:07:07 -04005196<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5197const <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 -04005198</pre>
5199
Cary Clark61313f32018-10-08 14:57:48 -04005200Private: (to be made private)
5201
Cary Clark12799e12017-07-28 15:18:29 -04005202### Parameters
5203
Cary Clark682c58d2018-05-16 07:07:07 -04005204<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
5205 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5206 </tr>
5207 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
5208 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04005209 </tr>
5210</table>
5211
5212### Return Value
5213
5214fast computed bounds
5215
Cary Clark682c58d2018-05-16 07:07:07 -04005216<a name='SkPaint_doComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005217
5218---
Cary Clark12799e12017-07-28 15:18:29 -04005219
Cary Clark682c58d2018-05-16 07:07:07 -04005220<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5221const <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 -04005222</pre>
5223
Cary Clark61313f32018-10-08 14:57:48 -04005224Private: (to be made private)
5225
Cary Clark682c58d2018-05-16 07:07:07 -04005226Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
5227account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
5228altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005229
5230### Parameters
5231
Cary Clark682c58d2018-05-16 07:07:07 -04005232<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5233 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5234 </tr>
5235 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5236 <td>computed bounds of geometry</td>
5237 </tr>
5238 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
5239 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005240 </tr>
5241</table>
5242
5243### Return Value
5244
5245fast computed bounds
5246
Cary Clarka90ea222018-10-16 10:30:28 -04005247<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05005248