blob: 0871d448260d8a9253075bd9b79f38457a76a98b [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
Cary Clark81f11c92018-11-01 22:24:59 -0400207 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='#SkPaint_FontMetrics'>FontMetrics</a>* metrics) const;
Cary Clark61313f32018-10-08 14:57:48 -0400208 <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 Clark09d80c02018-10-31 12:14:03 -0400332Makes a shallow copy of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>. <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>,
333<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> are shared
334between the original <a href='#SkPaint_SkPaint(const SkPaint& paint)_paint'>paint</a> and the copy. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400335their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400336
Cary Clark09d80c02018-10-31 12:14:03 -0400337The referenced objects <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>, <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>,
338<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> cannot be modified after they are created.
339This prevents objects with <a href='undocumented#SkRefCnt'>SkRefCnt</a> from being modified once <a href='SkPaint_Reference#SkPaint'>SkPaint</a> refers to them.
Cary Clark12799e12017-07-28 15:18:29 -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 Clark09d80c02018-10-31 12:14:03 -0400350shallow copy of <a href='#SkPaint_SkPaint(const SkPaint& paint)_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 Clark09d80c02018-10-31 12:14:03 -0400374of objects referenced by the <a href='#SkPaint_SkPaint(SkPaint&& paint)_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400375
Cary Clark09d80c02018-10-31 12:14:03 -0400376After the call, <a href='#SkPaint_SkPaint(SkPaint&& paint)_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 Clark09d80c02018-10-31 12:14:03 -0400387content of <a href='#SkPaint_SkPaint(SkPaint&& paint)_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 Clark09d80c02018-10-31 12:14:03 -0400409Sets all <a href='SkPaint_Reference#SkPaint'>SkPaint</a> contents to their initial values. This is equivalent to replacing
410<a href='SkPaint_Reference#SkPaint'>SkPaint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -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 Clark09d80c02018-10-31 12:14:03 -0400432Decreases <a href='SkPaint_Reference#SkPaint'>SkPaint</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> of owned objects: <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>,
433<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a>. If the
434objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</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 Clark09d80c02018-10-31 12:14:03 -0400446Makes a shallow copy of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>. <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>,
447<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> are shared
448between the original <a href='#SkPaint_operator=(const SkPaint& paint)_paint'>paint</a> and the copy. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</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 Clark09d80c02018-10-31 12:14:03 -0400450resulting count is zero. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the parameter <a href='#SkPaint_operator=(const SkPaint& paint)_paint'>paint</a>
451are increased by one. <a href='#SkPaint_operator=(const SkPaint& paint)_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 Clark09d80c02018-10-31 12:14:03 -0400462content of <a href='#SkPaint_operator=(const SkPaint& paint)_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 Clark09d80c02018-10-31 12:14:03 -0400485Moves the <a href='#SkPaint_operator=(SkPaint&& paint)_paint'>paint</a> to avoid increasing the reference counts
486of objects referenced by the <a href='#SkPaint_operator=(SkPaint&& paint)_paint'>paint</a> parameter. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</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 Clark09d80c02018-10-31 12:14:03 -0400490After the call, <a href='#SkPaint_operator=(SkPaint&& paint)_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 Clark09d80c02018-10-31 12:14:03 -0400501content of <a href='#SkPaint_operator=(SkPaint&& paint)_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 Clark09d80c02018-10-31 12:14:03 -0400523Compares <a href='#SkPaint_operator==(const SkPaint& a, const SkPaint& b)_a'>a</a> and <a href='#SkPaint_operator==(const SkPaint& a, const SkPaint& b)_b'>b</a>, and returns true if <a href='#SkPaint_operator==(const SkPaint& a, const SkPaint& b)_a'>a</a> and <a href='#SkPaint_operator==(const SkPaint& a, const SkPaint& b)_b'>b</a> are equivalent. May return false
524if <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>, <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>,
525<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, or <a href='undocumented#SkImageFilter'>SkImageFilter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -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>
Cary Clark09d80c02018-10-31 12:14:03 -0400530 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400531 </tr>
532 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400533 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400534 </tr>
535</table>
536
537### Return Value
538
Cary Clark09d80c02018-10-31 12:14:03 -0400539true if <a href='SkPaint_Reference#SkPaint'>SkPaint</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 Clark09d80c02018-10-31 12:14:03 -0400566Compares <a href='#SkPaint_operator!=(const SkPaint& a, const SkPaint& b)_a'>a</a> and <a href='#SkPaint_operator!=(const SkPaint& a, const SkPaint& b)_b'>b</a>, and returns true if <a href='#SkPaint_operator!=(const SkPaint& a, const SkPaint& b)_a'>a</a> and <a href='#SkPaint_operator!=(const SkPaint& a, const SkPaint& b)_b'>b</a> are not equivalent. May return true
567if <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>, <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>,
568<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, or <a href='undocumented#SkImageFilter'>SkImageFilter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -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>
Cary Clark09d80c02018-10-31 12:14:03 -0400573 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400574 </tr>
575 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400576 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400577 </tr>
578</table>
579
580### Return Value
581
Cary Clark09d80c02018-10-31 12:14:03 -0400582true if <a href='SkPaint_Reference#SkPaint'>SkPaint</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 Clark09d80c02018-10-31 12:14:03 -0400609Returns a hash generated from <a href='SkPaint_Reference#SkPaint'>SkPaint</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 Clark09d80c02018-10-31 12:14:03 -0400710to account for LCD text. No hinting uses <a href='undocumented#Core_Text'>Core Text</a> grayscale 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 Clark09d80c02018-10-31 12:14:03 -0400712the LCD output is reduced to a single grayscale 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
Cary Clark09d80c02018-10-31 12:14:03 -0400727Returns level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
Cary Clark12799e12017-07-28 15:18:29 -0400728
729### Return Value
730
Cary Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -0400918Returns <a href='SkPaint_Reference#Paint'>paint</a> settings described by <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
919bit, and can be tested with <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400920
921### Return Value
922
Cary Clark09d80c02018-10-31 12:14:03 -0400923zero, one, or more bits described by <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -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 Clark09d80c02018-10-31 12:14:03 -0400945Replaces <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> with <a href='#SkPaint_setFlags_flags'>flags</a>, the union of the <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> members.
946All <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -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>
Cary Clark09d80c02018-10-31 12:14:03 -0400951 <td>union of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> for <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -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 Clark09d80c02018-10-31 12:14:03 -04001008Returns true if pixels on the active edges of <a href='SkPath_Reference#SkPath'>SkPath</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -04001009
Cary Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -04001037Requests, but does not require, that <a href='SkPath_Reference#SkPath'>SkPath</a> edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -04001038partial transparency.
1039
Cary Clark09d80c02018-10-31 12:14:03 -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>
Cary Clark09d80c02018-10-31 12:14:03 -04001046 <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 Clark09d80c02018-10-31 12:14:03 -04001108Returns true if <a href='SkColor_Reference#Color'>color</a> error may be distributed to smooth <a href='SkColor_Reference#Color'>color</a> transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001109
Cary Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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
Cary Clark09d80c02018-10-31 12:14:03 -04001137Requests, but does not require, to distribute <a href='SkColor_Reference#Color'>color</a> error.
Cary Clark12799e12017-07-28 15:18:29 -04001138
Cary Clark09d80c02018-10-31 12:14:03 -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>
Cary Clark09d80c02018-10-31 12:14:03 -04001145 <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 Clark09d80c02018-10-31 12:14:03 -04001207Returns true if <a href='undocumented#Text'>text</a> is converted to <a href='SkPath_Reference#SkPath'>SkPath</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001208
Cary Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -04001231Returns true if <a href='undocumented#Text'>text</a> is converted to <a href='SkPath_Reference#SkPath'>SkPath</a> before drawing and measuring.
1232By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001233
Cary Clark09d80c02018-10-31 12:14:03 -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>
Cary Clark09d80c02018-10-31 12:14:03 -04001240 <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 Clark09d80c02018-10-31 12:14:03 -04001266Returns true if <a href='undocumented#Glyph'>glyphs</a> at different sub-pixel positions may differ on <a href='undocumented#Pixel'>pixel</a> edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001267
Cary Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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>
Cary Clark09d80c02018-10-31 12:14:03 -04001303 <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 Clark09d80c02018-10-31 12:14:03 -04001335Returns true if <a href='undocumented#Glyph'>glyphs</a> may use LCD striping to improve <a href='undocumented#Glyph'>glyph</a> edges.
Cary Clark12799e12017-07-28 15:18:29 -04001336
Cary Clark09d80c02018-10-31 12:14:03 -04001337Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> is set.
Cary Clark12799e12017-07-28 15:18:29 -04001338
1339### Return Value
1340
Cary Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -04001364Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> use LCD striping for <a href='undocumented#Glyph'>glyph</a> edges.
Cary Clark12799e12017-07-28 15:18:29 -04001365
Cary Clark09d80c02018-10-31 12:14:03 -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>
Cary Clark09d80c02018-10-31 12:14:03 -04001372 <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 Clark09d80c02018-10-31 12:14:03 -04001438Returns true if <a href='undocumented#Font_Engine'>font engine</a> may return <a href='undocumented#Glyph'>glyphs</a> from <a href='undocumented#Font'>font</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001439
Cary Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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
Cary Clark09d80c02018-10-31 12:14:03 -04001467Requests, but does not require, to use <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> in fonts instead of outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001468
Cary Clark09d80c02018-10-31 12:14:03 -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>
Cary Clark09d80c02018-10-31 12:14:03 -04001475 <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 Clark09d80c02018-10-31 12:14:03 -04001508Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<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 Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -04001543Sets whether to always hint <a href='undocumented#Glyph'>glyphs</a>.
1544If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<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,
1545instructs the <a href='undocumented#Font_Manager'>font manager</a> to always hint <a href='undocumented#Glyph'>glyphs</a>.
1546<a href='SkPaint_Reference#Automatic_Hinting'>auto-hinting</a> has no effect if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<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 Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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>
Cary Clark09d80c02018-10-31 12:14:03 -04001557 <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 Clark09d80c02018-10-31 12:14:03 -04001598Returns true if approximate bold by increasing the <a href='#Stroke_Width'>stroke width</a> when creating <a href='undocumented#Glyph'>glyph</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a>
Cary Clark12799e12017-07-28 15:18:29 -04001599from outlines.
1600
Cary Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -04001628Increases <a href='#Stroke_Width'>stroke width</a> when creating <a href='undocumented#Glyph'>glyph</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> to approximate a bold <a href='undocumented#Typeface'>typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001629
Cary Clark09d80c02018-10-31 12:14:03 -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>
Cary Clark09d80c02018-10-31 12:14:03 -04001636 <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 Clark09d80c02018-10-31 12:14:03 -04001655spacing by the difference of the hinted and unhinted <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 Clark09d80c02018-10-31 12:14:03 -04001659<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text kerning, where the space between
1660a specific pair of characters is adjusted using data in the font kerning 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 Clark09d80c02018-10-31 12:14:03 -04001721Returns <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1722draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
Cary Clark12799e12017-07-28 15:18:29 -04001723
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>,
Cary Clark09d80c02018-10-31 12:14:03 -04001727
Cary Clark682c58d2018-05-16 07:07:07 -04001728<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001729
1730### Example
1731
1732<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1733
1734#### Example Output
1735
1736~~~~
1737kNone_SkFilterQuality == paint.getFilterQuality()
1738~~~~
1739
1740</fiddle-embed></div>
1741
Cary Clark682c58d2018-05-16 07:07:07 -04001742<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001743
1744---
Cary Clark12799e12017-07-28 15:18:29 -04001745
Cary Clark682c58d2018-05-16 07:07:07 -04001746<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1747void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001748</pre>
1749
Cary Clark09d80c02018-10-31 12:14:03 -04001750Sets <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1751draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04001752Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001753
1754### Parameters
1755
Cary Clark682c58d2018-05-16 07:07:07 -04001756<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001757 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,</td>
Cary Clark12799e12017-07-28 15:18:29 -04001758 </tr>
1759</table>
1760
Cary Clark09d80c02018-10-31 12:14:03 -04001761<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
1762
Cary Clark12799e12017-07-28 15:18:29 -04001763### Example
1764
1765<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1766
1767#### Example Output
1768
1769~~~~
1770kHigh_SkFilterQuality == paint.getFilterQuality()
1771~~~~
1772
1773</fiddle-embed></div>
1774
1775### See Also
1776
Cary Clark682c58d2018-05-16 07:07:07 -04001777<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001778
Cary Clarka90ea222018-10-16 10:30:28 -04001779<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001780
Cary Clarka90ea222018-10-16 10:30:28 -04001781---
Cary Clark12799e12017-07-28 15:18:29 -04001782
Cary Clarkab2621d2018-01-30 10:08:57 -05001783| name | description |
1784| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04001785| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
1786| <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 -04001787
Cary Clarkffb3d682018-05-17 12:17:28 -04001788<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 -05001789values used to draw a filled or stroked shape in a 32-bit value. Each component
1790occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1791All values in any combination are valid.
1792
Cary Clark682c58d2018-05-16 07:07:07 -04001793<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 -04001794RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001795
Cary Clarkffb3d682018-05-17 12:17:28 -04001796The 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 -05001797positions on the output device, which may have more or fewer bits, and may have
1798a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001799
Cary Clarkffb3d682018-05-17 12:17:28 -04001800| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001801| --- | --- | --- | --- | --- |
1802| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1803
1804### Example
1805
Ravi Mistry874e22b2018-07-19 03:49:13 +00001806<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001807
Cary Clark682c58d2018-05-16 07:07:07 -04001808<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001809
1810---
Cary Clark12799e12017-07-28 15:18:29 -04001811
Cary Clark682c58d2018-05-16 07:07:07 -04001812<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1813<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001814</pre>
1815
Cary Clark09d80c02018-10-31 12:14:03 -04001816Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, packed into 32 bits.
1817Use 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
1818a <a href='SkColor_Reference#Color'>color</a> component.
Cary Clark12799e12017-07-28 15:18:29 -04001819
1820### Return Value
1821
Cary Clark09d80c02018-10-31 12:14:03 -04001822<a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001823
1824### Example
1825
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001826<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001827
1828#### Example Output
1829
1830~~~~
1831Yellow is 100% red, 100% green, and 0% blue.
1832~~~~
1833
1834</fiddle-embed></div>
1835
1836### See Also
1837
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001838<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1839
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001840<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001841
1842---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001843
1844<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1845<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const
1846</pre>
1847
Cary Clark09d80c02018-10-31 12:14:03 -04001848Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, as four floating <a href='SkPoint_Reference#Point'>point</a> values. RGB are
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001849are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1850
1851### Return Value
1852
Cary Clark09d80c02018-10-31 12:14:03 -04001853<a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001854
1855### Example
1856
1857<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1858
1859#### Example Output
1860
1861~~~~
1862Yellow is 100% red, 100% green, and 0% blue.
1863~~~~
1864
1865</fiddle-embed></div>
1866
1867### See Also
1868
1869<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001870
Cary Clark682c58d2018-05-16 07:07:07 -04001871<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001872
1873---
Cary Clark12799e12017-07-28 15:18:29 -04001874
Cary Clark682c58d2018-05-16 07:07:07 -04001875<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1876void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04001877</pre>
1878
Cary Clark09d80c02018-10-31 12:14:03 -04001879Sets <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,
1880<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 -04001881
1882### Parameters
1883
Cary Clark682c58d2018-05-16 07:07:07 -04001884<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001885 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001886 </tr>
1887</table>
1888
1889### Example
1890
skia-bookmaker233c6522018-07-04 05:33:26 +00001891<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001892
1893#### Example Output
1894
1895~~~~
1896green1 == green2
1897~~~~
1898
1899</fiddle-embed></div>
1900
1901### See Also
1902
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001903<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>
1904
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001905<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001906
1907---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001908
1909<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1910void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& color, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
1911</pre>
1912
Cary Clark09d80c02018-10-31 12:14:03 -04001913Sets <a href='SkColor_Reference#Alpha'>alpha</a> and RGB used when stroking and filling. The <a href='#SkPaint_setColor4f_color'>color</a> is four floating
1914<a href='SkPoint_Reference#Point'>point</a> values, <a href='undocumented#Unpremultiply'>unpremultiplied</a>. The <a href='#SkPaint_setColor4f_color'>color</a> values are interpreted as being in
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001915the <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a>. If <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a> is nullptr, then <a href='#SkPaint_setColor4f_color'>color</a> is assumed to be in the
Cary Clark09d80c02018-10-31 12:14:03 -04001916sRGB <a href='undocumented#Color_Space'>color space</a>.
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001917
1918### Parameters
1919
1920<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001921 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA</td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001922 </tr>
1923 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001924 <td><a href='undocumented#SkColorSpace'>SkColorSpace</a> describing the encoding of <a href='#SkPaint_setColor4f_color'>color</a></td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001925 </tr>
1926</table>
1927
1928### Example
1929
1930<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
1931
1932#### Example Output
1933
1934~~~~
1935green1 == green2
1936~~~~
1937
1938</fiddle-embed></div>
1939
1940### See Also
1941
1942<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 -04001943
Cary Clarka90ea222018-10-16 10:30:28 -04001944<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001945
Cary Clarkffb3d682018-05-17 12:17:28 -04001946<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 -04001947
Cary Clark682c58d2018-05-16 07:07:07 -04001948<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001949
1950---
Cary Clark12799e12017-07-28 15:18:29 -04001951
Cary Clark682c58d2018-05-16 07:07:07 -04001952<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1953uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001954</pre>
1955
Cary Clark09d80c02018-10-31 12:14:03 -04001956Retrieves <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 -04001957
1958### Return Value
1959
Cary Clark09d80c02018-10-31 12:14:03 -04001960<a href='SkColor_Reference#Alpha'>alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001961
1962### Example
1963
Cary Clark83647062018-07-18 16:21:51 -04001964<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04001965
1966#### Example Output
1967
1968~~~~
1969255 == paint.getAlpha()
1970~~~~
1971
1972</fiddle-embed></div>
1973
Cary Clark682c58d2018-05-16 07:07:07 -04001974<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001975
1976---
Cary Clark12799e12017-07-28 15:18:29 -04001977
Cary Clark682c58d2018-05-16 07:07:07 -04001978<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1979void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04001980</pre>
1981
Cary Clark09d80c02018-10-31 12:14:03 -04001982Replaces <a href='SkColor_Reference#Alpha'>alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04001983unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04001984build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
Cary Clark09d80c02018-10-31 12:14:03 -04001985<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 -04001986fully opaque.
1987
1988### Parameters
1989
Cary Clark682c58d2018-05-16 07:07:07 -04001990<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001991 <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 -04001992 </tr>
1993</table>
1994
1995### Example
1996
Ravi Mistry874e22b2018-07-19 03:49:13 +00001997<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04001998
1999#### Example Output
2000
2001~~~~
20020x44112233 == paint.getColor()
2003~~~~
2004
2005</fiddle-embed></div>
2006
Cary Clark682c58d2018-05-16 07:07:07 -04002007<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002008
2009---
Cary Clark12799e12017-07-28 15:18:29 -04002010
Cary Clark682c58d2018-05-16 07:07:07 -04002011<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2012void <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 -04002013</pre>
2014
Cary Clark09d80c02018-10-31 12:14:03 -04002015Sets <a href='SkColor_Reference#Color'>color</a> used when drawing solid fills. The <a href='SkColor_Reference#Color'>color</a> components range from 0 to 255.
2016The <a href='SkColor_Reference#Color'>color</a> is <a href='undocumented#Unpremultiply'>unpremultiplied</a>; <a href='SkColor_Reference#Alpha'>alpha</a> sets the transparency independent of RGB.
Cary Clark12799e12017-07-28 15:18:29 -04002017
2018### Parameters
2019
Cary Clark682c58d2018-05-16 07:07:07 -04002020<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002021 <td>amount of <a href='SkColor_Reference#Alpha'>alpha</a>, from fully transparent (0) to fully opaque (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002022 </tr>
2023 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002024 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002025 </tr>
2026 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002027 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002028 </tr>
2029 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002030 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002031 </tr>
2032</table>
2033
2034### Example
2035
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002036<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04002037
2038#### Example Output
2039
2040~~~~
2041transRed1 == transRed2
2042~~~~
2043
2044</fiddle-embed></div>
2045
2046### See Also
2047
Cary Clark682c58d2018-05-16 07:07:07 -04002048<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002049
Cary Clarka90ea222018-10-16 10:30:28 -04002050<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002051
Cary Clarka90ea222018-10-16 10:30:28 -04002052---
Cary Clark08895c42018-02-01 09:37:32 -05002053
Cary Clark682c58d2018-05-16 07:07:07 -04002054<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2055Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002056
Cary Clarka90ea222018-10-16 10:30:28 -04002057<a name='Style_Fill'></a>
2058
Cary Clark682c58d2018-05-16 07:07:07 -04002059Set <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 -04002060The fill covers the area inside the geometry for most shapes.
2061
Cary Clarka90ea222018-10-16 10:30:28 -04002062<a name='Style_Stroke'></a>
2063
Cary Clark682c58d2018-05-16 07:07:07 -04002064Set <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 -04002065
Cary Clarkbc5697d2017-10-04 14:31:33 -04002066The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002067<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>.
2068The 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 -04002069The 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 -04002070may 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 -04002071
Cary Clarka90ea222018-10-16 10:30:28 -04002072### See Also
Cary Clark12799e12017-07-28 15:18:29 -04002073
Cary Clarka90ea222018-10-16 10:30:28 -04002074<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>
2075
2076<a name='Hairline'></a>
2077
2078---
2079
2080<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Hairline'>Hairline</a>.
2081<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 -05002082flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002083
Cary Clarka90ea222018-10-16 10:30:28 -04002084<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 -04002085two 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 -04002086pixel. 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 -05002087GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002088while stroking.
2089
Cary Clarka90ea222018-10-16 10:30:28 -04002090### See Also
2091
2092<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>
2093
2094<a name='SkPaint_Style'></a>
2095
2096---
Cary Clark12799e12017-07-28 15:18:29 -04002097
Cary Clarka560c472017-11-27 10:44:06 -05002098<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002099 enum <a href='#SkPaint_Style'>Style</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002100 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
2101 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
2102 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002103 };
Cary Clarka90ea222018-10-16 10:30:28 -04002104</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04002105
Cary Clarka90ea222018-10-16 10:30:28 -04002106<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002107 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 -05002108</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002109
Cary Clark682c58d2018-05-16 07:07:07 -04002110Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002111The stroke and fill
2112share all paint attributes; for instance, they are drawn with the same color.
2113
Cary Clark682c58d2018-05-16 07:07:07 -04002114Use <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 -04002115a fill draw.
2116
2117### Constants
2118
Cary Clark682c58d2018-05-16 07:07:07 -04002119<table style='border-collapse: collapse; width: 62.5em'>
2120 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2121<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2122<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2123 <tr style='background-color: #f0f0f0; '>
2124 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2125 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002127Applies 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>.
2128<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 -04002129<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2130The <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 -04002131and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002132<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 -05002133</td>
Cary Clark12799e12017-07-28 15:18:29 -04002134 </tr>
2135 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002136 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2137 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2138 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002139Applies 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 -04002140<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,
2141and ignore the set <a href='#SkPaint_Style'>Style</a>.
2142The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2143</td>
2144 </tr>
2145 <tr style='background-color: #f0f0f0; '>
2146 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2147 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2148 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002149Applies 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 -04002150<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>,
2151and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002152</td>
Cary Clark12799e12017-07-28 15:18:29 -04002153 </tr>
2154 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002155 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2156 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2158May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002159</td>
Cary Clark12799e12017-07-28 15:18:29 -04002160 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002161</table>
Cary Clark12799e12017-07-28 15:18:29 -04002162
Cary Clark682c58d2018-05-16 07:07:07 -04002163<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002164
2165---
Cary Clark12799e12017-07-28 15:18:29 -04002166
Cary Clark682c58d2018-05-16 07:07:07 -04002167<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2168<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002169</pre>
2170
Cary Clark80247e52018-07-11 16:18:41 -04002171Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002172
2173### Return Value
2174
Cary Clark09d80c02018-10-31 12:14:03 -04002175one 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 -04002176
2177### Example
2178
2179<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2180
2181#### Example Output
2182
2183~~~~
2184SkPaint::kFill_Style == paint.getStyle()
2185~~~~
2186
2187</fiddle-embed></div>
2188
2189### See Also
2190
Cary Clark682c58d2018-05-16 07:07:07 -04002191<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002192
Cary Clark682c58d2018-05-16 07:07:07 -04002193<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002194
2195---
Cary Clark12799e12017-07-28 15:18:29 -04002196
Cary Clark682c58d2018-05-16 07:07:07 -04002197<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2198void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002199</pre>
2200
2201Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark09d80c02018-10-31 12:14:03 -04002202Has no effect if <a href='#SkPaint_setStyle_style'>style</a> is not a legal <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Style'>Style</a> value.
Cary Clark12799e12017-07-28 15:18:29 -04002203
2204### Parameters
2205
Cary Clark682c58d2018-05-16 07:07:07 -04002206<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002207 <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 -04002208 </tr>
2209</table>
2210
2211### Example
2212
2213<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2214
2215### See Also
2216
Cary Clark682c58d2018-05-16 07:07:07 -04002217<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002218
Cary Clarka90ea222018-10-16 10:30:28 -04002219<a name='Stroke_Width'></a>
2220
Cary Clark12799e12017-07-28 15:18:29 -04002221---
2222
Cary Clark682c58d2018-05-16 07:07:07 -04002223<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002224of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002225set 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 -04002226
2227When width is greater than zero, the stroke encompasses as many pixels partially
2228or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002229the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002230
Cary Clarka90ea222018-10-16 10:30:28 -04002231The stroke dimensions are scaled by the canvas matrix, but <a href='#Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002232remains one pixel wide regardless of scaling.
2233
2234The default width for the paint is zero.
2235
2236### Example
2237
skia-bookmaker525f9a92018-05-03 06:27:39 +00002238<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 -05002239line and the platform implementation.
2240</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002241
Cary Clark682c58d2018-05-16 07:07:07 -04002242<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002243
2244---
Cary Clark12799e12017-07-28 15:18:29 -04002245
Cary Clark682c58d2018-05-16 07:07:07 -04002246<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2247<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002248</pre>
2249
Cary Clark09d80c02018-10-31 12:14:03 -04002250Returns the thickness of the pen used by <a href='SkPaint_Reference#SkPaint'>SkPaint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002251outline the shape.
2252
2253### Return Value
2254
Cary Clark09d80c02018-10-31 12:14:03 -04002255zero for hairline, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002256
2257### Example
2258
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002259<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002260
2261#### Example Output
2262
2263~~~~
22640 == paint.getStrokeWidth()
2265~~~~
2266
2267</fiddle-embed></div>
2268
Cary Clark682c58d2018-05-16 07:07:07 -04002269<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002270
2271---
Cary Clark12799e12017-07-28 15:18:29 -04002272
Cary Clark682c58d2018-05-16 07:07:07 -04002273<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2274void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002275</pre>
2276
Cary Clark09d80c02018-10-31 12:14:03 -04002277Sets the thickness of the pen used by the <a href='SkPaint_Reference#Paint'>paint</a> to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002278outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002279Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002280
2281### Parameters
2282
Cary Clark682c58d2018-05-16 07:07:07 -04002283<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002284 <td>zero thickness for hairline; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002285 </tr>
2286</table>
2287
2288### Example
2289
2290<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2291
2292#### Example Output
2293
2294~~~~
22955 == paint.getStrokeWidth()
2296~~~~
2297
2298</fiddle-embed></div>
2299
Cary Clarka90ea222018-10-16 10:30:28 -04002300<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002301
Cary Clarka90ea222018-10-16 10:30:28 -04002302---
Cary Clark08895c42018-02-01 09:37:32 -05002303
Cary Clark682c58d2018-05-16 07:07:07 -04002304<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002305relative to the stroke width.
2306
Cary Clark682c58d2018-05-16 07:07:07 -04002307<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
2308is 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>
2309or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002310
Cary Clark682c58d2018-05-16 07:07:07 -04002311If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
2312is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002313
Cary Clark2be81cf2018-09-13 12:04:30 -04002314<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle using:
2315<code>miter limit&nbsp;=&nbsp;1&nbsp;/&nbsp;sin&nbsp;\(&nbsp;angle&nbsp;/&nbsp;2&nbsp;\)</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002316
Cary Clark2be81cf2018-09-13 12:04:30 -04002317<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
Cary Clark682c58d2018-05-16 07:07:07 -04002318The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002319in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002320
2321Here are some miter limits and the angles that triggers them.
2322
2323| miter limit | angle in degrees |
2324| --- | --- |
2325| 10 | 11.48 |
2326| 9 | 12.76 |
2327| 8 | 14.36 |
2328| 7 | 16.43 |
2329| 6 | 19.19 |
2330| 5 | 23.07 |
2331| 4 | 28.96 |
2332| 3 | 38.94 |
2333| 2 | 60 |
2334| 1 | 180 |
2335
2336### Example
2337
Cary Clarka619d452018-07-16 08:12:01 -04002338<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark12799e12017-07-28 15:18:29 -04002339When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002340by a bevel join.
2341</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002342
Cary Clark682c58d2018-05-16 07:07:07 -04002343<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002344
2345---
Cary Clark12799e12017-07-28 15:18:29 -04002346
Cary Clark682c58d2018-05-16 07:07:07 -04002347<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2348<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002349</pre>
2350
Cary Clark80247e52018-07-11 16:18:41 -04002351Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002352
2353### Return Value
2354
Cary Clark09d80c02018-10-31 12:14:03 -04002355zero and greater <a href='#Miter_Limit'>miter limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002356
2357### Example
2358
2359<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2360
2361#### Example Output
2362
2363~~~~
2364default miter limit == 4
2365~~~~
2366
2367</fiddle-embed></div>
2368
2369### See Also
2370
Cary Clark682c58d2018-05-16 07:07:07 -04002371<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 -04002372
Cary Clark682c58d2018-05-16 07:07:07 -04002373<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002374
2375---
Cary Clark12799e12017-07-28 15:18:29 -04002376
Cary Clark682c58d2018-05-16 07:07:07 -04002377<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2378void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002379</pre>
2380
Cary Clark80247e52018-07-11 16:18:41 -04002381Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002382Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04002383Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002384
2385### Parameters
2386
Cary Clark682c58d2018-05-16 07:07:07 -04002387<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002388 <td>zero and greater <a href='#Miter_Limit'>miter limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002389 </tr>
2390</table>
2391
2392### Example
2393
skia-bookmakera717ca92018-07-08 05:32:09 +00002394<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002395
2396#### Example Output
2397
2398~~~~
2399default miter limit == 8
2400~~~~
2401
2402</fiddle-embed></div>
2403
2404### See Also
2405
Cary Clark682c58d2018-05-16 07:07:07 -04002406<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 -04002407
Cary Clarka90ea222018-10-16 10:30:28 -04002408<a name='Stroke_Cap'></a>
2409
2410<a name='SkPaint_Cap'></a>
2411
Cary Clark12799e12017-07-28 15:18:29 -04002412---
2413
Cary Clarka560c472017-11-27 10:44:06 -05002414<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002415 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002416 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2417 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2418 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002419 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2420 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002421 };
Cary Clarka90ea222018-10-16 10:30:28 -04002422</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002423
Cary Clarka90ea222018-10-16 10:30:28 -04002424<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002425 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 -05002426</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002427
Cary Clark61313f32018-10-08 14:57:48 -04002428<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 -04002429
2430### Constants
2431
Cary Clark682c58d2018-05-16 07:07:07 -04002432<table style='border-collapse: collapse; width: 62.5em'>
2433 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2434<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2435<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2436 <tr style='background-color: #f0f0f0; '>
2437 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2438 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2439 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2440Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002441</td>
Cary Clark12799e12017-07-28 15:18:29 -04002442 </tr>
2443 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002444 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2445 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2446 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2447Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05002448and end.
2449</td>
Cary Clark12799e12017-07-28 15:18:29 -04002450 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002451 <tr style='background-color: #f0f0f0; '>
2452 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2453 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2454 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2455Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04002456and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002457of the stroke.
2458</td>
Cary Clark12799e12017-07-28 15:18:29 -04002459 </tr>
2460 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002461 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2462 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2463 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2464Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
2465</td>
2466 </tr>
2467 <tr style='background-color: #f0f0f0; '>
2468 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2469 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2470 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2471<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 -05002472</td>
Cary Clark12799e12017-07-28 15:18:29 -04002473 </tr>
2474 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002475 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2476 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2477 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2478May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002479</td>
Cary Clark12799e12017-07-28 15:18:29 -04002480 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002481</table>
Cary Clark12799e12017-07-28 15:18:29 -04002482
Cary Clark682c58d2018-05-16 07:07:07 -04002483Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002484follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002485
Cary Clark61313f32018-10-08 14:57:48 -04002486If 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 -04002487visible beginning and end.
2488
Cary Clark61313f32018-10-08 14:57:48 -04002489<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 -04002490
Cary Clark61313f32018-10-08 14:57:48 -04002491<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
2492<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 -04002493at the contour point.
Cary Clark61313f32018-10-08 14:57:48 -04002494<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 -04002495<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002496
Cary Clark682c58d2018-05-16 07:07:07 -04002497<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 -04002498
Cary Clark12799e12017-07-28 15:18:29 -04002499### Example
2500
Cary Clark2ade9972017-11-02 17:49:34 -04002501<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002502
Cary Clark682c58d2018-05-16 07:07:07 -04002503<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002504
2505---
Cary Clark12799e12017-07-28 15:18:29 -04002506
Cary Clark682c58d2018-05-16 07:07:07 -04002507<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2508<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002509</pre>
2510
Cary Clark80247e52018-07-11 16:18:41 -04002511Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002512
2513### Return Value
2514
Cary Clark09d80c02018-10-31 12:14:03 -04002515one 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 -04002516
2517### Example
2518
2519<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2520
2521#### Example Output
2522
2523~~~~
2524kButt_Cap == default stroke cap
2525~~~~
2526
2527</fiddle-embed></div>
2528
2529### See Also
2530
Cary Clark682c58d2018-05-16 07:07:07 -04002531<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002532
Cary Clark682c58d2018-05-16 07:07:07 -04002533<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002534
2535---
Cary Clark12799e12017-07-28 15:18:29 -04002536
Cary Clark682c58d2018-05-16 07:07:07 -04002537<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2538void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002539</pre>
2540
Cary Clark80247e52018-07-11 16:18:41 -04002541Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002542
2543### Parameters
2544
Cary Clark682c58d2018-05-16 07:07:07 -04002545<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002546 <td>one of: <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>, <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>, <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>;</td>
Cary Clark12799e12017-07-28 15:18:29 -04002547 </tr>
2548</table>
2549
Cary Clark09d80c02018-10-31 12:14:03 -04002550has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid
2551
Cary Clark12799e12017-07-28 15:18:29 -04002552### Example
2553
2554<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2555
2556#### Example Output
2557
2558~~~~
2559kRound_Cap == paint.getStrokeCap()
2560~~~~
2561
2562</fiddle-embed></div>
2563
2564### See Also
2565
Cary Clark682c58d2018-05-16 07:07:07 -04002566<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002567
Cary Clarka90ea222018-10-16 10:30:28 -04002568<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002569
Cary Clark61313f32018-10-08 14:57:48 -04002570<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 -04002571
Cary Clark682c58d2018-05-16 07:07:07 -04002572Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002573follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002574
2575If the contour direction changes abruptly, because the tangent direction leading
2576to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04002577the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002578
2579### Example
2580
Cary Clark2ade9972017-11-02 17:49:34 -04002581<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002582
Cary Clarka90ea222018-10-16 10:30:28 -04002583<a name='SkPaint_Join'></a>
2584
2585---
Cary Clark12799e12017-07-28 15:18:29 -04002586
Cary Clarka560c472017-11-27 10:44:06 -05002587<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002588 enum <a href='#SkPaint_Join'>Join</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002589 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2590 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2591 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002592 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2593 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002594 };
Cary Clarka90ea222018-10-16 10:30:28 -04002595</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002596
Cary Clarka90ea222018-10-16 10:30:28 -04002597<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002598 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 -05002599</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002600
Cary Clark682c58d2018-05-16 07:07:07 -04002601<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 -04002602affects the four corners of a stroked rectangle, and the connected segments in a
2603stroked path.
2604
2605Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2606radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2607connect the thick strokes.
2608
Cary Clark7cfcbca2018-01-04 16:11:51 -05002609The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002610not contain the actual join. For instance, a fill path constructed with round joins does
2611not necessarily include circles at each connected segment.
2612
2613### Constants
2614
Cary Clark682c58d2018-05-16 07:07:07 -04002615<table style='border-collapse: collapse; width: 62.5em'>
2616 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2617<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2618<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2619 <tr style='background-color: #f0f0f0; '>
2620 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2621 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2622 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2623Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
2624If 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 -05002625</td>
Cary Clark12799e12017-07-28 15:18:29 -04002626 </tr>
2627 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002628 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2629 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2630 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2631Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
2632</td>
2633 </tr>
2634 <tr style='background-color: #f0f0f0; '>
2635 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2636 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2637 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2638Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002639</td>
Cary Clark12799e12017-07-28 15:18:29 -04002640 </tr>
2641 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002642 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2643 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2644 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2645equivalent to the largest value for Stroke_Join</td>
2646 </tr>
2647 <tr style='background-color: #f0f0f0; '>
2648 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2649 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2650 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2651<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 -05002652</td>
Cary Clark12799e12017-07-28 15:18:29 -04002653 </tr>
2654 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002655 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2656 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2657 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2658May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002659</td>
Cary Clark12799e12017-07-28 15:18:29 -04002660 </tr>
2661</table>
2662
2663### Example
2664
2665<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2666
2667### See Also
2668
Cary Clark682c58d2018-05-16 07:07:07 -04002669<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 -04002670
Cary Clark682c58d2018-05-16 07:07:07 -04002671<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002672
2673---
Cary Clark12799e12017-07-28 15:18:29 -04002674
Cary Clark682c58d2018-05-16 07:07:07 -04002675<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2676<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002677</pre>
2678
Cary Clark80247e52018-07-11 16:18:41 -04002679Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002680
2681### Return Value
2682
Cary Clark09d80c02018-10-31 12:14:03 -04002683one 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 -04002684
2685### Example
2686
Cary Clark7f644ec2018-07-19 10:50:44 -04002687<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002688
2689#### Example Output
2690
2691~~~~
2692kMiter_Join == default stroke join
2693~~~~
2694
2695</fiddle-embed></div>
2696
2697### See Also
2698
Cary Clark682c58d2018-05-16 07:07:07 -04002699<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002700
Cary Clark682c58d2018-05-16 07:07:07 -04002701<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002702
2703---
Cary Clark12799e12017-07-28 15:18:29 -04002704
Cary Clark682c58d2018-05-16 07:07:07 -04002705<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2706void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002707</pre>
2708
Cary Clark80247e52018-07-11 16:18:41 -04002709Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002710
2711### Parameters
2712
Cary Clark682c58d2018-05-16 07:07:07 -04002713<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002714 <td>one of: <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>, <a href='#SkPaint_kRound_Join'>kRound_Join</a>, <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>;</td>
Cary Clark12799e12017-07-28 15:18:29 -04002715 </tr>
2716</table>
2717
Cary Clark09d80c02018-10-31 12:14:03 -04002718otherwise, has no effect
2719
Cary Clark12799e12017-07-28 15:18:29 -04002720### Example
2721
2722<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2723
2724#### Example Output
2725
2726~~~~
2727kMiter_Join == paint.getStrokeJoin()
2728~~~~
2729
2730</fiddle-embed></div>
2731
2732### See Also
2733
Cary Clark682c58d2018-05-16 07:07:07 -04002734<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002735
Cary Clark12799e12017-07-28 15:18:29 -04002736### See Also
2737
Cary Clark682c58d2018-05-16 07:07:07 -04002738<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002739
Cary Clarka90ea222018-10-16 10:30:28 -04002740<a name='Fill_Path'></a>
2741
2742---
Cary Clark08895c42018-02-01 09:37:32 -05002743
Cary Clark682c58d2018-05-16 07:07:07 -04002744<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 -04002745
Cary Clark682c58d2018-05-16 07:07:07 -04002746If <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
2747replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2748destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002749
Cary Clark682c58d2018-05-16 07:07:07 -04002750Fill <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
2751the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002752
Cary Clark682c58d2018-05-16 07:07:07 -04002753If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
2754and <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>,
2755and <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 -04002756
Cary Clark682c58d2018-05-16 07:07:07 -04002757Fill <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 -04002758
Cary Clark682c58d2018-05-16 07:07:07 -04002759If 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 -04002760returns false since <a href='#Hairline'>Hairline</a> has no filled equivalent.
2761
2762### See Also
2763
2764<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 -04002765
Cary Clark682c58d2018-05-16 07:07:07 -04002766<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002767
2768---
Cary Clark12799e12017-07-28 15:18:29 -04002769
Cary Clark682c58d2018-05-16 07:07:07 -04002770<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2771bool <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 -04002772</pre>
2773
Cary Clark09d80c02018-10-31 12:14:03 -04002774Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002775
2776### Parameters
2777
Cary Clark682c58d2018-05-16 07:07:07 -04002778<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002779 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002780 </tr>
2781 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002782 <td>resulting <a href='SkPath_Reference#SkPath'>SkPath</a>; may be the same as <a href='#SkPaint_getFillPath_src'>src</a>, but may not be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002783 </tr>
2784 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002785 <td>optional limit passed to <a href='undocumented#SkPathEffect'>SkPathEffect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04002786 </tr>
2787 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002788 <td>if > 1, increase precision, else if (0 < <a href='#SkPaint_getFillPath_resScale'>resScale</a> < 1) reduce precision</td>
Cary Clark12799e12017-07-28 15:18:29 -04002789 </tr>
2790</table>
2791
Cary Clark09d80c02018-10-31 12:14:03 -04002792to favor speed and <a href='undocumented#Size'>size</a>
2793
Cary Clark12799e12017-07-28 15:18:29 -04002794### Return Value
2795
Cary Clark09d80c02018-10-31 12:14:03 -04002796true if the <a href='SkPath_Reference#Path'>path</a> represents <a href='#Style_Fill'>style fill</a>, or false if it represents hairline
Cary Clark12799e12017-07-28 15:18:29 -04002797
2798### Example
2799
Cary Clark682c58d2018-05-16 07:07:07 -04002800<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.
2801At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002802At the highest precision, the filled path has high fidelity compared to the original stroke.
2803</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002804
Cary Clark682c58d2018-05-16 07:07:07 -04002805<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002806
Cary Clarka90ea222018-10-16 10:30:28 -04002807---
2808
Cary Clark682c58d2018-05-16 07:07:07 -04002809<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2810bool <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 -04002811</pre>
2812
Cary Clark09d80c02018-10-31 12:14:03 -04002813Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002814
Cary Clark09d80c02018-10-31 12:14:03 -04002815Replaces <a href='#SkPaint_getFillPath_2_dst'>dst</a> with the <a href='#SkPaint_getFillPath_2_src'>src</a> <a href='SkPath_Reference#Path'>path</a> modified by <a href='undocumented#SkPathEffect'>SkPathEffect</a> and <a href='#Style_Stroke'>style stroke</a>.
2816<a href='undocumented#SkPathEffect'>SkPathEffect</a>, if any, is not culled. <a href='#Stroke_Width'>stroke width</a> is created with default precision.
Cary Clark12799e12017-07-28 15:18:29 -04002817
2818### Parameters
2819
Cary Clark682c58d2018-05-16 07:07:07 -04002820<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002821 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002822 </tr>
2823 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002824 <td>resulting <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='#SkPaint_getFillPath_2_dst'>dst</a> may be the same as <a href='#SkPaint_getFillPath_2_src'>src</a>, but may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04002825 </tr>
2826</table>
2827
2828### Return Value
2829
Cary Clark09d80c02018-10-31 12:14:03 -04002830true if the <a href='SkPath_Reference#Path'>path</a> represents <a href='#Style_Fill'>style fill</a>, or false if it represents hairline
Cary Clark12799e12017-07-28 15:18:29 -04002831
2832### Example
2833
2834<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2835
Cary Clarka90ea222018-10-16 10:30:28 -04002836<a name='Shader_Methods'></a>
2837
Cary Clark12799e12017-07-28 15:18:29 -04002838---
2839
Cary Clark682c58d2018-05-16 07:07:07 -04002840<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2841<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
2842If <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 -04002843
Cary Clark682c58d2018-05-16 07:07:07 -04002844<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>.
2845If <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 -04002846the fill.
2847
Cary Clark682c58d2018-05-16 07:07:07 -04002848The 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 -04002849
2850### Example
2851
2852<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2853
Cary Clark682c58d2018-05-16 07:07:07 -04002854If <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 -04002855
2856### Example
2857
skia-bookmaker525f9a92018-05-03 06:27:39 +00002858<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002859
Cary Clark682c58d2018-05-16 07:07:07 -04002860<a name='SkPaint_getShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002861
2862---
Cary Clark12799e12017-07-28 15:18:29 -04002863
Cary Clark682c58d2018-05-16 07:07:07 -04002864<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2865<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002866</pre>
2867
Cary Clark09d80c02018-10-31 12:14:03 -04002868Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002869
Cary Clark09d80c02018-10-31 12:14:03 -04002870Does not alter <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002871
2872### Return Value
2873
Cary Clark09d80c02018-10-31 12:14:03 -04002874<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002875
2876### Example
2877
2878<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2879
2880#### Example Output
2881
2882~~~~
2883nullptr == shader
2884nullptr != shader
2885~~~~
2886
2887</fiddle-embed></div>
2888
Cary Clark682c58d2018-05-16 07:07:07 -04002889<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002890
2891---
Cary Clark12799e12017-07-28 15:18:29 -04002892
Cary Clark682c58d2018-05-16 07:07:07 -04002893<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2894<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 -04002895</pre>
2896
Cary Clark09d80c02018-10-31 12:14:03 -04002897Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002898
Cary Clark09d80c02018-10-31 12:14:03 -04002899Increases <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002900
2901### Return Value
2902
Cary Clark09d80c02018-10-31 12:14:03 -04002903<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002904
2905### Example
2906
2907<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2908
2909#### Example Output
2910
2911~~~~
2912shader unique: true
2913shader unique: false
2914~~~~
2915
2916</fiddle-embed></div>
2917
Cary Clark682c58d2018-05-16 07:07:07 -04002918<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002919
2920---
Cary Clark12799e12017-07-28 15:18:29 -04002921
Cary Clark682c58d2018-05-16 07:07:07 -04002922<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2923void <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 -04002924</pre>
2925
Cary Clark09d80c02018-10-31 12:14:03 -04002926Sets optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002927
Cary Clark09d80c02018-10-31 12:14:03 -04002928Sets <a href='undocumented#SkShader'>SkShader</a> to <a href='#SkPaint_setShader_shader'>shader</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous <a href='undocumented#SkShader'>SkShader</a>.
2929Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002930
2931### Parameters
2932
Cary Clark682c58d2018-05-16 07:07:07 -04002933<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002934 <td>how geometry is filled with <a href='SkColor_Reference#Color'>color</a>; if nullptr, <a href='SkColor_Reference#Color'>color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002935 </tr>
2936</table>
2937
2938### Example
2939
skia-bookmakere0a458f2018-07-16 05:29:00 +00002940<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002941
Cary Clarka90ea222018-10-16 10:30:28 -04002942<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002943
Cary Clarka90ea222018-10-16 10:30:28 -04002944---
Cary Clark08895c42018-02-01 09:37:32 -05002945
Cary Clark682c58d2018-05-16 07:07:07 -04002946<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
Cary Clark224c7002018-06-27 11:00:21 -04002947<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 -04002948If <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 -04002949
Cary Clark682c58d2018-05-16 07:07:07 -04002950The 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 -04002951
2952### Example
2953
2954<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2955
Cary Clark682c58d2018-05-16 07:07:07 -04002956<a name='SkPaint_getColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002957
2958---
Cary Clark12799e12017-07-28 15:18:29 -04002959
Cary Clark682c58d2018-05-16 07:07:07 -04002960<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2961<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002962</pre>
2963
Cary Clark09d80c02018-10-31 12:14:03 -04002964Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
2965Does not alter <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002966
2967### Return Value
2968
Cary Clark09d80c02018-10-31 12:14:03 -04002969<a href='undocumented#SkColorFilter'>SkColorFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002970
2971### Example
2972
2973<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2974
2975#### Example Output
2976
2977~~~~
2978nullptr == color filter
2979nullptr != color filter
2980~~~~
2981
2982</fiddle-embed></div>
2983
Cary Clark682c58d2018-05-16 07:07:07 -04002984<a name='SkPaint_refColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002985
2986---
Cary Clark12799e12017-07-28 15:18:29 -04002987
Cary Clark682c58d2018-05-16 07:07:07 -04002988<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2989<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 -04002990</pre>
2991
Cary Clark09d80c02018-10-31 12:14:03 -04002992Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
2993Increases <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002994
2995### Return Value
2996
Cary Clark09d80c02018-10-31 12:14:03 -04002997<a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002998
2999### Example
3000
3001<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
3002
3003#### Example Output
3004
3005~~~~
3006color filter unique: true
3007color filter unique: false
3008~~~~
3009
3010</fiddle-embed></div>
3011
Cary Clark682c58d2018-05-16 07:07:07 -04003012<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003013
3014---
Cary Clark12799e12017-07-28 15:18:29 -04003015
Cary Clark682c58d2018-05-16 07:07:07 -04003016<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3017void <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 -04003018</pre>
3019
Cary Clark09d80c02018-10-31 12:14:03 -04003020Sets <a href='undocumented#SkColorFilter'>SkColorFilter</a> to filter, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3021<a href='undocumented#SkColorFilter'>SkColorFilter</a>. Pass nullptr to clear <a href='undocumented#SkColorFilter'>SkColorFilter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003022
Cary Clark09d80c02018-10-31 12:14:03 -04003023Increments filter <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003024
3025### Parameters
3026
Cary Clark682c58d2018-05-16 07:07:07 -04003027<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003028 <td><a href='undocumented#SkColorFilter'>SkColorFilter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003029 </tr>
3030</table>
3031
3032### Example
3033
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003034<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003035
Cary Clarka90ea222018-10-16 10:30:28 -04003036<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003037
Cary Clarka90ea222018-10-16 10:30:28 -04003038---
Cary Clark08895c42018-02-01 09:37:32 -05003039
Cary Clark224c7002018-06-27 11:00:21 -04003040<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3041The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003042over the destination color.
3043
3044### Example
3045
Cary Clark83647062018-07-18 16:21:51 -04003046<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003047
3048### See Also
3049
Cary Clark224c7002018-06-27 11:00:21 -04003050<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003051
Cary Clark682c58d2018-05-16 07:07:07 -04003052<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003053
3054---
Cary Clark12799e12017-07-28 15:18:29 -04003055
Cary Clark682c58d2018-05-16 07:07:07 -04003056<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003057<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003058</pre>
3059
Cary Clark09d80c02018-10-31 12:14:03 -04003060Returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>.
3061By default, returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003062
3063### Return Value
3064
Cary Clark09d80c02018-10-31 12:14:03 -04003065mode used to combine source <a href='SkColor_Reference#Color'>color</a> with destination <a href='SkColor_Reference#Color'>color</a>
Cary Clark12799e12017-07-28 15:18:29 -04003066
3067### Example
3068
skia-bookmaker525f9a92018-05-03 06:27:39 +00003069<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003070
3071#### Example Output
3072
3073~~~~
3074kSrcOver == getBlendMode
3075kSrcOver != getBlendMode
3076~~~~
3077
3078</fiddle-embed></div>
3079
Cary Clark682c58d2018-05-16 07:07:07 -04003080<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003081
3082---
Cary Clark12799e12017-07-28 15:18:29 -04003083
Cary Clark682c58d2018-05-16 07:07:07 -04003084<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3085bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003086</pre>
3087
Cary Clark09d80c02018-10-31 12:14:03 -04003088Returns true if <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> is <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04003089
3090### Return Value
3091
Cary Clark09d80c02018-10-31 12:14:03 -04003092true if <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> is <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003093
3094### Example
3095
3096<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3097
3098#### Example Output
3099
3100~~~~
3101isSrcOver == true
3102isSrcOver != true
3103~~~~
3104
3105</fiddle-embed></div>
3106
Cary Clark682c58d2018-05-16 07:07:07 -04003107<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003108
3109---
Cary Clark12799e12017-07-28 15:18:29 -04003110
Cary Clark682c58d2018-05-16 07:07:07 -04003111<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003112void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003113</pre>
3114
Cary Clark09d80c02018-10-31 12:14:03 -04003115Sets <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003116Does not check for valid input.
3117
3118### Parameters
3119
Cary Clark682c58d2018-05-16 07:07:07 -04003120<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003121 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source <a href='SkColor_Reference#Color'>color</a> and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003122 </tr>
3123</table>
3124
3125### Example
3126
3127<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3128
3129#### Example Output
3130
3131~~~~
3132isSrcOver == true
3133isSrcOver != true
3134~~~~
3135
3136</fiddle-embed></div>
3137
Cary Clarka90ea222018-10-16 10:30:28 -04003138<a name='Path_Effect_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003139
Cary Clarka90ea222018-10-16 10:30:28 -04003140---
Cary Clark08895c42018-02-01 09:37:32 -05003141
Cary Clark682c58d2018-05-16 07:07:07 -04003142<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3143<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3144If <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 -04003145
3146### Example
3147
3148<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3149
3150### See Also
3151
Cary Clark682c58d2018-05-16 07:07:07 -04003152<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003153
Cary Clark682c58d2018-05-16 07:07:07 -04003154<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003155
3156---
Cary Clark12799e12017-07-28 15:18:29 -04003157
Cary Clark682c58d2018-05-16 07:07:07 -04003158<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3159<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003160</pre>
3161
Cary Clark09d80c02018-10-31 12:14:03 -04003162Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
3163Does not alter <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003164
3165### Return Value
3166
Cary Clark09d80c02018-10-31 12:14:03 -04003167<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003168
3169### Example
3170
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003171<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003172
3173#### Example Output
3174
3175~~~~
3176nullptr == path effect
3177nullptr != path effect
3178~~~~
3179
3180</fiddle-embed></div>
3181
Cary Clark682c58d2018-05-16 07:07:07 -04003182<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003183
3184---
Cary Clark12799e12017-07-28 15:18:29 -04003185
Cary Clark682c58d2018-05-16 07:07:07 -04003186<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3187<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 -04003188</pre>
3189
Cary Clark09d80c02018-10-31 12:14:03 -04003190Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
3191Increases <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003192
3193### Return Value
3194
Cary Clark09d80c02018-10-31 12:14:03 -04003195<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003196
3197### Example
3198
Cary Clark83647062018-07-18 16:21:51 -04003199<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003200
3201#### Example Output
3202
3203~~~~
3204path effect unique: true
3205path effect unique: false
3206~~~~
3207
3208</fiddle-embed></div>
3209
Cary Clark682c58d2018-05-16 07:07:07 -04003210<a name='SkPaint_setPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003211
3212---
Cary Clark12799e12017-07-28 15:18:29 -04003213
Cary Clark682c58d2018-05-16 07:07:07 -04003214<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3215void <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 -04003216</pre>
3217
Cary Clark09d80c02018-10-31 12:14:03 -04003218Sets <a href='undocumented#SkPathEffect'>SkPathEffect</a> to <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3219<a href='undocumented#SkPathEffect'>SkPathEffect</a>. Pass nullptr to leave the <a href='SkPath_Reference#Path'>path</a> geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003220
Cary Clark09d80c02018-10-31 12:14:03 -04003221Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003222
3223### Parameters
3224
Cary Clark682c58d2018-05-16 07:07:07 -04003225<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003226 <td>replace <a href='SkPath_Reference#SkPath'>SkPath</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003227 </tr>
3228</table>
3229
3230### Example
3231
3232<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3233
Cary Clarka90ea222018-10-16 10:30:28 -04003234<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003235
Cary Clarka90ea222018-10-16 10:30:28 -04003236---
Cary Clark08895c42018-02-01 09:37:32 -05003237
Cary Clark682c58d2018-05-16 07:07:07 -04003238<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3239<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003240
Cary Clark682c58d2018-05-16 07:07:07 -04003241<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3242creating 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 -04003243modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003244
3245### Example
3246
Cary Clark681287e2018-03-16 11:34:15 -04003247<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003248
Cary Clark682c58d2018-05-16 07:07:07 -04003249<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003250
3251---
Cary Clark12799e12017-07-28 15:18:29 -04003252
Cary Clark682c58d2018-05-16 07:07:07 -04003253<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3254<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003255</pre>
3256
Cary Clark09d80c02018-10-31 12:14:03 -04003257Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
3258Does not alter <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003259
3260### Return Value
3261
Cary Clark09d80c02018-10-31 12:14:03 -04003262<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003263
3264### Example
3265
Cary Clark681287e2018-03-16 11:34:15 -04003266<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003267
3268#### Example Output
3269
3270~~~~
3271nullptr == mask filter
3272nullptr != mask filter
3273~~~~
3274
3275</fiddle-embed></div>
3276
Cary Clark682c58d2018-05-16 07:07:07 -04003277<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003278
3279---
Cary Clark12799e12017-07-28 15:18:29 -04003280
Cary Clark682c58d2018-05-16 07:07:07 -04003281<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3282<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 -04003283</pre>
3284
Cary Clark09d80c02018-10-31 12:14:03 -04003285Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003286
Cary Clark09d80c02018-10-31 12:14:03 -04003287Increases <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003288
3289### Return Value
3290
Cary Clark09d80c02018-10-31 12:14:03 -04003291<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003292
3293### Example
3294
Cary Clark83647062018-07-18 16:21:51 -04003295<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003296
3297#### Example Output
3298
3299~~~~
3300mask filter unique: true
3301mask filter unique: false
3302~~~~
3303
3304</fiddle-embed></div>
3305
Cary Clark682c58d2018-05-16 07:07:07 -04003306<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003307
3308---
Cary Clark12799e12017-07-28 15:18:29 -04003309
Cary Clark682c58d2018-05-16 07:07:07 -04003310<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3311void <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 -04003312</pre>
3313
Cary Clark09d80c02018-10-31 12:14:03 -04003314Sets <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> to <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3315<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>. Pass nullptr to clear <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> and leave <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> effect on
3316<a href='undocumented#Mask_Alpha'>mask alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003317
Cary Clark09d80c02018-10-31 12:14:03 -04003318Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003319
3320### Parameters
3321
Cary Clark682c58d2018-05-16 07:07:07 -04003322<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3323 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003324 </tr>
3325</table>
3326
3327### Example
3328
Cary Clark681287e2018-03-16 11:34:15 -04003329<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003330
Cary Clarka90ea222018-10-16 10:30:28 -04003331<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003332
Cary Clarka90ea222018-10-16 10:30:28 -04003333---
Cary Clark08895c42018-02-01 09:37:32 -05003334
Cary Clark682c58d2018-05-16 07:07:07 -04003335<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
3336<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
3337The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003338implementation.
3339
3340### Example
3341
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003342<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003343
Cary Clark682c58d2018-05-16 07:07:07 -04003344<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003345
3346---
Cary Clark12799e12017-07-28 15:18:29 -04003347
Cary Clark682c58d2018-05-16 07:07:07 -04003348<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3349<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003350</pre>
3351
Cary Clark09d80c02018-10-31 12:14:03 -04003352Returns <a href='undocumented#SkTypeface'>SkTypeface</a> if set, or nullptr.
3353Does not alter <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003354
3355### Return Value
3356
Cary Clark09d80c02018-10-31 12:14:03 -04003357<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003358
3359### Example
3360
Cary Clarkf9603982018-07-17 08:20:27 -04003361<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003362
3363#### Example Output
3364
3365~~~~
3366nullptr == typeface
3367nullptr != typeface
3368~~~~
3369
3370</fiddle-embed></div>
3371
Cary Clark682c58d2018-05-16 07:07:07 -04003372<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003373
3374---
Cary Clark12799e12017-07-28 15:18:29 -04003375
Cary Clark682c58d2018-05-16 07:07:07 -04003376<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3377<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 -04003378</pre>
3379
Cary Clark09d80c02018-10-31 12:14:03 -04003380Increases <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003381
3382### Return Value
3383
Cary Clark09d80c02018-10-31 12:14:03 -04003384<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003385
3386### Example
3387
Cary Clark83647062018-07-18 16:21:51 -04003388<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003389
3390#### Example Output
3391
3392~~~~
3393typeface1 != typeface2
3394typeface1 == typeface2
3395~~~~
3396
3397</fiddle-embed></div>
3398
Cary Clark682c58d2018-05-16 07:07:07 -04003399<a name='SkPaint_setTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003400
3401---
Cary Clark12799e12017-07-28 15:18:29 -04003402
Cary Clark682c58d2018-05-16 07:07:07 -04003403<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3404void <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 -04003405</pre>
3406
Cary Clark09d80c02018-10-31 12:14:03 -04003407Sets <a href='undocumented#SkTypeface'>SkTypeface</a> to <a href='#SkPaint_setTypeface_typeface'>typeface</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous <a href='undocumented#SkTypeface'>SkTypeface</a>.
3408Pass nullptr to clear <a href='undocumented#SkTypeface'>SkTypeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3409<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003410
3411### Parameters
3412
Cary Clark682c58d2018-05-16 07:07:07 -04003413<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003414 <td><a href='undocumented#Font'>font</a> and style used to draw <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003415 </tr>
3416</table>
3417
3418### Example
3419
Cary Clark71961fb2018-01-05 14:21:59 -05003420<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003421
Cary Clarka90ea222018-10-16 10:30:28 -04003422<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003423
Cary Clarka90ea222018-10-16 10:30:28 -04003424---
Cary Clark08895c42018-02-01 09:37:32 -05003425
Cary Clark682c58d2018-05-16 07:07:07 -04003426<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 -04003427with <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,
3428which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003429
Cary Clark682c58d2018-05-16 07:07:07 -04003430<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>
3431can 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.
3432<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
3433<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003434
3435### Example
3436
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003437<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003438
Cary Clark682c58d2018-05-16 07:07:07 -04003439<a name='SkPaint_getImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003440
3441---
Cary Clark12799e12017-07-28 15:18:29 -04003442
Cary Clark682c58d2018-05-16 07:07:07 -04003443<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3444<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003445</pre>
3446
Cary Clark09d80c02018-10-31 12:14:03 -04003447Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
3448Does not alter <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003449
3450### Return Value
3451
Cary Clark09d80c02018-10-31 12:14:03 -04003452<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003453
3454### Example
3455
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003456<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003457
3458#### Example Output
3459
3460~~~~
3461nullptr == image filter
3462nullptr != image filter
3463~~~~
3464
3465</fiddle-embed></div>
3466
Cary Clark682c58d2018-05-16 07:07:07 -04003467<a name='SkPaint_refImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003468
3469---
Cary Clark12799e12017-07-28 15:18:29 -04003470
Cary Clark682c58d2018-05-16 07:07:07 -04003471<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3472<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 -04003473</pre>
3474
Cary Clark09d80c02018-10-31 12:14:03 -04003475Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
3476Increases <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003477
3478### Return Value
3479
Cary Clark09d80c02018-10-31 12:14:03 -04003480<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003481
3482### Example
3483
3484<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3485
3486#### Example Output
3487
3488~~~~
3489image filter unique: true
3490image filter unique: false
3491~~~~
3492
3493</fiddle-embed></div>
3494
Cary Clark682c58d2018-05-16 07:07:07 -04003495<a name='SkPaint_setImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003496
3497---
Cary Clark12799e12017-07-28 15:18:29 -04003498
Cary Clark682c58d2018-05-16 07:07:07 -04003499<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3500void <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 -04003501</pre>
3502
Cary Clark09d80c02018-10-31 12:14:03 -04003503Sets <a href='undocumented#SkImageFilter'>SkImageFilter</a> to <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3504<a href='undocumented#SkImageFilter'>SkImageFilter</a>. Pass nullptr to clear <a href='undocumented#SkImageFilter'>SkImageFilter</a>, and remove <a href='undocumented#SkImageFilter'>SkImageFilter</a> effect
Cary Clark12799e12017-07-28 15:18:29 -04003505on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003506
Cary Clark09d80c02018-10-31 12:14:03 -04003507Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003508
3509### Parameters
3510
Cary Clark682c58d2018-05-16 07:07:07 -04003511<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003512 <td>how <a href='SkImage_Reference#SkImage'>SkImage</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003513 </tr>
3514</table>
3515
3516### Example
3517
3518<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3519
Cary Clarka90ea222018-10-16 10:30:28 -04003520<a name='Draw_Looper_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003521
Cary Clarka90ea222018-10-16 10:30:28 -04003522---
Cary Clark08895c42018-02-01 09:37:32 -05003523
Cary Clark682c58d2018-05-16 07:07:07 -04003524<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 -04003525to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003526
Cary Clark682c58d2018-05-16 07:07:07 -04003527<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3528<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3529Set <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 -04003530
3531### Example
3532
3533<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3534
Cary Clark682c58d2018-05-16 07:07:07 -04003535<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003536
3537---
Cary Clark12799e12017-07-28 15:18:29 -04003538
Cary Clark682c58d2018-05-16 07:07:07 -04003539<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3540<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003541</pre>
3542
Cary Clark09d80c02018-10-31 12:14:03 -04003543Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
3544Does not alter <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003545
3546### Return Value
3547
Cary Clark09d80c02018-10-31 12:14:03 -04003548<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003549
3550### Example
3551
3552<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3553
3554#### Example Output
3555
3556~~~~
3557nullptr == draw looper
3558nullptr != draw looper
3559~~~~
3560
3561</fiddle-embed></div>
3562
Cary Clark682c58d2018-05-16 07:07:07 -04003563<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003564
3565---
Cary Clark12799e12017-07-28 15:18:29 -04003566
Cary Clark682c58d2018-05-16 07:07:07 -04003567<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3568<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 -04003569</pre>
3570
Cary Clark09d80c02018-10-31 12:14:03 -04003571Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
3572Increases <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003573
3574### Return Value
3575
Cary Clark09d80c02018-10-31 12:14:03 -04003576<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003577
3578### Example
3579
3580<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3581
3582#### Example Output
3583
3584~~~~
3585draw looper unique: true
3586draw looper unique: false
3587~~~~
3588
3589</fiddle-embed></div>
3590
Cary Clark682c58d2018-05-16 07:07:07 -04003591<a name='SkPaint_getLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003592
3593---
Cary Clark12799e12017-07-28 15:18:29 -04003594
Cary Clark682c58d2018-05-16 07:07:07 -04003595<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3596<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003597</pre>
3598
Cary Clark682c58d2018-05-16 07:07:07 -04003599Deprecated.
3600
Cary Clark682c58d2018-05-16 07:07:07 -04003601<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003602
3603---
Cary Clark12799e12017-07-28 15:18:29 -04003604
Cary Clark682c58d2018-05-16 07:07:07 -04003605<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3606void <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 -04003607</pre>
3608
Cary Clark09d80c02018-10-31 12:14:03 -04003609Sets <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> to <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3610<a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>. Pass nullptr to clear <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> and leave <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> effect on
Cary Clark6fc50412017-09-21 12:31:06 -04003611drawing unaltered.
3612
Cary Clark09d80c02018-10-31 12:14:03 -04003613Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003614
3615### Parameters
3616
Cary Clark682c58d2018-05-16 07:07:07 -04003617<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003618 <td>iterates through drawing one or more time, altering <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003619 </tr>
3620</table>
3621
3622### Example
3623
3624<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3625
Cary Clark682c58d2018-05-16 07:07:07 -04003626<a name='SkPaint_setLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003627
3628---
Cary Clark12799e12017-07-28 15:18:29 -04003629
Cary Clark682c58d2018-05-16 07:07:07 -04003630<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3631void <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 -04003632</pre>
3633
Cary Clark682c58d2018-05-16 07:07:07 -04003634Deprecated.
3635
Cary Clarka90ea222018-10-16 10:30:28 -04003636<a name='Text_Align'></a>
3637
Cary Clarka90ea222018-10-16 10:30:28 -04003638<a name='SkPaint_Align'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003639
Cary Clarka90ea222018-10-16 10:30:28 -04003640---
Cary Clark12799e12017-07-28 15:18:29 -04003641
Cary Clarka560c472017-11-27 10:44:06 -05003642<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003643 enum <a href='#SkPaint_Align'>Align</a> {
Cary Clark61313f32018-10-08 14:57:48 -04003644 <a href='#SkPaint_kLeft_Align'>kLeft_Align</a>,
3645 <a href='#SkPaint_kCenter_Align'>kCenter_Align</a>,
3646 <a href='#SkPaint_kRight_Align'>kRight_Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003647 };
Cary Clarka90ea222018-10-16 10:30:28 -04003648</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04003649
Cary Clark12799e12017-07-28 15:18:29 -04003650### Constants
3651
Cary Clark682c58d2018-05-16 07:07:07 -04003652<table style='border-collapse: collapse; width: 62.5em'>
3653 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3654<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3655<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3656 <tr style='background-color: #f0f0f0; '>
3657 <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 -04003658 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003659 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003660Deprecated.
3661
Cary Clark1a8d7622018-03-05 13:26:16 -05003662</td>
Cary Clark12799e12017-07-28 15:18:29 -04003663 </tr>
3664 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003665 <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 -04003666 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003668Deprecated.
3669
Cary Clark682c58d2018-05-16 07:07:07 -04003670</td>
3671 </tr>
3672 <tr style='background-color: #f0f0f0; '>
3673 <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 -04003674 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003676Deprecated.
3677
Cary Clark137b8742018-05-30 09:21:49 -04003678</td>
Cary Clark12799e12017-07-28 15:18:29 -04003679 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003680</table>
Cary Clark12799e12017-07-28 15:18:29 -04003681
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003682Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04003683
Cary Clarkab8fc1d2018-10-30 15:42:28 -04003684### Constants
3685
3686<table style='border-collapse: collapse; width: 62.5em'>
3687 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3688<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3689<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3690 <tr style='background-color: #f0f0f0; '>
3691 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
3692 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3693 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3694Deprecated.
3695
3696</td>
3697 </tr>
3698</table>
Cary Clark12799e12017-07-28 15:18:29 -04003699
Cary Clark682c58d2018-05-16 07:07:07 -04003700<a name='SkPaint_getTextAlign'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003701
3702---
Cary Clark12799e12017-07-28 15:18:29 -04003703
Cary Clark682c58d2018-05-16 07:07:07 -04003704<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3705<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003706</pre>
3707
Cary Clark14768f62018-10-29 20:33:51 -04003708Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04003709
Cary Clark682c58d2018-05-16 07:07:07 -04003710<a name='SkPaint_setTextAlign'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003711
3712---
Cary Clark12799e12017-07-28 15:18:29 -04003713
Cary Clark682c58d2018-05-16 07:07:07 -04003714<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3715void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04003716</pre>
3717
Cary Clark14768f62018-10-29 20:33:51 -04003718Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04003719
Cary Clarka90ea222018-10-16 10:30:28 -04003720<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003721
Cary Clarka90ea222018-10-16 10:30:28 -04003722---
Cary Clark08895c42018-02-01 09:37:32 -05003723
Cary Clark682c58d2018-05-16 07:07:07 -04003724<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
3725<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
3726<a href='#Text_Size'>Text Size</a> defaults to 12.
3727Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003728
3729### Example
3730
3731<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3732
Cary Clark682c58d2018-05-16 07:07:07 -04003733<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003734
3735---
Cary Clark12799e12017-07-28 15:18:29 -04003736
Cary Clark682c58d2018-05-16 07:07:07 -04003737<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3738<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003739</pre>
3740
Cary Clark09d80c02018-10-31 12:14:03 -04003741Returns <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003742
3743### Return Value
3744
Cary Clark09d80c02018-10-31 12:14:03 -04003745typographic height of <a href='undocumented#Text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04003746
3747### Example
3748
skia-bookmaker233c6522018-07-04 05:33:26 +00003749<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003750
Cary Clark682c58d2018-05-16 07:07:07 -04003751<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003752
3753---
Cary Clark12799e12017-07-28 15:18:29 -04003754
Cary Clark682c58d2018-05-16 07:07:07 -04003755<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3756void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003757</pre>
3758
Cary Clark09d80c02018-10-31 12:14:03 -04003759Sets <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04003760Has 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 -04003761
3762### Parameters
3763
Cary Clark682c58d2018-05-16 07:07:07 -04003764<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003765 <td>typographic height of <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003766 </tr>
3767</table>
3768
3769### Example
3770
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003771<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003772
Cary Clarka90ea222018-10-16 10:30:28 -04003773<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003774
Cary Clarka90ea222018-10-16 10:30:28 -04003775---
Cary Clark08895c42018-02-01 09:37:32 -05003776
Cary Clark682c58d2018-05-16 07:07:07 -04003777<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
3778<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003779is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003780<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
3781<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003782
3783### Example
3784
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003785<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003786
Cary Clark682c58d2018-05-16 07:07:07 -04003787<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003788
3789---
Cary Clark12799e12017-07-28 15:18:29 -04003790
Cary Clark682c58d2018-05-16 07:07:07 -04003791<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3792<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003793</pre>
3794
Cary Clark09d80c02018-10-31 12:14:03 -04003795Returns <a href='undocumented#Text'>text scale</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003796Default value is 1.
3797
3798### Return Value
3799
Cary Clark09d80c02018-10-31 12:14:03 -04003800<a href='undocumented#Text'>text</a> horizontal scale
Cary Clark12799e12017-07-28 15:18:29 -04003801
3802### Example
3803
3804<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3805
Cary Clark682c58d2018-05-16 07:07:07 -04003806<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003807
3808---
Cary Clark12799e12017-07-28 15:18:29 -04003809
Cary Clark682c58d2018-05-16 07:07:07 -04003810<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3811void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003812</pre>
3813
Cary Clark09d80c02018-10-31 12:14:03 -04003814Sets <a href='undocumented#Text'>text scale</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003815Default value is 1.
3816
3817### Parameters
3818
Cary Clark682c58d2018-05-16 07:07:07 -04003819<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003820 <td><a href='undocumented#Text'>text</a> horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003821 </tr>
3822</table>
3823
3824### Example
3825
3826<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3827
Cary Clarka90ea222018-10-16 10:30:28 -04003828<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003829
Cary Clarka90ea222018-10-16 10:30:28 -04003830---
Cary Clark08895c42018-02-01 09:37:32 -05003831
Cary Clark682c58d2018-05-16 07:07:07 -04003832<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
3833<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003834is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003835<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
3836<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003837
3838### Example
3839
3840<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3841
Cary Clark682c58d2018-05-16 07:07:07 -04003842<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003843
3844---
Cary Clark12799e12017-07-28 15:18:29 -04003845
Cary Clark682c58d2018-05-16 07:07:07 -04003846<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3847<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003848</pre>
3849
Cary Clark09d80c02018-10-31 12:14:03 -04003850Returns <a href='undocumented#Text'>text skew</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003851Default value is zero.
3852
3853### Return Value
3854
Cary Clark09d80c02018-10-31 12:14:03 -04003855additional shear on x-axis relative to y-axis
Cary Clark12799e12017-07-28 15:18:29 -04003856
3857### Example
3858
Cary Clark7f644ec2018-07-19 10:50:44 -04003859<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003860
Cary Clark682c58d2018-05-16 07:07:07 -04003861<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003862
3863---
Cary Clark12799e12017-07-28 15:18:29 -04003864
Cary Clark682c58d2018-05-16 07:07:07 -04003865<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3866void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003867</pre>
3868
Cary Clark09d80c02018-10-31 12:14:03 -04003869Sets <a href='undocumented#Text'>text skew</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003870Default value is zero.
3871
3872### Parameters
3873
Cary Clark682c58d2018-05-16 07:07:07 -04003874<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003875 <td>additional shear on x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003876 </tr>
3877</table>
3878
3879### Example
3880
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003881<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003882
Cary Clarka90ea222018-10-16 10:30:28 -04003883<a name='Text_Encoding'></a>
3884
Cary Clark12799e12017-07-28 15:18:29 -04003885---
3886
Cary Clarka90ea222018-10-16 10:30:28 -04003887<a name='SkPaint_TextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003888
Cary Clarka90ea222018-10-16 10:30:28 -04003889---
Cary Clark12799e12017-07-28 15:18:29 -04003890
Cary Clarka560c472017-11-27 10:44:06 -05003891<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003892 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
Cary Clark61313f32018-10-08 14:57:48 -04003893 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
3894 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
3895 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
3896 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003897 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003898</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003899
Cary Clark682c58d2018-05-16 07:07:07 -04003900<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
3901size, 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 -04003902
Cary Clarka560c472017-11-27 10:44:06 -05003903Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003904All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003905in the total storage required.
3906
Cary Clark682c58d2018-05-16 07:07:07 -04003907<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 -04003908
Cary Clark682c58d2018-05-16 07:07:07 -04003909<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 -04003910
Cary Clark682c58d2018-05-16 07:07:07 -04003911<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 -04003912
Cary Clark682c58d2018-05-16 07:07:07 -04003913<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 -04003914A glyph index is a 16-bit word.
3915
Cary Clark682c58d2018-05-16 07:07:07 -04003916<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 -04003917
3918### Constants
3919
Cary Clark682c58d2018-05-16 07:07:07 -04003920<table style='border-collapse: collapse; width: 62.5em'>
3921 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3922<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3923<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3924 <tr style='background-color: #f0f0f0; '>
3925 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
3926 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3927 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3928uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04003929 </tr>
3930 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003931 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
3932 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3933 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3934uses two byte words to represent most of Unicode</td>
3935 </tr>
3936 <tr style='background-color: #f0f0f0; '>
3937 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
3938 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3939 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3940uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04003941 </tr>
3942 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003943 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
3944 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3945 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3946uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04003947 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003948</table>
Cary Clark12799e12017-07-28 15:18:29 -04003949
3950### Example
3951
Cary Clarka560c472017-11-27 10:44:06 -05003952<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3953Second line is encoded in UTF-16.
3954Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04003955Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003956</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003957
Cary Clark682c58d2018-05-16 07:07:07 -04003958<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003959
3960---
Cary Clark12799e12017-07-28 15:18:29 -04003961
Cary Clark682c58d2018-05-16 07:07:07 -04003962<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3963<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003964</pre>
3965
Cary Clark09d80c02018-10-31 12:14:03 -04003966Returns <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a>.
3967<a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines how character code <a href='SkPoint_Reference#Point'>points</a> are mapped to <a href='undocumented#Font'>font</a> <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark12799e12017-07-28 15:18:29 -04003968
3969### Return Value
3970
Cary Clark09d80c02018-10-31 12:14:03 -04003971one 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
3972
3973<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003974
3975### Example
3976
skia-bookmaker525f9a92018-05-03 06:27:39 +00003977<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04003978
3979#### Example Output
3980
3981~~~~
3982kUTF8_TextEncoding == text encoding
3983kGlyphID_TextEncoding == text encoding
3984~~~~
3985
3986</fiddle-embed></div>
3987
Cary Clark682c58d2018-05-16 07:07:07 -04003988<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003989
3990---
Cary Clark12799e12017-07-28 15:18:29 -04003991
Cary Clark682c58d2018-05-16 07:07:07 -04003992<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3993void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04003994</pre>
3995
Cary Clark09d80c02018-10-31 12:14:03 -04003996Sets <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
3997<a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines how character code <a href='SkPoint_Reference#Point'>points</a> are mapped to <a href='undocumented#Font'>font</a> <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark682c58d2018-05-16 07:07:07 -04003998Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003999
4000### Parameters
4001
Cary Clark682c58d2018-05-16 07:07:07 -04004002<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004003 <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</td>
Cary Clark12799e12017-07-28 15:18:29 -04004004 </tr>
4005</table>
4006
Cary Clark09d80c02018-10-31 12:14:03 -04004007<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
4008
Cary Clark12799e12017-07-28 15:18:29 -04004009### Example
4010
Cary Clark75fd4492018-06-20 12:45:16 -04004011<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004012
4013#### Example Output
4014
4015~~~~
40164 != text encoding
4017~~~~
4018
4019</fiddle-embed></div>
4020
Cary Clarka90ea222018-10-16 10:30:28 -04004021<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004022
Cary Clarka90ea222018-10-16 10:30:28 -04004023---
Cary Clark08895c42018-02-01 09:37:32 -05004024
Cary Clark682c58d2018-05-16 07:07:07 -04004025<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>.
4026The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4027<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004028
Cary Clark682c58d2018-05-16 07:07:07 -04004029<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 -04004030X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4031are positive.
4032Y-axis values above the baseline are negative, and below the baseline are positive.
4033
4034### Example
4035
Ben Wagnere5806492017-11-09 12:08:31 -05004036<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004037
Cary Clark61313f32018-10-08 14:57:48 -04004038<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04004039
Cary Clarka90ea222018-10-16 10:30:28 -04004040---
4041
Cary Clarka560c472017-11-27 10:44:06 -05004042<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004043 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4044 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004045 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4046 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4047 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4048 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004049 };
Cary Clark12799e12017-07-28 15:18:29 -04004050
Cary Clarka90ea222018-10-16 10:30:28 -04004051 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4052 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4053 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4054 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4055 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4056 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4057 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4058 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4059 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4060 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4061 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4062 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4063 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4064 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4065 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4066 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004067
Cary Clark61313f32018-10-08 14:57:48 -04004068 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4069 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
4070 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4071 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
Cary Clark186d08f2018-04-03 08:43:27 -04004072 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004073</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004074
Cary Clark682c58d2018-05-16 07:07:07 -04004075<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
4076computed 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 -04004077not available.
4078
Cary Clark5538c132018-06-14 12:28:14 -04004079All vertical values are relative to the baseline, on a y-axis pointing down.
4080Zero is on the baseline, negative values are above the baseline, and positive
4081values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05004082
Cary Clark682c58d2018-05-16 07:07:07 -04004083<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 -04004084are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004085
Cary Clark682c58d2018-05-16 07:07:07 -04004086<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 -04004087are valid, since their value may be zero.
4088
Cary Clarka90ea222018-10-16 10:30:28 -04004089<a name='SkPaint_FontMetrics_FontMetricsFlags'></a>
4090
4091---
Cary Clark12799e12017-07-28 15:18:29 -04004092
Cary Clarka560c472017-11-27 10:44:06 -05004093<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004094 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004095 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4096 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4097 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4098 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004099 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004100</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004101
Cary Clark682c58d2018-05-16 07:07:07 -04004102<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 -04004103the underline or strikeout metric may be valid and zero.
4104Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4105
Cary Clark12799e12017-07-28 15:18:29 -04004106### Constants
4107
Cary Clark682c58d2018-05-16 07:07:07 -04004108<table style='border-collapse: collapse; width: 62.5em'>
4109 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4110<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4111<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4112 <tr style='background-color: #f0f0f0; '>
4113 <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>
4114 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4115 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4116set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004117 </tr>
4118 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004119 <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>
4120 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4121 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4122set if fUnderlinePosition is valid</td>
4123 </tr>
4124 <tr style='background-color: #f0f0f0; '>
4125 <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>
4126 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4127 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4128set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004129 </tr>
4130 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004131 <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>
4132 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4133 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4134set if fStrikeoutPosition is valid</td>
4135 </tr>
Cary Clark61313f32018-10-08 14:57:48 -04004136</table><table style='border-collapse: collapse; width: 62.5em'>
Cary Clark682c58d2018-05-16 07:07:07 -04004137
Cary Clark682c58d2018-05-16 07:07:07 -04004138 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
Cary Clark61313f32018-10-08 14:57:48 -04004139<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Member</th>
Cary Clark682c58d2018-05-16 07:07:07 -04004140<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4141 <tr style='background-color: #f0f0f0; '>
4142 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
4143 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
4144 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4145is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004146 </tr>
4147 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004148 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4149 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
4150 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004151Greatest extent above the baseline for any glyph.
4152Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004153</td>
4154 </tr>
4155 <tr style='background-color: #f0f0f0; '>
4156 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
4158 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004159Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004160Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004161</td>
4162 </tr>
4163 <tr>
4164 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4165 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
4166 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004167Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004168Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004169</td>
4170 </tr>
4171 <tr style='background-color: #f0f0f0; '>
4172 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4173 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
4174 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004175Greatest extent below the baseline for any glyph.
4176Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004177</td>
4178 </tr>
4179 <tr>
4180 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4181 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
4182 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004183Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004184Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004185</td>
4186 </tr>
4187 <tr style='background-color: #f0f0f0; '>
4188 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4189 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
4190 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004191Average character width, if it is available.
4192Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004193</td>
4194 </tr>
4195 <tr>
4196 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
4198 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4199maximum character width</td>
4200 </tr>
4201 <tr style='background-color: #f0f0f0; '>
4202 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4203 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
4204 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004205Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004206Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004207</td>
4208 </tr>
4209 <tr>
4210 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4211 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
4212 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004213Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004214Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004215</td>
4216 </tr>
4217 <tr style='background-color: #f0f0f0; '>
4218 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4219 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
4220 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004221May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004222</td>
4223 </tr>
4224 <tr>
4225 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4226 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
4227 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004228May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004229</td>
4230 </tr>
4231 <tr style='background-color: #f0f0f0; '>
4232 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4233 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
4234 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4235If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4236If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
4237</td>
4238 </tr>
4239 <tr>
4240 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4241 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
4242 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004243Position of the top of the underline stroke relative to the baseline.
4244Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004245
Cary Clark682c58d2018-05-16 07:07:07 -04004246If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4247If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
4248</td>
4249 </tr>
4250 <tr style='background-color: #f0f0f0; '>
4251 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4252 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
4253 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4254If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4255If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
4256</td>
4257 </tr>
4258 <tr>
4259 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4260 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
4261 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004262Position of the bottom of the strikeout stroke relative to the baseline.
4263Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004264
Cary Clark682c58d2018-05-16 07:07:07 -04004265If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4266If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
4267</td>
4268 </tr>
4269</table>
Cary Clark12799e12017-07-28 15:18:29 -04004270
Cary Clark682c58d2018-05-16 07:07:07 -04004271<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004272
4273---
Cary Clark12799e12017-07-28 15:18:29 -04004274
Cary Clark682c58d2018-05-16 07:07:07 -04004275<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4276bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004277</pre>
4278
Cary Clark09d80c02018-10-31 12:14:03 -04004279Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_FontMetrics'>FontMetrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004280<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,
4281return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004282
4283### Parameters
4284
Cary Clark682c58d2018-05-16 07:07:07 -04004285<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
4286 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004287 </tr>
4288</table>
4289
4290### Return Value
4291
Cary Clark09d80c02018-10-31 12:14:03 -04004292true if <a href='undocumented#Font'>font</a> specifies underline width
Cary Clark12799e12017-07-28 15:18:29 -04004293
Cary Clark682c58d2018-05-16 07:07:07 -04004294<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004295
4296---
Cary Clark12799e12017-07-28 15:18:29 -04004297
Cary Clark682c58d2018-05-16 07:07:07 -04004298<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4299bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004300</pre>
4301
Cary Clark09d80c02018-10-31 12:14:03 -04004302Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_FontMetrics'>FontMetrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004303<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,
4304return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004305
4306### Parameters
4307
Cary Clark682c58d2018-05-16 07:07:07 -04004308<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
4309 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004310 </tr>
4311</table>
4312
4313### Return Value
4314
Cary Clark09d80c02018-10-31 12:14:03 -04004315true if <a href='undocumented#Font'>font</a> specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004316
Cary Clark682c58d2018-05-16 07:07:07 -04004317<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004318
4319---
Cary Clark12799e12017-07-28 15:18:29 -04004320
Cary Clark682c58d2018-05-16 07:07:07 -04004321<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4322bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004323</pre>
4324
Cary Clark09d80c02018-10-31 12:14:03 -04004325Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_FontMetrics'>FontMetrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004326<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,
4327return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004328
4329### Parameters
4330
Cary Clark682c58d2018-05-16 07:07:07 -04004331<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
4332 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004333 </tr>
4334</table>
4335
4336### Return Value
4337
Cary Clark09d80c02018-10-31 12:14:03 -04004338true if <a href='undocumented#Font'>font</a> specifies strikeout width
Cary Clark12799e12017-07-28 15:18:29 -04004339
Cary Clark682c58d2018-05-16 07:07:07 -04004340<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004341
4342---
Cary Clark12799e12017-07-28 15:18:29 -04004343
Cary Clark682c58d2018-05-16 07:07:07 -04004344<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4345bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004346</pre>
4347
Cary Clark09d80c02018-10-31 12:14:03 -04004348Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_FontMetrics'>FontMetrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004349<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,
4350return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004351
4352### Parameters
4353
Cary Clark682c58d2018-05-16 07:07:07 -04004354<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
4355 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004356 </tr>
4357</table>
4358
4359### Return Value
4360
Cary Clark09d80c02018-10-31 12:14:03 -04004361true if <a href='undocumented#Font'>font</a> specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004362
Cary Clark682c58d2018-05-16 07:07:07 -04004363<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004364
4365---
Cary Clark12799e12017-07-28 15:18:29 -04004366
Cary Clark682c58d2018-05-16 07:07:07 -04004367<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark81f11c92018-11-01 22:24:59 -04004368<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='#SkPaint_FontMetrics'>FontMetrics</a>* metrics) const
Cary Clark12799e12017-07-28 15:18:29 -04004369</pre>
4370
Cary Clark09d80c02018-10-31 12:14:03 -04004371Returns <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_FontMetrics'>FontMetrics</a> associated with <a href='undocumented#SkTypeface'>SkTypeface</a>.
4372The return value is the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>
Cary Clark12799e12017-07-28 15:18:29 -04004373descent, ascent, and leading.
Cary Clark09d80c02018-10-31 12:14:03 -04004374If <a href='#SkPaint_getFontMetrics_metrics'>metrics</a> is not nullptr, <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_FontMetrics'>FontMetrics</a> is copied to <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>.
4375Results are scaled by <a href='#Text_Size'>text size</a> but does not take into account
4376dimensions 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>,
4377<a href='#Style_Stroke'>style stroke</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004378
4379### Parameters
4380
Cary Clark682c58d2018-05-16 07:07:07 -04004381<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004382 <td>storage for <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_FontMetrics'>FontMetrics</a> from <a href='undocumented#SkTypeface'>SkTypeface</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004383 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04004384</table>
4385
4386### Return Value
4387
Cary Clark09d80c02018-10-31 12:14:03 -04004388recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04004389
4390### Example
4391
skia-bookmaker2dc1e342018-11-02 05:33:11 +00004392<div><fiddle-embed name="59d9b8249afa1c2af6186711250ce240"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004393
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
Cary Clark09d80c02018-10-31 12:14:03 -04004406Returns the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of metrics
Cary Clark12799e12017-07-28 15:18:29 -04004407descent, ascent, and leading.
Cary Clark09d80c02018-10-31 12:14:03 -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#SkPathEffect'>SkPathEffect</a>.
4410Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>().
Cary Clark12799e12017-07-28 15:18:29 -04004411
4412### Return Value
4413
Cary Clark09d80c02018-10-31 12:14:03 -04004414recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04004415
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 Clark09d80c02018-10-31 12:14:03 -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 <a href='undocumented#Font'>font</a> <a href='undocumented#Data'>data</a>,
4441ignoring <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<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#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004443
Cary Clark09d80c02018-10-31 12:14:03 -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:
4446{ <a href='#SkPaint_FontMetrics'>FontMetrics</a>::<a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>, <a href='#SkPaint_FontMetrics'>FontMetrics</a>::<a href='#SkPaint_FontMetrics_fTop'>fTop</a>, <a href='#SkPaint_FontMetrics'>FontMetrics</a>::<a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>, <a href='#SkPaint_FontMetrics'>FontMetrics</a>::<a href='#SkPaint_FontMetrics_fBottom'>fBottom</a> }.
Cary Clark12799e12017-07-28 15:18:29 -04004447
4448### Return Value
4449
Cary Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -04004473Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into <a href='undocumented#Glyph'>glyph</a> indices.
4474Returns the number of <a href='undocumented#Glyph'>glyph</a> indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
4475<a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</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 <a href='undocumented#Glyph'>glyph</a> count.
Cary Clark12799e12017-07-28 15:18:29 -04004477
Cary Clark09d80c02018-10-31 12:14:03 -04004478Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark12799e12017-07-28 15:18:29 -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 Clark09d80c02018-10-31 12:14:03 -04004483If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a> and
Cary Clark682c58d2018-05-16 07:07:07 -04004484<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>
Cary Clark09d80c02018-10-31 12:14:03 -04004489 <td>character storage encoded with <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004490 </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>
Cary Clark09d80c02018-10-31 12:14:03 -04004495 <td>storage for <a href='undocumented#Glyph'>glyph</a> 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 Clark09d80c02018-10-31 12:14:03 -04004515Returns the number of <a href='undocumented#Glyph'>glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
4516Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</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>
Cary Clark09d80c02018-10-31 12:14:03 -04004522 <td>character storage encoded with <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004523 </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 Clark09d80c02018-10-31 12:14:03 -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 Clark09d80c02018-10-31 12:14:03 -04004553Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index.
Cary Clark682c58d2018-05-16 07:07:07 -04004554Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
Cary Clark09d80c02018-10-31 12:14:03 -04004555<a href='undocumented#SkTypeface'>SkTypeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004556
Cary Clark09d80c02018-10-31 12:14:03 -04004557If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
4558returns true if all <a href='undocumented#Glyph'>glyph</a> 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 <a href='undocumented#Glyph'>glyph</a> indices for <a href='undocumented#SkTypeface'>SkTypeface</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>
Cary Clark09d80c02018-10-31 12:14:03 -04004566 <td>array of characters or <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004567 </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 Clark09d80c02018-10-31 12:14:03 -04004575true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index
Cary Clark12799e12017-07-28 15:18:29 -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.
Cary Clark09d80c02018-10-31 12:14:03 -04004618Uses the <a href='undocumented#SkTypeface'>SkTypeface</a>, but is unaffected
4619by <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</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 Clark09d80c02018-10-31 12:14:03 -04004621Only supported on platforms that use FreeType as the <a href='undocumented#Font_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>
Cary Clark09d80c02018-10-31 12:14:03 -04004626 <td>array of indices into <a href='undocumented#Font'>font</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004627 </tr>
4628 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004629 <td>length of <a href='undocumented#Glyph'>glyph</a> array</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004630 </tr>
4631 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004632 <td>storage for character codes, one per <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004633 </tr>
4634</table>
4635
4636### Example
4637
Cary Clark09d80c02018-10-31 12:14:03 -04004638<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert UTF-8 text to glyphs; then convert glyphs 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>.
Cary Clark09d80c02018-10-31 12:14:03 -04004653Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to decode <a href='#SkPaint_measureText_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
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#SkPathEffect'>SkPathEffect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004656Returns 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>
Cary Clark09d80c02018-10-31 12:14:03 -04004662 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004663 </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>.
Cary Clark09d80c02018-10-31 12:14:03 -04004690Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to decode <a href='#SkPaint_measureText_2_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
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#SkPathEffect'>SkPathEffect</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>
Cary Clark09d80c02018-10-31 12:14:03 -04004697 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004698 </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.
Cary Clark09d80c02018-10-31 12:14:03 -04004734Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to decode <a href='#SkPaint_breakText_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
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#SkPathEffect'>SkPathEffect</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>
Cary Clark09d80c02018-10-31 12:14:03 -04004741 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004742 </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.
Cary Clark09d80c02018-10-31 12:14:03 -04004761<a href='undocumented#Line'>Line</a> under "" shows measured width after breaking text.
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 Clark09d80c02018-10-31 12:14:03 -04004772Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each <a href='undocumented#Glyph'>glyph</a> in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
4773the <a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004774Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04004775If <a href='#SkPaint_getTextWidths_widths'>widths</a> is not nullptr, <a href='#SkPaint_getTextWidths_widths'>widths</a> must be an array of <a href='undocumented#Glyph'>glyph</a> count entries.
4776if <a href='#SkPaint_getTextWidths_bounds'>bounds</a> is not nullptr, <a href='#SkPaint_getTextWidths_bounds'>bounds</a> must be an array of <a href='undocumented#Glyph'>glyph</a> count entries.
4777Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to decode <a href='#SkPaint_getTextWidths_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
4778and <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>.
4779Does not scale the advance by <a href='#Fake_Bold'>fake bold</a> or <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
4780Does include <a href='#Fake_Bold'>fake bold</a> and <a href='undocumented#SkPathEffect'>SkPathEffect</a> in the <a href='#SkPaint_getTextWidths_bounds'>bounds</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004781
4782### Parameters
4783
Cary Clark682c58d2018-05-16 07:07:07 -04004784<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004785 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004786 </tr>
4787 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
4788 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
4789 </tr>
4790 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004791 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each <a href='undocumented#Glyph'>glyph</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004792 </tr>
4793 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004794 <td>returns <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each <a href='undocumented#Glyph'>glyph</a> relative to (0, 0); may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004795 </tr>
4796</table>
4797
4798### Return Value
4799
Cary Clark09d80c02018-10-31 12:14:03 -04004800<a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004801
4802### Example
4803
Cary Clark09d80c02018-10-31 12:14:03 -04004804<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href='undocumented#Glyph'>Glyphs</a> increase for stroked text, but text advance remains the same.
4805The underlines show the text advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004806</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004807
Cary Clarka90ea222018-10-16 10:30:28 -04004808<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004809
Cary Clark682c58d2018-05-16 07:07:07 -04004810<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 -04004811
Cary Clark682c58d2018-05-16 07:07:07 -04004812<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004813
4814---
Cary Clark12799e12017-07-28 15:18:29 -04004815
Cary Clark682c58d2018-05-16 07:07:07 -04004816<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4817void <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 -04004818</pre>
4819
Cary Clark09d80c02018-10-31 12:14:03 -04004820Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
4821Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to decode <a href='#SkPaint_getTextPath_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
4822and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4823All of the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a> are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
4824Uses <a href='#SkPaint_getTextPath_x'>x</a>, <a href='#SkPaint_getTextPath_y'>y</a>, and <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Align'>Align</a> to position <a href='#SkPaint_getTextPath_path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004825
4826### Parameters
4827
Cary Clark682c58d2018-05-16 07:07:07 -04004828<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004829 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004830 </tr>
4831 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4832 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4833 </tr>
4834 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004835 <td>x-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004836 </tr>
4837 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004838 <td>y-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004839 </tr>
4840 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004841 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004842 </tr>
4843</table>
4844
4845### Example
4846
Cary Clark682c58d2018-05-16 07:07:07 -04004847<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 -05004848the offset location. The result is rendered with one draw call.
4849</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004850
Cary Clark682c58d2018-05-16 07:07:07 -04004851<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004852
4853---
Cary Clark12799e12017-07-28 15:18:29 -04004854
Cary Clark682c58d2018-05-16 07:07:07 -04004855<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4856void <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 -04004857</pre>
4858
Cary Clark09d80c02018-10-31 12:14:03 -04004859Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
4860Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to decode <a href='#SkPaint_getPosTextPath_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
4861and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4862All of the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a> are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
4863Uses <a href='#SkPaint_getPosTextPath_pos'>pos</a> array and <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Align'>Align</a> to position <a href='#SkPaint_getPosTextPath_path'>path</a>.
4864<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each <a href='undocumented#Glyph'>glyph</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004865
4866### Parameters
4867
Cary Clark682c58d2018-05-16 07:07:07 -04004868<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004869 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004870 </tr>
4871 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4872 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4873 </tr>
4874 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004875 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004876 </tr>
4877 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004878 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004879 </tr>
4880</table>
4881
4882### Example
4883
Cary Clark682c58d2018-05-16 07:07:07 -04004884<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 -05004885</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004886
Cary Clarka90ea222018-10-16 10:30:28 -04004887<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004888
Cary Clark682c58d2018-05-16 07:07:07 -04004889<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
4890of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark09d80c02018-10-31 12:14:03 -04004891underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004892
Cary Clark682c58d2018-05-16 07:07:07 -04004893<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004894
4895---
Cary Clark12799e12017-07-28 15:18:29 -04004896
Cary Clark682c58d2018-05-16 07:07:07 -04004897<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4898int <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,
4899 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004900</pre>
4901
Cary Clark682c58d2018-05-16 07:07:07 -04004902Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04004903<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of <a href='undocumented#Line'>lines</a> parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
4904The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
4905the <a href='undocumented#String'>string</a>.
4906Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to decode <a href='#SkPaint_getTextIntercepts_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
4907and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4908Uses <a href='#SkPaint_getTextIntercepts_x'>x</a>, <a href='#SkPaint_getTextIntercepts_y'>y</a>, and <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Align'>Align</a> to position <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004909
Cary Clark09d80c02018-10-31 12:14:03 -04004910Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the <a href='undocumented#Size'>size</a> of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004911
Cary Clark682c58d2018-05-16 07:07:07 -04004912<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004913
4914### Parameters
4915
Cary Clark682c58d2018-05-16 07:07:07 -04004916<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004917 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004918 </tr>
4919 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
4920 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
4921 </tr>
4922 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004923 <td>x-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004924 </tr>
4925 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004926 <td>y-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004927 </tr>
4928 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004929 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004930 </tr>
4931 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4932 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004933 </tr>
4934</table>
4935
4936### Return Value
4937
4938number of intersections; may be zero
4939
4940### Example
4941
Cary Clark1a8d7622018-03-05 13:26:16 -05004942<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
4943</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004944
Cary Clark682c58d2018-05-16 07:07:07 -04004945<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004946
4947---
Cary Clark12799e12017-07-28 15:18:29 -04004948
Cary Clark682c58d2018-05-16 07:07:07 -04004949<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4950int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
4951 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004952</pre>
4953
Cary Clark682c58d2018-05-16 07:07:07 -04004954Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04004955<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of <a href='undocumented#Line'>lines</a> parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
4956The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
4957the <a href='undocumented#String'>string</a>.
4958Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to decode <a href='#SkPaint_getPosTextIntercepts_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
4959and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4960Uses <a href='#SkPaint_getPosTextIntercepts_pos'>pos</a> array and <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Align'>Align</a> to position <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004961
Cary Clark09d80c02018-10-31 12:14:03 -04004962Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the <a href='undocumented#Size'>size</a> of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004963
Cary Clark682c58d2018-05-16 07:07:07 -04004964<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004965
4966### Parameters
4967
Cary Clark682c58d2018-05-16 07:07:07 -04004968<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004969 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004970 </tr>
4971 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
4972 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
4973 </tr>
4974 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004975 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004976 </tr>
4977 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004978 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004979 </tr>
4980 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4981 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004982 </tr>
4983</table>
4984
4985### Return Value
4986
Cary Clarka523d2d2017-08-30 08:58:10 -04004987number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004988
4989### Example
4990
Cary Clark92694be2018-10-25 08:15:36 -04004991<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 -05004992</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004993
Cary Clark682c58d2018-05-16 07:07:07 -04004994<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004995
4996---
Cary Clark12799e12017-07-28 15:18:29 -04004997
Cary Clark682c58d2018-05-16 07:07:07 -04004998<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4999int <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,
5000 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005001</pre>
5002
Cary Clark682c58d2018-05-16 07:07:07 -04005003Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04005004<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of <a href='undocumented#Line'>lines</a> parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5005The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
5006the <a href='undocumented#String'>string</a>.
5007Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to decode <a href='#SkPaint_getPosTextHIntercepts_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
5008and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
5009Uses <a href='#SkPaint_getPosTextHIntercepts_xpos'>xpos</a> array, <a href='#SkPaint_getPosTextHIntercepts_constY'>constY</a>, and <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Align'>Align</a> to position <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005010
Cary Clark09d80c02018-10-31 12:14:03 -04005011Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the <a href='undocumented#Size'>size</a> of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005012
Cary Clark682c58d2018-05-16 07:07:07 -04005013<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005014
5015### Parameters
5016
Cary Clark682c58d2018-05-16 07:07:07 -04005017<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04005018 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04005019 </tr>
5020 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5021 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5022 </tr>
5023 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04005024 <td>positions of each <a href='undocumented#Glyph'>glyph</a> on x-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04005025 </tr>
5026 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04005027 <td>position of each <a href='undocumented#Glyph'>glyph</a> on y-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04005028 </tr>
5029 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04005030 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04005031 </tr>
5032 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5033 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005034 </tr>
5035</table>
5036
5037### Return Value
5038
5039number of intersections; may be zero
5040
5041### Example
5042
Cary Clark80247e52018-07-11 16:18:41 -04005043<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 -05005044</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005045
Cary Clark682c58d2018-05-16 07:07:07 -04005046<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005047
5048---
Cary Clark12799e12017-07-28 15:18:29 -04005049
Cary Clark682c58d2018-05-16 07:07:07 -04005050<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkd2ca79c2018-08-10 13:09:13 -04005051int <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 -04005052</pre>
5053
Cary Clark682c58d2018-05-16 07:07:07 -04005054Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04005055<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of <a href='undocumented#Line'>lines</a> parallel to the <a href='undocumented#Text'>text</a> advance.
5056The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
5057the <a href='undocumented#String'>string</a>.
5058Uses <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
5059and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
5060Uses run array and <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Align'>Align</a> to position <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005061
Cary Clark09d80c02018-10-31 12:14:03 -04005062<a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> must be set to <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>.
Cary Clark3cd22cc2017-12-01 11:49:58 -05005063
Cary Clark09d80c02018-10-31 12:14:03 -04005064Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the <a href='undocumented#Size'>size</a> of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005065
Cary Clark682c58d2018-05-16 07:07:07 -04005066<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005067
5068### Parameters
5069
Cary Clark682c58d2018-05-16 07:07:07 -04005070<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04005071 <td><a href='undocumented#Glyph'>glyphs</a>, positions, and <a href='undocumented#Text'>text</a> <a href='SkPaint_Reference#Paint'>paint</a> attributes</td>
Cary Clark682c58d2018-05-16 07:07:07 -04005072 </tr>
5073 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04005074 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04005075 </tr>
5076 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5077 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005078 </tr>
5079</table>
5080
5081### Return Value
5082
5083number of intersections; may be zero
5084
5085### Example
5086
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005087<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005088
Cary Clark682c58d2018-05-16 07:07:07 -04005089<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005090
5091---
Cary Clark12799e12017-07-28 15:18:29 -04005092
Cary Clark682c58d2018-05-16 07:07:07 -04005093<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5094bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005095</pre>
5096
Cary Clark09d80c02018-10-31 12:14:03 -04005097Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing;
5098otherwise, the <a href='SkPaint_Reference#SkPaint'>SkPaint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005099
Cary Clark09d80c02018-10-31 12:14:03 -04005100Returns true if, for example, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> combined with <a href='SkColor_Reference#Alpha'>alpha</a> computes a
5101new <a href='SkColor_Reference#Alpha'>alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005102
5103### Return Value
5104
Cary Clark09d80c02018-10-31 12:14:03 -04005105true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005106
5107### Example
5108
Cary Clark83647062018-07-18 16:21:51 -04005109<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04005110
5111#### Example Output
5112
5113~~~~
5114initial nothing to draw: false
5115blend dst nothing to draw: true
5116blend src over nothing to draw: false
5117alpha 0 nothing to draw: true
5118~~~~
5119
5120</fiddle-embed></div>
5121
Cary Clarka90ea222018-10-16 10:30:28 -04005122<a name='Fast_Bounds'></a>
Cary Clark08895c42018-02-01 09:37:32 -05005123
Cary Clark61313f32018-10-08 14:57:48 -04005124Private: To be made private.
5125
Cary Clark682c58d2018-05-16 07:07:07 -04005126<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
5127<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005128
Cary Clark682c58d2018-05-16 07:07:07 -04005129<a name='SkPaint_canComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005130
5131---
Cary Clark12799e12017-07-28 15:18:29 -04005132
Cary Clark682c58d2018-05-16 07:07:07 -04005133<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5134bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005135</pre>
5136
Cary Clark61313f32018-10-08 14:57:48 -04005137Private: (to be made private)
5138
Cary Clark682c58d2018-05-16 07:07:07 -04005139Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
5140to 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 -04005141always returns false.
5142
5143### Return Value
5144
Cary Clark682c58d2018-05-16 07:07:07 -04005145true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005146
Cary Clark682c58d2018-05-16 07:07:07 -04005147<a name='SkPaint_computeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005148
5149---
Cary Clark12799e12017-07-28 15:18:29 -04005150
Cary Clark682c58d2018-05-16 07:07:07 -04005151<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5152const <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 -04005153</pre>
5154
Cary Clark61313f32018-10-08 14:57:48 -04005155Private: (to be made private)
5156
Cary Clark682c58d2018-05-16 07:07:07 -04005157Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005158raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04005159effects 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 -04005160parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04005161for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005162
Cary Clark682c58d2018-05-16 07:07:07 -04005163The 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
5164should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
5165use 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
5166<a href='SkRect_Reference#Rect'>Rect</a>.
5167
Cary Clark61313f32018-10-08 14:57:48 -04005168Private: For example:
5169 if (!path.isInverseFillType() && paint.canComputeFastBounds()) {
5170 SkRect storage;
5171 if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &storage))) {
5172 return; // do not draw the path
5173 }
5174 }
5175 // draw the path
5176
Cary Clark12799e12017-07-28 15:18:29 -04005177### Parameters
5178
Cary Clark682c58d2018-05-16 07:07:07 -04005179<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5180 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5181 </tr>
5182 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5183 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005184 </tr>
5185</table>
5186
5187### Return Value
5188
5189fast computed bounds
5190
Cary Clark682c58d2018-05-16 07:07:07 -04005191<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005192
5193---
Cary Clark12799e12017-07-28 15:18:29 -04005194
Cary Clark682c58d2018-05-16 07:07:07 -04005195<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5196const <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 -04005197</pre>
5198
Cary Clark61313f32018-10-08 14:57:48 -04005199Private: (to be made private)
5200
Cary Clark12799e12017-07-28 15:18:29 -04005201### Parameters
5202
Cary Clark682c58d2018-05-16 07:07:07 -04005203<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
5204 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5205 </tr>
5206 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
5207 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04005208 </tr>
5209</table>
5210
5211### Return Value
5212
5213fast computed bounds
5214
Cary Clark682c58d2018-05-16 07:07:07 -04005215<a name='SkPaint_doComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005216
5217---
Cary Clark12799e12017-07-28 15:18:29 -04005218
Cary Clark682c58d2018-05-16 07:07:07 -04005219<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5220const <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 -04005221</pre>
5222
Cary Clark61313f32018-10-08 14:57:48 -04005223Private: (to be made private)
5224
Cary Clark682c58d2018-05-16 07:07:07 -04005225Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
5226account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
5227altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005228
5229### Parameters
5230
Cary Clark682c58d2018-05-16 07:07:07 -04005231<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5232 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5233 </tr>
5234 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5235 <td>computed bounds of geometry</td>
5236 </tr>
5237 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
5238 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005239 </tr>
5240</table>
5241
5242### Return Value
5243
5244fast computed bounds
5245
Cary Clarka90ea222018-10-16 10:30:28 -04005246<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05005247