blob: 0383d5a711442c7da84878981b5d87465fe10a6d [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">
Cary Clark77b3f3a2018-11-07 14:59:03 -050010class <a href='SkPaint_Reference#SkPaint'>SkPaint</a> {
Cary Clark777eede2018-11-09 16:04:58 -050011public:
Cary Clark61313f32018-10-08 14:57:48 -040012 <a href='#SkPaint_empty_constructor'>SkPaint()</a>;
Cary Clark777eede2018-11-09 16:04:58 -050013 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>);
Cary Clark77b3f3a2018-11-07 14:59:03 -050014 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>);
15 ~<a href='#SkPaint_empty_constructor'>SkPaint()</a>;
Cary Clark777eede2018-11-09 16:04:58 -050016 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& operator=(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>);
17 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& operator=(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>);
18 friend bool operator==(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b);
19 friend bool operator!=(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b);
20 uint32_t <a href='#SkPaint_getHash'>getHash</a>() const;
21 void <a href='#SkPaint_reset'>reset()</a>;
Cary Clark8cc4cdc2018-11-09 23:16:58 -050022
Cary Clarkabaffd82018-11-15 08:25:12 -050023 enum Hinting : uint8_t {
24 kNo_Hinting = 0,
25 kSlight_Hinting = 1,
26 kNormal_Hinting = 2,
27 kFull_Hinting = 3,
Cary Clark8cc4cdc2018-11-09 23:16:58 -050028 };
29
Cary Clark777eede2018-11-09 16:04:58 -050030 void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel);
Cary Clarkabaffd82018-11-15 08:25:12 -050031 Hinting <a href='#SkPaint_getHinting'>getHinting</a>() const;
32 void <a href='#SkPaint_setHinting'>setHinting</a>(Hinting h);
Cary Clark8cc4cdc2018-11-09 23:16:58 -050033 <a href='undocumented#SkFontHinting'>SkFontHinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const;
Cary Clark61313f32018-10-08 14:57:48 -040034
Cary Clark777eede2018-11-09 16:04:58 -050035 enum <a href='#SkPaint_Flags'>Flags</a> {
36 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
37 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
38 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
39 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
40 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
41 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
42 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
43 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
44 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark61313f32018-10-08 14:57:48 -040045 };
46
Cary Clarkabaffd82018-11-15 08:25:12 -050047 enum ReserveFlags {
48 kUnderlineText_ReserveFlag = 0x08,
49 kStrikeThruText_ReserveFlag = 0x10,
Cary Clark61313f32018-10-08 14:57:48 -040050 };
51
Cary Clark777eede2018-11-09 16:04:58 -050052 uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const;
53 void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags);
54 bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const;
55 void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa);
56 bool <a href='#SkPaint_isDither'>isDither</a>() const;
57 void <a href='#SkPaint_setDither'>setDither</a>(bool dither);
58 bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const;
59 void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText);
60 bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const;
61 void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText);
62 bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const;
63 void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText);
64 bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const;
65 void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText);
66 bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const;
67 void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter);
68 bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const;
69 void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText);
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);
Cary Clark61313f32018-10-08 14:57:48 -040072
Cary Clark777eede2018-11-09 16:04:58 -050073 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -040074 <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
Cary Clark777eede2018-11-09 16:04:58 -050079 static constexpr int <a href='#SkPaint_kStyleCount'>kStyleCount</a> = <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> + 1;
Cary Clark61313f32018-10-08 14:57:48 -040080
Cary Clark777eede2018-11-09 16:04:58 -050081 <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> <a href='SkColor_Reference#Color'>color</a>);
86 void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& <a href='SkColor_Reference#Color'>color</a>, <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);
Cary Clark61313f32018-10-08 14:57:48 -040094
Cary Clark777eede2018-11-09 16:04:58 -050095 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -040096 <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
Cary Clark777eede2018-11-09 16:04:58 -0500103 static constexpr int <a href='#SkPaint_kCapCount'>kCapCount</a> = <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> + 1;
Cary Clark61313f32018-10-08 14:57:48 -0400104
Cary Clark777eede2018-11-09 16:04:58 -0500105 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -0400106 <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
Cary Clark777eede2018-11-09 16:04:58 -0500113 static constexpr int <a href='#SkPaint_kJoinCount'>kJoinCount</a> = <a href='#SkPaint_kLast_Join'>kLast_Join</a> + 1;
Cary Clark61313f32018-10-08 14:57:48 -0400114
Cary Clark777eede2018-11-09 16:04:58 -0500115 <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'>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>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkShader'>SkShader</a>> <a href='undocumented#Shader'>shader</a>);
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>(<a href='undocumented#sk_sp'>sk_sp</a><<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>(<a href='undocumented#sk_sp'>sk_sp</a><<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>(<a href='undocumented#sk_sp'>sk_sp</a><<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>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkTypeface'>SkTypeface</a>> <a href='undocumented#Typeface'>typeface</a>);
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>(<a href='undocumented#sk_sp'>sk_sp</a><<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;
Cary Clarkabaffd82018-11-15 08:25:12 -0500145 <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* getLooper() const;
Cary Clark777eede2018-11-09 16:04:58 -0500146 void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
Cary Clarkabaffd82018-11-15 08:25:12 -0500147 void setLooper(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
Cary Clark777eede2018-11-09 16:04:58 -0500148 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const;
149 void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize);
150 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const;
151 void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX);
152 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const;
153 void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX);
Cary Clark61313f32018-10-08 14:57:48 -0400154
Cary Clark777eede2018-11-09 16:04:58 -0500155 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -0400156 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
157 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
158 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
159 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
160 };
161
Cary Clark777eede2018-11-09 16:04:58 -0500162 <a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const;
163 void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding);
Cary Clark61313f32018-10-08 14:57:48 -0400164
Cary Clark777eede2018-11-09 16:04:58 -0500165 typedef <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> <a href='#SkPaint_FontMetrics'>FontMetrics</a>;
Cary Clark61313f32018-10-08 14:57:48 -0400166
Cary Clark777eede2018-11-09 16:04:58 -0500167 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='undocumented#SkFontMetrics'>SkFontMetrics</a>* metrics) const;
168 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const;
169 int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength,
170 <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[]) const;
171 bool <a href='#SkPaint_containsText'>containsText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const;
172 void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> <a href='undocumented#Text'>text</a>[]) const;
173 int <a href='#SkPaint_countText'>countText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const;
174 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const;
175 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length) const;
176 size_t <a href='#SkPaint_breakText'>breakText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
177 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const;
178 int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength, <a href='undocumented#SkScalar'>SkScalar</a> widths[],
179 <a href='SkRect_Reference#SkRect'>SkRect</a> bounds[] = nullptr) const;
180 void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
181 <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const;
182 void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length,
183 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const;
184 int <a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
185 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
186 int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
187 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
188 int <a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='undocumented#SkScalar'>SkScalar</a> xpos[],
189 <a href='undocumented#SkScalar'>SkScalar</a> constY, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
190 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],
191 <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
192 <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const;
193 bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const;
Cary Clarkabaffd82018-11-15 08:25:12 -0500194 bool canComputeFastBounds() const;
195 const <a href='SkRect_Reference#SkRect'>SkRect</a>& computeFastBounds(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const;
196 const <a href='SkRect_Reference#SkRect'>SkRect</a>& computeFastStrokeBounds(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig,
Cary Clark777eede2018-11-09 16:04:58 -0500197 <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const;
Cary Clarkabaffd82018-11-15 08:25:12 -0500198 const <a href='SkRect_Reference#SkRect'>SkRect</a>& doComputeFastBounds(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage,
Cary Clark777eede2018-11-09 16:04:58 -0500199 <a href='#SkPaint_Style'>Style</a> style) const;
Cary Clark61313f32018-10-08 14:57:48 -0400200};
201</pre>
202
Cary Clark777eede2018-11-09 16:04:58 -0500203<a href='SkPaint_Reference#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='SkPaint_Reference#Paint'>Paint</a> collects all
204options outside of the <a href='#Canvas_Clip'>Canvas_Clip</a> and <a href='#Canvas_Matrix'>Canvas_Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400205
Cary Clark777eede2018-11-09 16:04:58 -0500206Various options apply to <a href='undocumented#Text'>text</a>, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -0400207
Cary Clark777eede2018-11-09 16:04:58 -0500208Some options may not be implemented on all platforms; in these cases, setting
209the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
210functionality; for instance, <a href='#Text_Size'>text size</a> is identical to <a href='SkMatrix_Reference#Matrix'>matrix</a> scale.
Cary Clark12799e12017-07-28 15:18:29 -0400211
Cary Clark777eede2018-11-09 16:04:58 -0500212<a href='SkPaint_Reference#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
213pipeline and multiple pipeline stages may be affected by a single <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400214
Cary Clark777eede2018-11-09 16:04:58 -0500215<a href='SkPaint_Reference#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
216algorithms that alter the drawing geometry, <a href='SkColor_Reference#Color'>color</a>, and transparency. For instance,
217<a href='SkPaint_Reference#Paint'>Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -0400218
Cary Clark777eede2018-11-09 16:04:58 -0500219The objects contained by <a href='SkPaint_Reference#Paint'>Paint</a> are opaque, and cannot be edited outside of the <a href='SkPaint_Reference#Paint'>Paint</a>
220to affect it. The implementation is free to defer computations associated with the
221<a href='SkPaint_Reference#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
222<a href='SkPath_Reference#Path'>Path</a> geometries with <a href='#Paint_Anti_Alias'>Anti_Aliasing</a>, regardless of how <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>
223is set in <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400224
Cary Clark777eede2018-11-09 16:04:58 -0500225<a href='SkPaint_Reference#Paint'>Paint</a> describes a single <a href='SkColor_Reference#Color'>color</a>, a single <a href='undocumented#Font'>font</a>, a single <a href='SkImage_Reference#Image'>image</a> quality, and so on.
226Multiple colors are drawn either by using multiple paints or with objects like
227<a href='undocumented#Shader'>Shader</a> attached to <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400228
Cary Clark682c58d2018-05-16 07:07:07 -0400229<a name='SkPaint_empty_constructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400230
231---
Cary Clark12799e12017-07-28 15:18:29 -0400232
Cary Clark682c58d2018-05-16 07:07:07 -0400233<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500234<a href='#SkPaint_empty_constructor'>SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400235</pre>
236
Cary Clark777eede2018-11-09 16:04:58 -0500237Constructs <a href='SkPaint_Reference#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400238
239| attribute | default value |
240| --- | --- |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500241| <a href='#Paint_Anti_Alias'>Anti_Alias</a> | false |
242| <a href='#Blend_Mode'>Blend_Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a> |
243| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK_ColorBLACK</a> |
244| <a href='#Color_Alpha'>Color_Alpha</a> | 255 |
245| <a href='#Color_Filter'>Color_Filter</a> | nullptr |
246| Dither | false |
247| <a href='#Draw_Looper'>Draw_Looper</a> | nullptr |
248| <a href='#Paint_Fake_Bold'>Fake_Bold</a> | false |
249| <a href='#Filter_Quality'>Filter_Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
250| <a href='#Paint_Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> | false |
251| <a href='#Paint_Automatic_Hinting'>Automatic_Hinting</a> | false |
252| <a href='#Paint_Full_Hinting_Spacing'>Full_Hinting_Spacing</a> | false |
Cary Clarkabaffd82018-11-15 08:25:12 -0500253| Hinting | <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500254| <a href='#Image_Filter'>Image_Filter</a> | nullptr |
255| <a href='#Paint_LCD_Text'>LCD_Text</a> | false |
256| <a href='#Paint_Linear_Text'>Linear_Text</a> | false |
257| <a href='#Paint_Miter_Limit'>Miter_Limit</a> | 4 |
258| <a href='#Mask_Filter'>Mask_Filter</a> | nullptr |
259| <a href='#Path_Effect'>Path_Effect</a> | nullptr |
Cary Clark682c58d2018-05-16 07:07:07 -0400260| <a href='undocumented#Shader'>Shader</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500261| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill_Style</a> |
262| <a href='#Paint_Text_Encoding'>Text_Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a> |
263| <a href='#Paint_Text_Scale_X'>Text_Scale_X</a> | 1 |
264| <a href='#Paint_Text_Size'>Text_Size</a> | 12 |
265| <a href='#Paint_Text_Skew_X'>Text_Skew_X</a> | 0 |
Cary Clark682c58d2018-05-16 07:07:07 -0400266| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500267| <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> |
268| <a href='#Paint_Stroke_Join'>Stroke_Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter_Join</a> |
269| <a href='#Paint_Stroke_Width'>Stroke_Width</a> | 0 |
270| <a href='#Paint_Subpixel_Text'>Subpixel_Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400271
Cary Clark777eede2018-11-09 16:04:58 -0500272The flags, <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a>, hinting, and miter limit may be overridden at compile time by defining
273<a href='SkPaint_Reference#Paint'>paint</a> default values. The overrides may be included in "SkUserConfig.h" or predefined by the
274build system.
Cary Clark12799e12017-07-28 15:18:29 -0400275
276### Return Value
277
Cary Clark77b3f3a2018-11-07 14:59:03 -0500278default initialized <a href='SkPaint_Reference#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400279
280### Example
281
282<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
283
Cary Clark682c58d2018-05-16 07:07:07 -0400284<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400285
286---
Cary Clark12799e12017-07-28 15:18:29 -0400287
Cary Clark682c58d2018-05-16 07:07:07 -0400288<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500289<a href='SkPaint_Reference#SkPaint'>SkPaint</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400290</pre>
291
Cary Clark09d80c02018-10-31 12:14:03 -0400292Makes 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>,
Cary Clark777eede2018-11-09 16:04:58 -0500293<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
294between the original <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a> and the copy. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400295their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400296
Cary Clark09d80c02018-10-31 12:14:03 -0400297The 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>,
Cary Clark777eede2018-11-09 16:04:58 -0500298<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> cannot be modified after they are created.
299This 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 -0400300
301### Parameters
302
Cary Clark682c58d2018-05-16 07:07:07 -0400303<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
304 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400305 </tr>
306</table>
307
308### Return Value
309
Cary Clark77b3f3a2018-11-07 14:59:03 -0500310shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400311
312### Example
313
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000314<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400315
316#### Example Output
317
318~~~~
319SK_ColorRED == paint1.getColor()
320SK_ColorBLUE == paint2.getColor()
321~~~~
322
323</fiddle-embed></div>
324
Cary Clark682c58d2018-05-16 07:07:07 -0400325<a name='SkPaint_move_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400326
327---
Cary Clark12799e12017-07-28 15:18:29 -0400328
Cary Clark682c58d2018-05-16 07:07:07 -0400329<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500330<a href='SkPaint_Reference#SkPaint'>SkPaint</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400331</pre>
332
Cary Clarkd0530ba2017-09-14 11:25:39 -0400333Implements a move constructor to avoid increasing the reference counts
Cary Clark77b3f3a2018-11-07 14:59:03 -0500334of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400335
Cary Clark777eede2018-11-09 16:04:58 -0500336After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400337
338### Parameters
339
Cary Clark682c58d2018-05-16 07:07:07 -0400340<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
341 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400342 </tr>
343</table>
344
345### Return Value
346
Cary Clark77b3f3a2018-11-07 14:59:03 -0500347content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400348
349### Example
350
Cary Clark83647062018-07-18 16:21:51 -0400351<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -0400352
353#### Example Output
354
355~~~~
356path effect unique: true
357~~~~
358
359</fiddle-embed></div>
360
Cary Clark682c58d2018-05-16 07:07:07 -0400361<a name='SkPaint_reset'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400362
363---
Cary Clark12799e12017-07-28 15:18:29 -0400364
Cary Clark682c58d2018-05-16 07:07:07 -0400365<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500366void <a href='#SkPaint_reset'>reset()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400367</pre>
368
Cary Clark777eede2018-11-09 16:04:58 -0500369Sets all <a href='SkPaint_Reference#SkPaint'>SkPaint</a> contents to their initial values. This is equivalent to replacing
370<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 -0400371
372### Example
373
374<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
375
376#### Example Output
377
378~~~~
379paint1 == paint2
380~~~~
381
382</fiddle-embed></div>
383
Cary Clark682c58d2018-05-16 07:07:07 -0400384<a name='SkPaint_destructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400385
386---
Cary Clark12799e12017-07-28 15:18:29 -0400387
Cary Clark682c58d2018-05-16 07:07:07 -0400388<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500389~<a href='#SkPaint_empty_constructor'>SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400390</pre>
391
Cary Clark777eede2018-11-09 16:04:58 -0500392Decreases <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>,
393<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
394objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400395
Cary Clarka90ea222018-10-16 10:30:28 -0400396<a name='Management'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400397
Cary Clark682c58d2018-05-16 07:07:07 -0400398<a name='SkPaint_copy_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400399
400---
Cary Clark12799e12017-07-28 15:18:29 -0400401
Cary Clark682c58d2018-05-16 07:07:07 -0400402<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500403<a href='SkPaint_Reference#SkPaint'>SkPaint</a>& operator=(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400404</pre>
405
Cary Clark09d80c02018-10-31 12:14:03 -0400406Makes 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>,
Cary Clark777eede2018-11-09 16:04:58 -0500407<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
408between the original <a href='#SkPaint_copy_operator_paint'>paint</a> and the copy. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the
Cary Clark12799e12017-07-28 15:18:29 -0400409prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark777eede2018-11-09 16:04:58 -0500410resulting count is zero. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
411are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400412
413### Parameters
414
Cary Clark682c58d2018-05-16 07:07:07 -0400415<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
416 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400417 </tr>
418</table>
419
420### Return Value
421
Cary Clark77b3f3a2018-11-07 14:59:03 -0500422content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400423
424### Example
425
426<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
427
428#### Example Output
429
430~~~~
431SK_ColorRED == paint1.getColor()
432SK_ColorRED == paint2.getColor()
433~~~~
434
435</fiddle-embed></div>
436
Cary Clark682c58d2018-05-16 07:07:07 -0400437<a name='SkPaint_move_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400438
439---
Cary Clark12799e12017-07-28 15:18:29 -0400440
Cary Clark682c58d2018-05-16 07:07:07 -0400441<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500442<a href='SkPaint_Reference#SkPaint'>SkPaint</a>& operator=(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400443</pre>
444
Cary Clark777eede2018-11-09 16:04:58 -0500445Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
446of objects referenced by the <a href='#SkPaint_move_operator_paint'>paint</a> parameter. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -0400447prior destination are decreased by one; those objects are deleted if the resulting count
448is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400449
Cary Clark777eede2018-11-09 16:04:58 -0500450After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400451
452### Parameters
453
Cary Clark682c58d2018-05-16 07:07:07 -0400454<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
455 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400456 </tr>
457</table>
458
459### Return Value
460
Cary Clark77b3f3a2018-11-07 14:59:03 -0500461content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400462
463### Example
464
Ravi Mistry874e22b2018-07-19 03:49:13 +0000465<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -0400466
467#### Example Output
468
469~~~~
470SK_ColorRED == paint2.getColor()
471~~~~
472
473</fiddle-embed></div>
474
Cary Clark682c58d2018-05-16 07:07:07 -0400475<a name='SkPaint_equal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400476
477---
Cary Clark12799e12017-07-28 15:18:29 -0400478
Cary Clark682c58d2018-05-16 07:07:07 -0400479<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500480bool operator==(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b)
Cary Clark12799e12017-07-28 15:18:29 -0400481</pre>
482
Cary Clark777eede2018-11-09 16:04:58 -0500483Compares <a href='#SkPaint_equal_operator_a'>a</a> and <a href='#SkPaint_equal_operator_b'>b</a>, and returns true if <a href='#SkPaint_equal_operator_a'>a</a> and <a href='#SkPaint_equal_operator_b'>b</a> are equivalent. May return false
Cary Clark09d80c02018-10-31 12:14:03 -0400484if <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>,
Cary Clark777eede2018-11-09 16:04:58 -0500485<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 -0400486
487### Parameters
488
Cary Clark682c58d2018-05-16 07:07:07 -0400489<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500490 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400491 </tr>
492 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500493 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400494 </tr>
495</table>
496
497### Return Value
498
Cary Clark777eede2018-11-09 16:04:58 -0500499true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400500
501### Example
502
503<div><fiddle-embed name="7481a948e34672720337a631830586dd">
504
505#### Example Output
506
507~~~~
508paint1 == paint2
509paint1 != paint2
510~~~~
511
512</fiddle-embed></div>
513
Cary Clark06c20f32018-03-20 15:53:27 -0400514### See Also
515
Cary Clark682c58d2018-05-16 07:07:07 -0400516<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400517
Cary Clark682c58d2018-05-16 07:07:07 -0400518<a name='SkPaint_notequal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400519
520---
Cary Clark12799e12017-07-28 15:18:29 -0400521
Cary Clark682c58d2018-05-16 07:07:07 -0400522<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500523bool operator!=(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b)
Cary Clark12799e12017-07-28 15:18:29 -0400524</pre>
525
Cary Clark777eede2018-11-09 16:04:58 -0500526Compares <a href='#SkPaint_notequal_operator_a'>a</a> and <a href='#SkPaint_notequal_operator_b'>b</a>, and returns true if <a href='#SkPaint_notequal_operator_a'>a</a> and <a href='#SkPaint_notequal_operator_b'>b</a> are not equivalent. May return true
Cary Clark09d80c02018-10-31 12:14:03 -0400527if <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>,
Cary Clark777eede2018-11-09 16:04:58 -0500528<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 -0400529
530### Parameters
531
Cary Clark682c58d2018-05-16 07:07:07 -0400532<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500533 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400534 </tr>
535 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500536 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400537 </tr>
538</table>
539
540### Return Value
541
Cary Clark777eede2018-11-09 16:04:58 -0500542true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400543
544### Example
545
skia-bookmakera717ca92018-07-08 05:32:09 +0000546<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -0400547
548#### Example Output
549
550~~~~
551paint1 == paint2
552paint1 == paint2
553~~~~
554
555</fiddle-embed></div>
556
Cary Clark06c20f32018-03-20 15:53:27 -0400557### See Also
558
Cary Clark682c58d2018-05-16 07:07:07 -0400559<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400560
Cary Clark682c58d2018-05-16 07:07:07 -0400561<a name='SkPaint_getHash'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400562
563---
Cary Clark12799e12017-07-28 15:18:29 -0400564
Cary Clark682c58d2018-05-16 07:07:07 -0400565<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500566uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400567</pre>
568
Cary Clark777eede2018-11-09 16:04:58 -0500569Returns a hash generated from <a href='SkPaint_Reference#SkPaint'>SkPaint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400570Identical hashes guarantee that the paints are
571equivalent, but differing hashes do not guarantee that the paints have differing
572contents.
573
Cary Clark777eede2018-11-09 16:04:58 -0500574If If<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 -0400575their hashes are also equal.
576
577The hash returned is platform and implementation specific.
578
579### Return Value
580
581a shallow hash
582
583### Example
584
Cary Clark83647062018-07-18 16:21:51 -0400585<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -0400586
587#### Example Output
588
589~~~~
590paint1 == paint2
591paint1.getHash() == paint2.getHash()
592~~~~
593
594</fiddle-embed></div>
595
Cary Clarka90ea222018-10-16 10:30:28 -0400596<a name='Hinting'></a>
597
Cary Clark682c58d2018-05-16 07:07:07 -0400598<a name='SkPaint_setHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400599
600---
Cary Clark12799e12017-07-28 15:18:29 -0400601
Cary Clark682c58d2018-05-16 07:07:07 -0400602<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500603void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400604</pre>
605
Cary Clark777eede2018-11-09 16:04:58 -0500606Sets level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400607Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400608
Cary Clark12799e12017-07-28 15:18:29 -0400609### Parameters
610
Cary Clark682c58d2018-05-16 07:07:07 -0400611<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
Cary Clark885f1072018-11-08 13:31:39 -0500612 <td>one of: <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>,</td>
skia-bookmakere6c85752018-11-06 05:32:09 +0000613 </tr>
614</table>
615
Cary Clark885f1072018-11-08 13:31:39 -0500616<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
skia-bookmakere6c85752018-11-06 05:32:09 +0000617
618### Example
619
620<div><fiddle-embed name="197268a89c3343f600b9bade61c513ae">
621
622#### Example Output
623
624~~~~
625paint1 == paint2
626~~~~
627
628</fiddle-embed></div>
629
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500630<a name='SkPaint_getHinting'></a>
631
632---
633
634<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkabaffd82018-11-15 08:25:12 -0500635<a href='undocumented#SkFontHinting'>SkFontHinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500636</pre>
637
638Returns level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
639
640### Return Value
641
Cary Clarkabaffd82018-11-15 08:25:12 -0500642one of: <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>,
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500643
Cary Clarkabaffd82018-11-15 08:25:12 -0500644<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500645
Cary Clarkabaffd82018-11-15 08:25:12 -0500646### Example
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500647
Cary Clarkabaffd82018-11-15 08:25:12 -0500648<div><fiddle-embed name="b56b70c7ea2453c41bfa58b626953bed">
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500649
Cary Clarkabaffd82018-11-15 08:25:12 -0500650#### Example Output
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500651
Cary Clarkabaffd82018-11-15 08:25:12 -0500652~~~~
653SkFontHinting::kNormal == paint.getHinting()
654~~~~
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500655
Cary Clarkabaffd82018-11-15 08:25:12 -0500656</fiddle-embed></div>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500657
Cary Clarka90ea222018-10-16 10:30:28 -0400658<a name='Flags'></a>
659
660<a name='SkPaint_Flags'></a>
661
Cary Clark12799e12017-07-28 15:18:29 -0400662---
663
Cary Clarka560c472017-11-27 10:44:06 -0500664<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400665 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clark777eede2018-11-09 16:04:58 -0500666 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
667 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
668 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
669 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
670 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
671 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
672 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
673 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
674 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400675 };
Cary Clark12799e12017-07-28 15:18:29 -0400676</pre>
677
Cary Clark682c58d2018-05-16 07:07:07 -0400678The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
Cary Clark777eede2018-11-09 16:04:58 -0500679The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
680with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a>.
681All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
682multiple settings at once.
Cary Clark12799e12017-07-28 15:18:29 -0400683
684### Constants
685
Cary Clark682c58d2018-05-16 07:07:07 -0400686<table style='border-collapse: collapse; width: 62.5em'>
687 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
688<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
689<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
690 <tr style='background-color: #f0f0f0; '>
691 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
692 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
693 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400694mask for setting Anti_Alias</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_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
698 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
700mask for setting Dither</td>
701 </tr>
702 <tr style='background-color: #f0f0f0; '>
703 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
704 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
705 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
706mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -0400707 </tr>
708 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400709 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
710 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
711 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
712mask for setting Linear_Text</td>
713 </tr>
714 <tr style='background-color: #f0f0f0; '>
715 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
716 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
717 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
718mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400719 </tr>
720 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400721 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
722 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
723 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
724mask for setting LCD_Text</td>
725 </tr>
726 <tr style='background-color: #f0f0f0; '>
727 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
728 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
729 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
730mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400731 </tr>
732 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400733 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
734 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
736mask for setting Automatic_Hinting</td>
737 </tr>
738 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400739 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
740 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
741 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -0500742mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use
Cary Clark77b3f3a2018-11-07 14:59:03 -0500743</td>
Cary Clark12799e12017-07-28 15:18:29 -0400744 </tr>
Cary Clark777eede2018-11-09 16:04:58 -0500745<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark682c58d2018-05-16 07:07:07 -0400746</table>
Cary Clark12799e12017-07-28 15:18:29 -0400747
Cary Clark682c58d2018-05-16 07:07:07 -0400748<a name='SkPaint_getFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400749
750---
Cary Clark12799e12017-07-28 15:18:29 -0400751
Cary Clark682c58d2018-05-16 07:07:07 -0400752<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500753uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400754</pre>
755
Cary Clark777eede2018-11-09 16:04:58 -0500756Returns <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
757bit, 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 -0400758
759### Return Value
760
Cary Clark09d80c02018-10-31 12:14:03 -0400761zero, 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 -0400762
763### Example
764
765<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
766
767#### Example Output
768
769~~~~
770(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
771~~~~
772
773</fiddle-embed></div>
774
Cary Clark682c58d2018-05-16 07:07:07 -0400775<a name='SkPaint_setFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400776
777---
Cary Clark12799e12017-07-28 15:18:29 -0400778
Cary Clark682c58d2018-05-16 07:07:07 -0400779<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500780void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400781</pre>
782
Cary Clark777eede2018-11-09 16:04:58 -0500783Replaces <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.
784All <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 -0400785
786### Parameters
787
Cary Clark682c58d2018-05-16 07:07:07 -0400788<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500789 <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 -0400790 </tr>
791</table>
792
793### Example
794
795<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
796
797#### Example Output
798
799~~~~
800paint.isAntiAlias()
801paint.isDither()
802~~~~
803
804</fiddle-embed></div>
805
Cary Clarka90ea222018-10-16 10:30:28 -0400806<a name='Anti_Alias'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400807
Cary Clarka90ea222018-10-16 10:30:28 -0400808---
Cary Clark08895c42018-02-01 09:37:32 -0500809
Cary Clark777eede2018-11-09 16:04:58 -0500810<a href='#Paint_Anti_Alias'>Anti_Alias</a> drawing approximates partial <a href='undocumented#Pixel'>pixel</a> coverage with transparency.
811If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is clear, <a href='undocumented#Pixel'>pixel</a> centers contained by the shape edge are drawn opaque.
812If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is set, pixels are drawn with <a href='#Color_Alpha'>Color_Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400813
Cary Clark777eede2018-11-09 16:04:58 -0500814The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
815passing through the <a href='undocumented#Pixel'>pixel</a> center may, but is not required to, draw the <a href='undocumented#Pixel'>pixel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400816
Cary Clark777eede2018-11-09 16:04:58 -0500817<a href='#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
818active <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 -0400819
Cary Clark777eede2018-11-09 16:04:58 -0500820A platform may only support <a href='#Paint_Anti_Alias'>Anti_Aliased</a> drawing. Some GPU-backed platforms use
821<a href='undocumented#Supersampling'>Supersampling</a> to <a href='#Paint_Anti_Alias'>Anti_Alias</a> all drawing, and have no mechanism to selectively
Cary Clark682c58d2018-05-16 07:07:07 -0400822<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400823
Cary Clark777eede2018-11-09 16:04:58 -0500824The amount of coverage computed for <a href='#Paint_Anti_Alias'>Anti_Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400825
Cary Clark777eede2018-11-09 16:04:58 -0500826<a href='#Paint_Anti_Alias'>Anti_Alias</a> is disabled by default.
827<a href='#Paint_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>
828at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400829
830### Example
831
Cary Clark777eede2018-11-09 16:04:58 -0500832<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red <a href='undocumented#Line'>line</a> is drawn with transparency on the edges to make it look smoother.
833A blue <a href='undocumented#Line'>line</a> draws only where the <a href='undocumented#Pixel'>pixel</a> centers are contained.
834The <a href='undocumented#Line'>lines</a> are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
835<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500836</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400837
Cary Clark682c58d2018-05-16 07:07:07 -0400838<a name='SkPaint_isAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400839
840---
Cary Clark12799e12017-07-28 15:18:29 -0400841
Cary Clark682c58d2018-05-16 07:07:07 -0400842<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500843bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400844</pre>
845
Cary Clark777eede2018-11-09 16:04:58 -0500846Returns 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 -0400847
Cary Clark777eede2018-11-09 16:04:58 -0500848Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400849
850### Return Value
851
Cary Clark777eede2018-11-09 16:04:58 -0500852<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400853
854### Example
855
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000856<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -0400857
858#### Example Output
859
860~~~~
861paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
862paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
863~~~~
864
865</fiddle-embed></div>
866
Cary Clark682c58d2018-05-16 07:07:07 -0400867<a name='SkPaint_setAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400868
869---
Cary Clark12799e12017-07-28 15:18:29 -0400870
Cary Clark682c58d2018-05-16 07:07:07 -0400871<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500872void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -0400873</pre>
874
Cary Clark777eede2018-11-09 16:04:58 -0500875Requests, 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 -0400876partial transparency.
877
Cary Clark777eede2018-11-09 16:04:58 -0500878Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
879Clears <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 -0400880
881### Parameters
882
Cary Clark682c58d2018-05-16 07:07:07 -0400883<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400884 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400885 </tr>
886</table>
887
888### Example
889
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000890<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -0400891
892#### Example Output
893
894~~~~
895paint1 == paint2
896~~~~
897
898</fiddle-embed></div>
899
Cary Clarka90ea222018-10-16 10:30:28 -0400900<a name='Dither'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400901
Cary Clarka90ea222018-10-16 10:30:28 -0400902---
Cary Clark08895c42018-02-01 09:37:32 -0500903
Cary Clark777eede2018-11-09 16:04:58 -0500904Dither increases fidelity by adjusting the <a href='SkColor_Reference#Color'>color</a> of adjacent pixels.
905This can help to smooth <a href='SkColor_Reference#Color'>color</a> transitions and reducing banding in gradients.
906Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
907and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
908and 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 -0400909
Cary Clark777eede2018-11-09 16:04:58 -0500910Dithering is always enabled for linear gradients drawing into
911<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>.
912Dither cannot be enabled for <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and
Cary Clark682c58d2018-05-16 07:07:07 -0400913<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 -0400914
Cary Clark777eede2018-11-09 16:04:58 -0500915Dither is disabled by default.
916Dither can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>
917at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400918
Cary Clark777eede2018-11-09 16:04:58 -0500919Some platform implementations may ignore dithering. Set <code>SK_IGNORE_GPU_DITHER</code>to ignore Dither on <a href='#GPU_Surface'>GPU_Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400920
921### Example
922
Cary Clark777eede2018-11-09 16:04:58 -0500923<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested <a href='SkColor_Reference#Color'>color</a> by
924alternating nearby colors from <a href='undocumented#Pixel'>pixel</a> to <a href='undocumented#Pixel'>pixel</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -0500925</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400926
927### Example
928
Cary Clark777eede2018-11-09 16:04:58 -0500929<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to <a href='SkColor_Reference#Color'>color</a> to smooth gradients.
930Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kPlus'>kPlus</a> exaggerates the
931dither, making it easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500932</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400933
Cary Clarka90ea222018-10-16 10:30:28 -0400934### See Also
935
936Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
937
Cary Clark682c58d2018-05-16 07:07:07 -0400938<a name='SkPaint_isDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400939
940---
Cary Clark12799e12017-07-28 15:18:29 -0400941
Cary Clark682c58d2018-05-16 07:07:07 -0400942<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500943bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400944</pre>
945
Cary Clark777eede2018-11-09 16:04:58 -0500946Returns 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 +0000947
Cary Clark777eede2018-11-09 16:04:58 -0500948Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400949
950### Return Value
951
Cary Clark777eede2018-11-09 16:04:58 -0500952<a href='#SkPaint_kDither_Flag'>kDither_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400953
954### Example
955
956<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
957
958#### Example Output
959
960~~~~
961paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
962paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
963~~~~
964
965</fiddle-embed></div>
966
Cary Clark682c58d2018-05-16 07:07:07 -0400967<a name='SkPaint_setDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400968
969---
Cary Clark12799e12017-07-28 15:18:29 -0400970
Cary Clark682c58d2018-05-16 07:07:07 -0400971<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500972void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -0400973</pre>
974
Cary Clark777eede2018-11-09 16:04:58 -0500975Requests, but does not require, to distribute <a href='SkColor_Reference#Color'>color</a> error.
Cary Clark12799e12017-07-28 15:18:29 -0400976
Cary Clark777eede2018-11-09 16:04:58 -0500977Sets <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
978Clears <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 -0400979
980### Parameters
981
Cary Clark682c58d2018-05-16 07:07:07 -0400982<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400983 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400984 </tr>
985</table>
986
987### Example
988
989<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
990
991#### Example Output
992
993~~~~
994paint1 == paint2
995~~~~
996
997</fiddle-embed></div>
998
999### See Also
1000
Cary Clark682c58d2018-05-16 07:07:07 -04001001<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001002
Cary Clarka90ea222018-10-16 10:30:28 -04001003<a name='Device_Text'></a>
1004
Cary Clark12799e12017-07-28 15:18:29 -04001005---
1006
Cary Clark777eede2018-11-09 16:04:58 -05001007<a href='#Paint_LCD_Text'>LCD_Text</a> and <a href='#Paint_Subpixel_Text'>Subpixel_Text</a> increase the precision of <a href='undocumented#Glyph'>glyph</a> position.
Cary Clark12799e12017-07-28 15:18:29 -04001008
Cary Clark777eede2018-11-09 16:04:58 -05001009When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
1010create a <a href='SkColor_Reference#Color'>color</a>, and relies
1011on the small <a href='undocumented#Size'>size</a> of the stripe and visual perception to make the <a href='SkColor_Reference#Color'>color</a> fringing imperceptible.
1012<a href='#Paint_LCD_Text'>LCD_Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1013the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001014
Cary Clark777eede2018-11-09 16:04:58 -05001015<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> uses the <a href='undocumented#Pixel'>pixel</a> transparency to represent a fractional offset.
1016As the opaqueness
1017of the <a href='SkColor_Reference#Color'>color</a> increases, the edge of the <a href='undocumented#Glyph'>glyph</a> appears to move towards the outside of the <a href='undocumented#Pixel'>pixel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001018
Cary Clark777eede2018-11-09 16:04:58 -05001019Either or both techniques can be enabled.
1020<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> are clear by default.
1021<a href='#Paint_LCD_Text'>LCD_Text</a> or <a href='#Paint_Subpixel_Text'>Subpixel_Text</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to
1022<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 -04001023
1024### Example
1025
Cary Clark777eede2018-11-09 16:04:58 -05001026<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href='#Paint_LCD_Text'>LCD_Text</a> and <a href='#Paint_Subpixel_Text'>Subpixel_Text</a>.
1027When <a href='#Paint_Subpixel_Text'>Subpixel_Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1028When <a href='#Paint_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 -05001029</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001030
Cary Clarka90ea222018-10-16 10:30:28 -04001031<a name='Linear_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001032
Cary Clark777eede2018-11-09 16:04:58 -05001033<a href='#Paint_Linear_Text'>Linear_Text</a> selects whether <a href='undocumented#Text'>text</a> is rendered as a <a href='undocumented#Glyph'>Glyph</a> or as a <a href='SkPath_Reference#Path'>Path</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001034If <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is set, it has the same effect as setting Hinting to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>.
1035If <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear, it is the same as setting Hinting to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001036
Cary Clark682c58d2018-05-16 07:07:07 -04001037<a name='SkPaint_isLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001038
1039---
Cary Clark12799e12017-07-28 15:18:29 -04001040
Cary Clark682c58d2018-05-16 07:07:07 -04001041<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001042bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001043</pre>
1044
Cary Clark777eede2018-11-09 16:04:58 -05001045Returns 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 -04001046
Cary Clark777eede2018-11-09 16:04:58 -05001047Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001048
1049### Return Value
1050
Cary Clark777eede2018-11-09 16:04:58 -05001051<a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001052
1053### Example
1054
1055<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1056
1057### See Also
1058
Cary Clarkabaffd82018-11-15 08:25:12 -05001059<a href='#SkPaint_setLinearText'>setLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001060
Cary Clark682c58d2018-05-16 07:07:07 -04001061<a name='SkPaint_setLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001062
1063---
Cary Clark12799e12017-07-28 15:18:29 -04001064
Cary Clark682c58d2018-05-16 07:07:07 -04001065<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001066void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001067</pre>
1068
Cary Clark777eede2018-11-09 16:04:58 -05001069Returns true if <a href='undocumented#Text'>text</a> is converted to <a href='SkPath_Reference#SkPath'>SkPath</a> before drawing and measuring.
1070By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001071
Cary Clark777eede2018-11-09 16:04:58 -05001072Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1073Clears <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 -04001074
1075### Parameters
1076
Cary Clark682c58d2018-05-16 07:07:07 -04001077<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001078 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001079 </tr>
1080</table>
1081
1082### Example
1083
Cary Clark83647062018-07-18 16:21:51 -04001084<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001085
1086### See Also
1087
Cary Clarkabaffd82018-11-15 08:25:12 -05001088<a href='#SkPaint_isLinearText'>isLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001089
Cary Clarka90ea222018-10-16 10:30:28 -04001090<a name='Subpixel_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001091
Cary Clark777eede2018-11-09 16:04:58 -05001092<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> uses the <a href='undocumented#Pixel'>pixel</a> transparency to represent a fractional offset.
1093As the opaqueness
1094of the <a href='SkColor_Reference#Color'>color</a> increases, the edge of the <a href='undocumented#Glyph'>glyph</a> appears to move towards the outside of the <a href='undocumented#Pixel'>pixel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001095
Cary Clark682c58d2018-05-16 07:07:07 -04001096<a name='SkPaint_isSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001097
1098---
Cary Clark12799e12017-07-28 15:18:29 -04001099
Cary Clark682c58d2018-05-16 07:07:07 -04001100<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001101bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001102</pre>
1103
Cary Clark777eede2018-11-09 16:04:58 -05001104Returns 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 -04001105
Cary Clark777eede2018-11-09 16:04:58 -05001106Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001107
1108### Return Value
1109
Cary Clark777eede2018-11-09 16:04:58 -05001110<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001111
1112### Example
1113
1114<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1115
1116#### Example Output
1117
1118~~~~
1119paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1120paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1121~~~~
1122
1123</fiddle-embed></div>
1124
Cary Clark682c58d2018-05-16 07:07:07 -04001125<a name='SkPaint_setSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001126
1127---
Cary Clark12799e12017-07-28 15:18:29 -04001128
Cary Clark682c58d2018-05-16 07:07:07 -04001129<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001130void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001131</pre>
1132
Cary Clark777eede2018-11-09 16:04:58 -05001133Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001134
Cary Clark777eede2018-11-09 16:04:58 -05001135Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1136Clears <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 -04001137
1138### Parameters
1139
Cary Clark682c58d2018-05-16 07:07:07 -04001140<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001141 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001142 </tr>
1143</table>
1144
1145### Example
1146
1147<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1148
1149#### Example Output
1150
1151~~~~
1152paint1 == paint2
1153~~~~
1154
1155</fiddle-embed></div>
1156
Cary Clarka90ea222018-10-16 10:30:28 -04001157<a name='LCD_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001158
Cary Clark777eede2018-11-09 16:04:58 -05001159When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
1160create a <a href='SkColor_Reference#Color'>color</a>, and relies
1161on the small <a href='undocumented#Size'>size</a> of the stripe and visual perception to make the <a href='SkColor_Reference#Color'>color</a> fringing imperceptible.
1162<a href='#Paint_LCD_Text'>LCD_Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1163the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001164
Cary Clark682c58d2018-05-16 07:07:07 -04001165<a name='SkPaint_isLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001166
1167---
Cary Clark12799e12017-07-28 15:18:29 -04001168
Cary Clark682c58d2018-05-16 07:07:07 -04001169<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001170bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001171</pre>
1172
Cary Clark777eede2018-11-09 16:04:58 -05001173Returns 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 -04001174
Cary Clark777eede2018-11-09 16:04:58 -05001175Returns 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 -04001176
1177### Return Value
1178
Cary Clark777eede2018-11-09 16:04:58 -05001179<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001180
1181### Example
1182
skia-bookmakera391c722018-07-09 05:28:19 +00001183<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001184
1185#### Example Output
1186
1187~~~~
1188paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1189paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1190~~~~
1191
1192</fiddle-embed></div>
1193
Cary Clark682c58d2018-05-16 07:07:07 -04001194<a name='SkPaint_setLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001195
1196---
Cary Clark12799e12017-07-28 15:18:29 -04001197
Cary Clark682c58d2018-05-16 07:07:07 -04001198<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001199void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001200</pre>
1201
Cary Clark777eede2018-11-09 16:04:58 -05001202Requests, 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 -04001203
Cary Clark777eede2018-11-09 16:04:58 -05001204Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1205Clears <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 -04001206
1207### Parameters
1208
Cary Clark682c58d2018-05-16 07:07:07 -04001209<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001210 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001211 </tr>
1212</table>
1213
1214### Example
1215
skia-bookmakere0a458f2018-07-16 05:29:00 +00001216<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001217
1218#### Example Output
1219
1220~~~~
1221paint1 == paint2
1222~~~~
1223
1224</fiddle-embed></div>
1225
Cary Clarka90ea222018-10-16 10:30:28 -04001226<a name='Font_Embedded_Bitmaps'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001227
Cary Clarka90ea222018-10-16 10:30:28 -04001228---
Cary Clark08895c42018-02-01 09:37:32 -05001229
Cary Clark777eede2018-11-09 16:04:58 -05001230<a href='#Paint_Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> allows selecting custom sized <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>Glyphs</a>.
1231<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> when set chooses an embedded <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> over an outline contained
1232in a <a href='undocumented#Font'>font</a> if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001233
Cary Clark777eede2018-11-09 16:04:58 -05001234FreeType selects the <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> is set, and selects
1235the outline <a href='undocumented#Glyph'>glyph</a> if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> is clear.
1236Windows may select the <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> but is not required to do so.
1237<a href='#OS_X'>OS_X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001238
Cary Clark777eede2018-11-09 16:04:58 -05001239<a href='#Paint_Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> is disabled by default.
1240<a href='#Paint_Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to
1241<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001242
1243### Example
1244
Cary Clarka560c472017-11-27 10:44:06 -05001245<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001246<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001247 includes an embedded bitmap Glyph at odd font sizes. This example works
1248 on platforms that use FreeType as their Font_Engine.
1249 Windows may, but is not required to, return a bitmap glyph if
1250 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1251 bitmap.allocN32Pixels(30, 15);
1252 bitmap.eraseColor(0);
1253 SkCanvas offscreen(bitmap);
1254 SkPaint paint;
1255 paint.setAntiAlias(true);
1256 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001257 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001258 for (bool embedded : { false, true}) {
1259 paint.setEmbeddedBitmapText(embedded);
1260 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1261 }
1262 canvas->drawBitmap(bitmap, 0, 0);
1263 canvas->scale(10, 10);
1264 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001265
Cary Clarka560c472017-11-27 10:44:06 -05001266</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001267
Cary Clark682c58d2018-05-16 07:07:07 -04001268<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001269
1270---
Cary Clark12799e12017-07-28 15:18:29 -04001271
Cary Clark682c58d2018-05-16 07:07:07 -04001272<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001273bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001274</pre>
1275
Cary Clark777eede2018-11-09 16:04:58 -05001276Returns true if <a href='undocumented#Font'>font</a> engine 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 -04001277
Cary Clark777eede2018-11-09 16:04:58 -05001278Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001279
1280### Return Value
1281
Cary Clark777eede2018-11-09 16:04:58 -05001282<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001283
1284### Example
1285
1286<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1287
1288#### Example Output
1289
1290~~~~
1291paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1292paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1293~~~~
1294
1295</fiddle-embed></div>
1296
Cary Clark682c58d2018-05-16 07:07:07 -04001297<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001298
1299---
Cary Clark12799e12017-07-28 15:18:29 -04001300
Cary Clark682c58d2018-05-16 07:07:07 -04001301<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001302void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001303</pre>
1304
Cary Clark777eede2018-11-09 16:04:58 -05001305Requests, 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 -04001306
Cary Clark777eede2018-11-09 16:04:58 -05001307Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1308Clears <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 -04001309
1310### Parameters
1311
Cary Clark682c58d2018-05-16 07:07:07 -04001312<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001313 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001314 </tr>
1315</table>
1316
1317### Example
1318
1319<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1320
1321#### Example Output
1322
1323~~~~
1324paint1 == paint2
1325~~~~
1326
1327</fiddle-embed></div>
1328
Cary Clarka90ea222018-10-16 10:30:28 -04001329<a name='Automatic_Hinting'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001330
Cary Clarkabaffd82018-11-15 08:25:12 -05001331If Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, <a href='#Paint_Automatic_Hinting'>Automatic_Hinting</a>
Cary Clark777eede2018-11-09 16:04:58 -05001332instructs the <a href='#Font_Manager'>Font_Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001333<a href='#Paint_Automatic_Hinting'>Automatic_Hinting</a> has no effect if Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001334<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001335
Cary Clark777eede2018-11-09 16:04:58 -05001336<a href='#Paint_Automatic_Hinting'>Automatic_Hinting</a> only affects platforms that use FreeType as the <a href='#Font_Manager'>Font_Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001337
Cary Clark682c58d2018-05-16 07:07:07 -04001338<a name='SkPaint_isAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001339
1340---
Cary Clark12799e12017-07-28 15:18:29 -04001341
Cary Clark682c58d2018-05-16 07:07:07 -04001342<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001343bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001344</pre>
1345
Cary Clarkabaffd82018-11-15 08:25:12 -05001346Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001347<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, and if platform uses FreeType as the <a href='undocumented#Font'>font</a> manager.
1348If true, instructs the <a href='undocumented#Font'>font</a> manager to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001349
Cary Clark777eede2018-11-09 16:04:58 -05001350Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001351
1352### Return Value
1353
Cary Clark777eede2018-11-09 16:04:58 -05001354<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001355
1356### Example
1357
1358<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1359
1360#### Example Output
1361
1362~~~~
1363paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1364paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1365~~~~
1366
1367</fiddle-embed></div>
1368
1369### See Also
1370
Cary Clarkabaffd82018-11-15 08:25:12 -05001371<a href='#SkPaint_setAutohinted'>setAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001372
Cary Clark682c58d2018-05-16 07:07:07 -04001373<a name='SkPaint_setAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001374
1375---
Cary Clark12799e12017-07-28 15:18:29 -04001376
Cary Clark682c58d2018-05-16 07:07:07 -04001377<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001378void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001379</pre>
1380
Cary Clark09d80c02018-10-31 12:14:03 -04001381Sets whether to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001382If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
Cary Clark777eede2018-11-09 16:04:58 -05001383and <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is set, instructs the <a href='undocumented#Font_Manager'>font manager</a> to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001384<a href='SkPaint_Reference#Automatic_Hinting'>auto-hinting</a> has no effect if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001385<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001386
Cary Clark09d80c02018-10-31 12:14:03 -04001387Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>font manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001388
Cary Clark777eede2018-11-09 16:04:58 -05001389Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1390Clears <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 -04001391
1392### Parameters
1393
Cary Clark682c58d2018-05-16 07:07:07 -04001394<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001395 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001396 </tr>
1397</table>
1398
1399### Example
1400
1401<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1402
1403### See Also
1404
Cary Clarkabaffd82018-11-15 08:25:12 -05001405<a href='#SkPaint_isAutohinted'>isAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001406
Cary Clarka90ea222018-10-16 10:30:28 -04001407<a name='Fake_Bold'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001408
Cary Clarka90ea222018-10-16 10:30:28 -04001409---
Cary Clark08895c42018-02-01 09:37:32 -05001410
Cary Clark777eede2018-11-09 16:04:58 -05001411<a href='#Paint_Fake_Bold'>Fake_Bold</a> approximates the bold <a href='undocumented#Font'>font</a> style accompanying a normal <a href='undocumented#Font'>font</a> when a bold <a href='undocumented#Font'>font</a> face
1412is not available. Skia does not provide <a href='undocumented#Font'>font</a> substitution; it is up to the client to find the
1413bold <a href='undocumented#Font'>font</a> face using the platform <a href='#Font_Manager'>Font_Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001414
Cary Clark777eede2018-11-09 16:04:58 -05001415Use <a href='#Paint_Text_Skew_X'>Text_Skew_X</a> to approximate an italic <a href='undocumented#Font'>font</a> style when the italic <a href='undocumented#Font'>font</a> face
1416is not available.
Cary Clark12799e12017-07-28 15:18:29 -04001417
Cary Clark777eede2018-11-09 16:04:58 -05001418A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
1419the <a href='undocumented#Font_Engine'>font engine</a> to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
1420by increasing the <a href='#Stroke_Width'>stroke width</a> 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 -04001421
Cary Clark777eede2018-11-09 16:04:58 -05001422<a href='#Paint_Fake_Bold'>Fake_Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001423
1424### Example
1425
1426<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1427
Cary Clark682c58d2018-05-16 07:07:07 -04001428<a name='SkPaint_isFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001429
1430---
Cary Clark12799e12017-07-28 15:18:29 -04001431
Cary Clark682c58d2018-05-16 07:07:07 -04001432<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001433bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001434</pre>
1435
Cary Clark77b3f3a2018-11-07 14:59:03 -05001436Returns true if approximate bold by increasing the stroke width when creating <a href='undocumented#Glyph'>glyph</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a>
Cary Clark12799e12017-07-28 15:18:29 -04001437from outlines.
1438
Cary Clark777eede2018-11-09 16:04:58 -05001439Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001440
1441### Return Value
1442
Cary Clark777eede2018-11-09 16:04:58 -05001443<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001444
1445### Example
1446
1447<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1448
1449#### Example Output
1450
1451~~~~
1452paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1453paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1454~~~~
1455
1456</fiddle-embed></div>
1457
Cary Clark682c58d2018-05-16 07:07:07 -04001458<a name='SkPaint_setFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001459
1460---
Cary Clark12799e12017-07-28 15:18:29 -04001461
Cary Clark682c58d2018-05-16 07:07:07 -04001462<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001463void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001464</pre>
1465
Cary Clark777eede2018-11-09 16:04:58 -05001466Increases <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 -04001467
Cary Clark777eede2018-11-09 16:04:58 -05001468Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1469Clears <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 -04001470
1471### Parameters
1472
Cary Clark682c58d2018-05-16 07:07:07 -04001473<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001474 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001475 </tr>
1476</table>
1477
1478### Example
1479
1480<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1481
1482#### Example Output
1483
1484~~~~
1485paint1 == paint2
1486~~~~
1487
1488</fiddle-embed></div>
1489
Cary Clarka90ea222018-10-16 10:30:28 -04001490<a name='Full_Hinting_Spacing'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001491
Cary Clarkabaffd82018-11-15 08:25:12 -05001492if Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, <a href='#Paint_Full_Hinting_Spacing'>Full_Hinting_Spacing</a> adjusts the character
Cary Clark777eede2018-11-09 16:04:58 -05001493spacing by the difference of the hinted and unhinted <a href='#Left_Side_Bearing'>Left_Side_Bearing</a> and
1494<a href='#Right_Side_Bearing'>Right_Side_Bearing</a>. <a href='#Paint_Full_Hinting_Spacing'>Full_Hinting_Spacing</a> only applies to platforms that use
1495FreeType as their <a href='#Font_Engine'>Font_Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001496
Cary Clark777eede2018-11-09 16:04:58 -05001497<a href='#Paint_Full_Hinting_Spacing'>Full_Hinting_Spacing</a> is not related to <a href='undocumented#Text'>text</a> kerning, where the space between
1498a specific pair of characters is adjusted using <a href='undocumented#Data'>data</a> in the <a href='undocumented#Font'>font</a> kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001499
Cary Clarka90ea222018-10-16 10:30:28 -04001500<a name='Filter_Quality_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001501
Cary Clarka90ea222018-10-16 10:30:28 -04001502---
Cary Clark08895c42018-02-01 09:37:32 -05001503
Cary Clark777eede2018-11-09 16:04:58 -05001504<a href='#Filter_Quality'>Filter_Quality</a> trades speed for <a href='SkImage_Reference#Image'>image</a> filtering when the <a href='SkImage_Reference#Image'>image</a> is scaled.
1505A lower <a href='#Filter_Quality'>Filter_Quality</a> draws faster, but has less fidelity.
1506A higher <a href='#Filter_Quality'>Filter_Quality</a> draws slower, but looks better.
1507If the <a href='SkImage_Reference#Image'>image</a> is drawn without scaling, the <a href='#Filter_Quality'>Filter_Quality</a> choice will not result
1508in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001509
Cary Clark777eede2018-11-09 16:04:58 -05001510<a href='#Filter_Quality'>Filter_Quality</a> is used in <a href='SkPaint_Reference#Paint'>Paint</a> passed as a parameter to
Cary Clark12799e12017-07-28 15:18:29 -04001511
1512<table> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001513 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmap'>drawBitmap</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001514 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001515 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmapRect'>drawBitmapRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001516 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001517 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImage'>drawImage</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001518 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001519 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImageRect'>drawImageRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001520 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001521</table>
1522
Cary Clark777eede2018-11-09 16:04:58 -05001523and when <a href='SkPaint_Reference#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 -04001524
Cary Clark777eede2018-11-09 16:04:58 -05001525<a href='#Filter_Quality'>Filter_Quality</a> is <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04001526
1527### Example
1528
skia-bookmaker525f9a92018-05-03 06:27:39 +00001529<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001530
Cary Clark682c58d2018-05-16 07:07:07 -04001531<a name='SkPaint_getFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001532
1533---
Cary Clark12799e12017-07-28 15:18:29 -04001534
Cary Clark682c58d2018-05-16 07:07:07 -04001535<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001536<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001537</pre>
1538
Cary Clark777eede2018-11-09 16:04:58 -05001539Returns <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1540draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
Cary Clark12799e12017-07-28 15:18:29 -04001541
1542### Return Value
1543
Cary Clark682c58d2018-05-16 07:07:07 -04001544one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
Cary Clark09d80c02018-10-31 12:14:03 -04001545
Cary Clark682c58d2018-05-16 07:07:07 -04001546<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001547
1548### Example
1549
1550<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1551
1552#### Example Output
1553
1554~~~~
1555kNone_SkFilterQuality == paint.getFilterQuality()
1556~~~~
1557
1558</fiddle-embed></div>
1559
Cary Clark682c58d2018-05-16 07:07:07 -04001560<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001561
1562---
Cary Clark12799e12017-07-28 15:18:29 -04001563
Cary Clark682c58d2018-05-16 07:07:07 -04001564<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001565void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001566</pre>
1567
Cary Clark777eede2018-11-09 16:04:58 -05001568Sets <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1569draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
1570Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001571
1572### Parameters
1573
Cary Clark682c58d2018-05-16 07:07:07 -04001574<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001575 <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 -04001576 </tr>
1577</table>
1578
Cary Clark09d80c02018-10-31 12:14:03 -04001579<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
1580
Cary Clark12799e12017-07-28 15:18:29 -04001581### Example
1582
1583<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1584
1585#### Example Output
1586
1587~~~~
1588kHigh_SkFilterQuality == paint.getFilterQuality()
1589~~~~
1590
1591</fiddle-embed></div>
1592
1593### See Also
1594
Cary Clark77b3f3a2018-11-07 14:59:03 -05001595<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#Image_Scaling'>Image_Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001596
Cary Clarka90ea222018-10-16 10:30:28 -04001597<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001598
Cary Clarka90ea222018-10-16 10:30:28 -04001599---
Cary Clark12799e12017-07-28 15:18:29 -04001600
Cary Clarkab2621d2018-01-30 10:08:57 -05001601| name | description |
1602| --- | --- |
Cary Clark777eede2018-11-09 16:04:58 -05001603| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='#Color_Alpha'>Color_Alpha</a> and RGB, one drawing <a href='SkColor_Reference#Color'>color</a> |
1604| <a href='#SkPaint_setColor'>setColor</a> | sets <a href='#Color_Alpha'>Color_Alpha</a> and RGB, one drawing <a href='SkColor_Reference#Color'>color</a> |
Cary Clark12799e12017-07-28 15:18:29 -04001605
Cary Clark777eede2018-11-09 16:04:58 -05001606<a href='SkColor_Reference#Color'>Color</a> specifies the red, blue, green, and <a href='#Color_Alpha'>Color_Alpha</a>
1607values used to draw a filled or stroked shape in a 32-bit value. Each component
1608occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1609All values in any combination are valid.
Cary Clarkab2621d2018-01-30 10:08:57 -05001610
Cary Clark777eede2018-11-09 16:04:58 -05001611<a href='SkColor_Reference#Color'>Color</a> is not <a href='undocumented#Premultiply'>Premultiplied</a>; <a href='#Color_Alpha'>Color_Alpha</a> sets the transparency independent of
1612RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001613
Cary Clark777eede2018-11-09 16:04:58 -05001614The bit positions of <a href='#Color_Alpha'>Color_Alpha</a> and RGB are independent of the bit
1615positions on the output <a href='undocumented#Device'>device</a>, which may have more or fewer bits, and may have
1616a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001617
Cary Clark77b3f3a2018-11-07 14:59:03 -05001618| bit positions | <a href='#Color_Alpha'>Color_Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001619| --- | --- | --- | --- | --- |
1620| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1621
1622### Example
1623
Ravi Mistry874e22b2018-07-19 03:49:13 +00001624<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001625
Cary Clark682c58d2018-05-16 07:07:07 -04001626<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001627
1628---
Cary Clark12799e12017-07-28 15:18:29 -04001629
Cary Clark682c58d2018-05-16 07:07:07 -04001630<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001631<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001632</pre>
1633
Cary Clark777eede2018-11-09 16:04:58 -05001634Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, packed into 32 bits.
1635Use 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
1636a <a href='SkColor_Reference#Color'>color</a> component.
Cary Clark12799e12017-07-28 15:18:29 -04001637
1638### Return Value
1639
Cary Clark777eede2018-11-09 16:04:58 -05001640<a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001641
1642### Example
1643
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001644<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001645
1646#### Example Output
1647
1648~~~~
1649Yellow is 100% red, 100% green, and 0% blue.
1650~~~~
1651
1652</fiddle-embed></div>
1653
1654### See Also
1655
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001656<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1657
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001658<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001659
1660---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001661
1662<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001663<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001664</pre>
1665
Cary Clark777eede2018-11-09 16:04:58 -05001666Retrieves <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 -04001667are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1668
1669### Return Value
1670
Cary Clark777eede2018-11-09 16:04:58 -05001671<a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001672
1673### Example
1674
1675<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1676
1677#### Example Output
1678
1679~~~~
1680Yellow is 100% red, 100% green, and 0% blue.
1681~~~~
1682
1683</fiddle-embed></div>
1684
1685### See Also
1686
1687<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001688
Cary Clark682c58d2018-05-16 07:07:07 -04001689<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001690
1691---
Cary Clark12799e12017-07-28 15:18:29 -04001692
Cary Clark682c58d2018-05-16 07:07:07 -04001693<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -05001694void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='SkColor_Reference#Color'>color</a>)
Cary Clark12799e12017-07-28 15:18:29 -04001695</pre>
1696
Cary Clark777eede2018-11-09 16:04:58 -05001697Sets <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,
1698<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 -04001699
1700### Parameters
1701
Cary Clark682c58d2018-05-16 07:07:07 -04001702<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001703 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001704 </tr>
1705</table>
1706
1707### Example
1708
skia-bookmaker233c6522018-07-04 05:33:26 +00001709<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001710
1711#### Example Output
1712
1713~~~~
1714green1 == green2
1715~~~~
1716
1717</fiddle-embed></div>
1718
1719### See Also
1720
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001721<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>
1722
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001723<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001724
1725---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001726
1727<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001728void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& <a href='SkColor_Reference#Color'>color</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001729</pre>
1730
Cary Clark777eede2018-11-09 16:04:58 -05001731Sets <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
1732<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
1733the <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 -04001734sRGB <a href='undocumented#Color_Space'>color space</a>.
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001735
1736### Parameters
1737
1738<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001739 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA</td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001740 </tr>
1741 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001742 <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 -04001743 </tr>
1744</table>
1745
1746### Example
1747
1748<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
1749
1750#### Example Output
1751
1752~~~~
1753green1 == green2
1754~~~~
1755
1756</fiddle-embed></div>
1757
1758### See Also
1759
1760<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 -04001761
Cary Clarka90ea222018-10-16 10:30:28 -04001762<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001763
Cary Clark777eede2018-11-09 16:04:58 -05001764<a href='#Color_Alpha'>Color_Alpha</a> sets the transparency independent of RGB: red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04001765
Cary Clark682c58d2018-05-16 07:07:07 -04001766<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001767
1768---
Cary Clark12799e12017-07-28 15:18:29 -04001769
Cary Clark682c58d2018-05-16 07:07:07 -04001770<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001771uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001772</pre>
1773
Cary Clark777eede2018-11-09 16:04:58 -05001774Retrieves <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 -04001775
1776### Return Value
1777
Cary Clark777eede2018-11-09 16:04:58 -05001778<a href='SkColor_Reference#Alpha'>alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001779
1780### Example
1781
Cary Clark83647062018-07-18 16:21:51 -04001782<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04001783
1784#### Example Output
1785
1786~~~~
1787255 == paint.getAlpha()
1788~~~~
1789
1790</fiddle-embed></div>
1791
Cary Clark682c58d2018-05-16 07:07:07 -04001792<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001793
1794---
Cary Clark12799e12017-07-28 15:18:29 -04001795
Cary Clark682c58d2018-05-16 07:07:07 -04001796<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001797void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04001798</pre>
1799
Cary Clark777eede2018-11-09 16:04:58 -05001800Replaces <a href='SkColor_Reference#Alpha'>alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04001801unchanged. An out of range value triggers an assert in the debug
Cary Clark777eede2018-11-09 16:04:58 -05001802build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
1803<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 -04001804fully opaque.
1805
1806### Parameters
1807
Cary Clark682c58d2018-05-16 07:07:07 -04001808<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001809 <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 -04001810 </tr>
1811</table>
1812
1813### Example
1814
Ravi Mistry874e22b2018-07-19 03:49:13 +00001815<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04001816
1817#### Example Output
1818
1819~~~~
18200x44112233 == paint.getColor()
1821~~~~
1822
1823</fiddle-embed></div>
1824
Cary Clark682c58d2018-05-16 07:07:07 -04001825<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001826
1827---
Cary Clark12799e12017-07-28 15:18:29 -04001828
Cary Clark682c58d2018-05-16 07:07:07 -04001829<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001830void <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 -04001831</pre>
1832
Cary Clark777eede2018-11-09 16:04:58 -05001833Sets <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.
1834The <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 -04001835
1836### Parameters
1837
Cary Clark682c58d2018-05-16 07:07:07 -04001838<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001839 <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 -04001840 </tr>
1841 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001842 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001843 </tr>
1844 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001845 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001846 </tr>
1847 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001848 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04001849 </tr>
1850</table>
1851
1852### Example
1853
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001854<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04001855
1856#### Example Output
1857
1858~~~~
1859transRed1 == transRed2
1860~~~~
1861
1862</fiddle-embed></div>
1863
1864### See Also
1865
Cary Clark682c58d2018-05-16 07:07:07 -04001866<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001867
Cary Clarka90ea222018-10-16 10:30:28 -04001868<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001869
Cary Clarka90ea222018-10-16 10:30:28 -04001870---
Cary Clark08895c42018-02-01 09:37:32 -05001871
Cary Clark777eede2018-11-09 16:04:58 -05001872<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
1873Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001874
Cary Clarka90ea222018-10-16 10:30:28 -04001875<a name='Style_Fill'></a>
1876
Cary Clark777eede2018-11-09 16:04:58 -05001877Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kFill_Style'>kFill_Style</a> to fill the shape.
1878The fill covers the area inside the geometry for most shapes.
Cary Clark12799e12017-07-28 15:18:29 -04001879
Cary Clarka90ea222018-10-16 10:30:28 -04001880<a name='Style_Stroke'></a>
1881
Cary Clark777eede2018-11-09 16:04:58 -05001882Set <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 -04001883
Cary Clark777eede2018-11-09 16:04:58 -05001884The stroke covers the area described by following the shape edge with a pen or brush of
1885<a href='#Paint_Stroke_Width'>Stroke_Width</a>. The area covered where the shape starts and stops is described by <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>.
1886The area covered where the shape turns a corner is described by <a href='#Paint_Stroke_Join'>Stroke_Join</a>.
1887The stroke is centered on the shape; it extends equally on either side of the shape edge.As <a href='#Paint_Stroke_Width'>Stroke_Width</a> gets smaller, the drawn <a href='SkPath_Reference#Path'>path</a> frame is thinner. <a href='#Paint_Stroke_Width'>Stroke_Width</a> less than one
1888may have gaps, and if <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is set, <a href='#Color_Alpha'>Color_Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001889
Cary Clarka90ea222018-10-16 10:30:28 -04001890### See Also
Cary Clark12799e12017-07-28 15:18:29 -04001891
Cary Clark77b3f3a2018-11-07 14:59:03 -05001892<a href='#Path_Fill_Type'>Path_Fill_Type</a> <a href='#Path_Effect'>Path_Effect</a> <a href='#Paint_Style_Fill'>Style_Fill</a> <a href='#Paint_Style_Stroke'>Style_Stroke</a>
Cary Clarka90ea222018-10-16 10:30:28 -04001893
1894<a name='Hairline'></a>
1895
1896---
1897
Cary Clark777eede2018-11-09 16:04:58 -05001898<a href='#Paint_Stroke_Width'>Stroke_Width</a> of zero has a special meaning and switches drawing to use Hairline.
1899Hairline draws the thinnest continuous frame. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is clear, adjacent pixels
1900flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04001901
Cary Clark777eede2018-11-09 16:04:58 -05001902<a href='SkPath_Reference#Path'>Path</a> drawing with Hairline may hit the same <a href='undocumented#Pixel'>pixel</a> more than once. For instance, <a href='SkPath_Reference#Path'>Path</a> containing
1903two <a href='undocumented#Line'>lines</a> in one <a href='#Path_Overview_Contour'>Path_Contour</a> will draw the corner <a href='SkPoint_Reference#Point'>point</a> once, but may both <a href='undocumented#Line'>lines</a> may draw the adjacent
1904<a href='undocumented#Pixel'>pixel</a>. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is set, transparency is applied twice, resulting in a darker <a href='undocumented#Pixel'>pixel</a>. Some
1905GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
1906while stroking.
Cary Clark12799e12017-07-28 15:18:29 -04001907
Cary Clarka90ea222018-10-16 10:30:28 -04001908### See Also
1909
Cary Clark77b3f3a2018-11-07 14:59:03 -05001910<a href='#Path_Fill_Type'>Path_Fill_Type</a> <a href='#Path_Effect'>Path_Effect</a> <a href='#Paint_Style_Fill'>Style_Fill</a> <a href='#Paint_Style_Stroke'>Style_Stroke</a>
Cary Clarka90ea222018-10-16 10:30:28 -04001911
1912<a name='SkPaint_Style'></a>
1913
1914---
Cary Clark12799e12017-07-28 15:18:29 -04001915
Cary Clarka560c472017-11-27 10:44:06 -05001916<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001917 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04001918 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
1919 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
1920 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04001921 };
Cary Clarka90ea222018-10-16 10:30:28 -04001922</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04001923
Cary Clarka90ea222018-10-16 10:30:28 -04001924<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04001925 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 -05001926</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001927
Cary Clark777eede2018-11-09 16:04:58 -05001928Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
1929The stroke and fill
1930share all <a href='SkPaint_Reference#Paint'>paint</a> attributes; for instance, they are drawn with the same <a href='SkColor_Reference#Color'>color</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001931
Cary Clark777eede2018-11-09 16:04:58 -05001932Use <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> to avoid hitting the same pixels twice with a stroke draw and
1933a fill draw.
Cary Clark12799e12017-07-28 15:18:29 -04001934
1935### Constants
1936
Cary Clark682c58d2018-05-16 07:07:07 -04001937<table style='border-collapse: collapse; width: 62.5em'>
1938 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1939<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1940<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1941 <tr style='background-color: #f0f0f0; '>
1942 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
1943 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1944 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001945Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#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>.
1946<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
1947<a href='#SkPaint_kFill_Style'>kFill_Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
1948The <a href='#Path_Fill_Type'>Path_Fill_Type</a> specifies additional rules to fill the area outside the <a href='SkPath_Reference#Path'>path</a> edge,
1949and to create an unfilled hole inside the shape.
1950<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 -05001951</td>
Cary Clark12799e12017-07-28 15:18:29 -04001952 </tr>
1953 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001954 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
1955 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1956 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001957Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#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>.
1958<a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Line'>Lines</a>, and <a href='SkPoint_Reference#Point'>points</a>, are always drawn as if <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> is set,
1959and ignore the set <a href='#SkPaint_Style'>Style</a>.
1960The stroke construction is unaffected by the <a href='#Path_Fill_Type'>Path_Fill_Type</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001961</td>
1962 </tr>
1963 <tr style='background-color: #f0f0f0; '>
1964 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
1965 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1966 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001967Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#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>.
1968<a href='SkPath_Reference#Path'>Path</a> is treated as if it is set to <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>,
1969and the set <a href='#Path_Fill_Type'>Path_Fill_Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05001970</td>
Cary Clark12799e12017-07-28 15:18:29 -04001971 </tr>
1972 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001973 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
1974 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1975 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001976May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05001977</td>
Cary Clark12799e12017-07-28 15:18:29 -04001978 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001979</table>
Cary Clark12799e12017-07-28 15:18:29 -04001980
Cary Clark682c58d2018-05-16 07:07:07 -04001981<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001982
1983---
Cary Clark12799e12017-07-28 15:18:29 -04001984
Cary Clark682c58d2018-05-16 07:07:07 -04001985<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001986<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001987</pre>
1988
Cary Clark80247e52018-07-11 16:18:41 -04001989Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001990
1991### Return Value
1992
Cary Clark09d80c02018-10-31 12:14:03 -04001993one 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 -04001994
1995### Example
1996
1997<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
1998
1999#### Example Output
2000
2001~~~~
2002SkPaint::kFill_Style == paint.getStyle()
2003~~~~
2004
2005</fiddle-embed></div>
2006
2007### See Also
2008
Cary Clark682c58d2018-05-16 07:07:07 -04002009<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002010
Cary Clark682c58d2018-05-16 07:07:07 -04002011<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002012
2013---
Cary Clark12799e12017-07-28 15:18:29 -04002014
Cary Clark682c58d2018-05-16 07:07:07 -04002015<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002016void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002017</pre>
2018
2019Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark777eede2018-11-09 16:04:58 -05002020Has 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 -04002021
2022### Parameters
2023
Cary Clark682c58d2018-05-16 07:07:07 -04002024<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002025 <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 -04002026 </tr>
2027</table>
2028
2029### Example
2030
2031<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2032
2033### See Also
2034
Cary Clark682c58d2018-05-16 07:07:07 -04002035<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002036
Cary Clarka90ea222018-10-16 10:30:28 -04002037<a name='Stroke_Width'></a>
2038
Cary Clark12799e12017-07-28 15:18:29 -04002039---
2040
Cary Clark777eede2018-11-09 16:04:58 -05002041<a href='#Paint_Stroke_Width'>Stroke_Width</a> sets the width for stroking. The width is the thickness
2042of the stroke perpendicular to the <a href='SkPath_Reference#Path_Direction'>path direction</a> when the <a href='SkPaint_Reference#Paint'>paint style</a> is
2043set 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 -04002044
Cary Clark777eede2018-11-09 16:04:58 -05002045When width is greater than zero, the stroke encompasses as many pixels partially
2046or fully as needed. When the width equals zero, the <a href='SkPaint_Reference#Paint'>paint</a> enables hairlines;
2047the stroke is always one <a href='undocumented#Pixel'>pixel</a> wide.
Cary Clark12799e12017-07-28 15:18:29 -04002048
Cary Clark777eede2018-11-09 16:04:58 -05002049The stroke dimensions are scaled by the <a href='SkCanvas_Reference#Canvas_Matrix'>canvas matrix</a>, but Hairline stroke
2050remains one <a href='undocumented#Pixel'>pixel</a> wide regardless of scaling.
Cary Clark12799e12017-07-28 15:18:29 -04002051
Cary Clark777eede2018-11-09 16:04:58 -05002052The default width for the <a href='SkPaint_Reference#Paint'>paint</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04002053
2054### Example
2055
Cary Clark777eede2018-11-09 16:04:58 -05002056<div><fiddle-embed name="5112c7209a19e035c61cef33a624a652" gpu="true"><div>The pixels hit to represent thin <a href='undocumented#Line'>lines</a> vary with the angle of the
2057<a href='undocumented#Line'>line</a> and the platform implementation.
Cary Clark1a8d7622018-03-05 13:26:16 -05002058</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002059
Cary Clark682c58d2018-05-16 07:07:07 -04002060<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002061
2062---
Cary Clark12799e12017-07-28 15:18:29 -04002063
Cary Clark682c58d2018-05-16 07:07:07 -04002064<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002065<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002066</pre>
2067
Cary Clark777eede2018-11-09 16:04:58 -05002068Returns the thickness of the pen used by <a href='SkPaint_Reference#SkPaint'>SkPaint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002069outline the shape.
2070
2071### Return Value
2072
Cary Clark09d80c02018-10-31 12:14:03 -04002073zero for hairline, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002074
2075### Example
2076
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002077<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002078
2079#### Example Output
2080
2081~~~~
20820 == paint.getStrokeWidth()
2083~~~~
2084
2085</fiddle-embed></div>
2086
Cary Clark682c58d2018-05-16 07:07:07 -04002087<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002088
2089---
Cary Clark12799e12017-07-28 15:18:29 -04002090
Cary Clark682c58d2018-05-16 07:07:07 -04002091<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002092void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002093</pre>
2094
Cary Clark777eede2018-11-09 16:04:58 -05002095Sets the thickness of the pen used by the <a href='SkPaint_Reference#Paint'>paint</a> to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002096outline the shape.
Cary Clark777eede2018-11-09 16:04:58 -05002097Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002098
2099### Parameters
2100
Cary Clark682c58d2018-05-16 07:07:07 -04002101<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002102 <td>zero thickness for hairline; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002103 </tr>
2104</table>
2105
2106### Example
2107
2108<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2109
2110#### Example Output
2111
2112~~~~
21135 == paint.getStrokeWidth()
2114~~~~
2115
2116</fiddle-embed></div>
2117
Cary Clarka90ea222018-10-16 10:30:28 -04002118<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002119
Cary Clarka90ea222018-10-16 10:30:28 -04002120---
Cary Clark08895c42018-02-01 09:37:32 -05002121
Cary Clark777eede2018-11-09 16:04:58 -05002122<a href='#Paint_Miter_Limit'>Miter_Limit</a> specifies the maximum miter length,
2123relative to the <a href='#Stroke_Width'>stroke width</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002124
Cary Clark777eede2018-11-09 16:04:58 -05002125<a href='#Paint_Miter_Limit'>Miter_Limit</a> is used when the <a href='#Paint_Stroke_Join'>Stroke_Join</a>
2126is 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>
2127or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002128
Cary Clark777eede2018-11-09 16:04:58 -05002129If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>
2130is replaced with <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002131
Cary Clark777eede2018-11-09 16:04:58 -05002132<a href='#Paint_Miter_Limit'>Miter_Limit</a> can be computed from the corner angle using:
Cary Clark77b3f3a2018-11-07 14:59:03 -05002133<code><a href='#Miter_Limit'>miter limit</a> = 1 / sin ( angle / 2 )</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002134
Cary Clark777eede2018-11-09 16:04:58 -05002135<a href='#Paint_Miter_Limit'>Miter_Limit</a> default value is 4.
2136The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults_MiterLimit</a>
2137in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002138
Cary Clark777eede2018-11-09 16:04:58 -05002139Here are some miter limits and the angles that triggers them.
Cary Clark12799e12017-07-28 15:18:29 -04002140
Cary Clark77b3f3a2018-11-07 14:59:03 -05002141| <a href='#Miter_Limit'>miter limit</a> | angle in degrees |
Cary Clark12799e12017-07-28 15:18:29 -04002142| --- | --- |
2143| 10 | 11.48 |
2144| 9 | 12.76 |
2145| 8 | 14.36 |
2146| 7 | 16.43 |
2147| 6 | 19.19 |
2148| 5 | 23.07 |
2149| 4 | 28.96 |
2150| 3 | 38.94 |
2151| 2 | 60 |
2152| 1 | 180 |
2153
2154### Example
2155
Cary Clarka619d452018-07-16 08:12:01 -04002156<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark77b3f3a2018-11-07 14:59:03 -05002157When the <a href='#Miter_Limit'>miter limit</a> is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002158by a bevel join.
2159</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002160
Cary Clark682c58d2018-05-16 07:07:07 -04002161<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002162
2163---
Cary Clark12799e12017-07-28 15:18:29 -04002164
Cary Clark682c58d2018-05-16 07:07:07 -04002165<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002166<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002167</pre>
2168
Cary Clark80247e52018-07-11 16:18:41 -04002169Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002170
2171### Return Value
2172
Cary Clark77b3f3a2018-11-07 14:59:03 -05002173zero and greater miter limit
Cary Clark12799e12017-07-28 15:18:29 -04002174
2175### Example
2176
2177<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2178
2179#### Example Output
2180
2181~~~~
2182default miter limit == 4
2183~~~~
2184
2185</fiddle-embed></div>
2186
2187### See Also
2188
Cary Clark77b3f3a2018-11-07 14:59:03 -05002189<a href='#Paint_Miter_Limit'>Miter_Limit</a> <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002190
Cary Clark682c58d2018-05-16 07:07:07 -04002191<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002192
2193---
Cary Clark12799e12017-07-28 15:18:29 -04002194
Cary Clark682c58d2018-05-16 07:07:07 -04002195<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002196void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002197</pre>
2198
Cary Clark80247e52018-07-11 16:18:41 -04002199Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002200Valid values are zero and greater.
Cary Clark777eede2018-11-09 16:04:58 -05002201Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002202
2203### Parameters
2204
Cary Clark682c58d2018-05-16 07:07:07 -04002205<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002206 <td>zero and greater <a href='#Miter_Limit'>miter limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002207 </tr>
2208</table>
2209
2210### Example
2211
skia-bookmakera717ca92018-07-08 05:32:09 +00002212<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002213
2214#### Example Output
2215
2216~~~~
2217default miter limit == 8
2218~~~~
2219
2220</fiddle-embed></div>
2221
2222### See Also
2223
Cary Clark77b3f3a2018-11-07 14:59:03 -05002224<a href='#Paint_Miter_Limit'>Miter_Limit</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002225
Cary Clarka90ea222018-10-16 10:30:28 -04002226<a name='Stroke_Cap'></a>
2227
2228<a name='SkPaint_Cap'></a>
2229
Cary Clark12799e12017-07-28 15:18:29 -04002230---
2231
Cary Clarka560c472017-11-27 10:44:06 -05002232<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002233 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002234 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2235 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2236 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002237 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2238 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002239 };
Cary Clarka90ea222018-10-16 10:30:28 -04002240</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002241
Cary Clarka90ea222018-10-16 10:30:28 -04002242<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002243 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 -05002244</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002245
Cary Clark777eede2018-11-09 16:04:58 -05002246<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> draws at the beginning and end of an open <a href='#Path_Overview_Contour'>Path_Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002247
2248### Constants
2249
Cary Clark682c58d2018-05-16 07:07:07 -04002250<table style='border-collapse: collapse; width: 62.5em'>
2251 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2252<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2253<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2254 <tr style='background-color: #f0f0f0; '>
2255 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2256 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2257 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2258Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002259</td>
Cary Clark12799e12017-07-28 15:18:29 -04002260 </tr>
2261 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002262 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2263 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2264 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002265Adds a <a href='undocumented#Circle'>circle</a> with a diameter equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2266and end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002267</td>
Cary Clark12799e12017-07-28 15:18:29 -04002268 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002269 <tr style='background-color: #f0f0f0; '>
2270 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2271 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2272 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002273Adds a square with sides equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2274and end. The square sides are parallel to the initial and final direction
2275of the stroke.
Cary Clark1a8d7622018-03-05 13:26:16 -05002276</td>
Cary Clark12799e12017-07-28 15:18:29 -04002277 </tr>
2278 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002279 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2280 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2281 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002282Equivalent to the largest value for <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002283</td>
2284 </tr>
2285 <tr style='background-color: #f0f0f0; '>
2286 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2287 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2288 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002289<a href='#Paint_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 -05002290</td>
Cary Clark12799e12017-07-28 15:18:29 -04002291 </tr>
2292 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002293 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2294 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2295 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002296May be used to verify that <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002297</td>
Cary Clark12799e12017-07-28 15:18:29 -04002298 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002299</table>
Cary Clark12799e12017-07-28 15:18:29 -04002300
Cary Clark777eede2018-11-09 16:04:58 -05002301Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2302follows the <a href='#Path_Overview_Contour'>Path_Contour</a>, moving parallel to the <a href='SkPath_Overview#Contour'>contour</a> direction.
Cary Clark12799e12017-07-28 15:18:29 -04002303
Cary Clark777eede2018-11-09 16:04:58 -05002304If the <a href='#Path_Overview_Contour'>Path_Contour</a> is not terminated by <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_kClose_Verb'>kClose_Verb</a>, the <a href='SkPath_Overview#Contour'>contour</a> has a
2305visible beginning and end.
Cary Clark12799e12017-07-28 15:18:29 -04002306
Cary Clark777eede2018-11-09 16:04:58 -05002307<a href='#Path_Overview_Contour'>Path_Contour</a> may start and end at the same <a href='SkPoint_Reference#Point'>point</a>; defining <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002308
Cary Clark777eede2018-11-09 16:04:58 -05002309<a href='#SkPaint_kButt_Cap'>kButt_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> is not drawn.
2310<a href='#SkPaint_kRound_Cap'>kRound_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> draws a <a href='undocumented#Circle'>circle</a> of diameter <a href='#Paint_Stroke_Width'>Stroke_Width</a>
2311at the <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPoint_Reference#Point'>point</a>.
2312<a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> draws an upright square with a side of
2313<a href='#Paint_Stroke_Width'>Stroke_Width</a> at the <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPoint_Reference#Point'>point</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002314
Cary Clark777eede2018-11-09 16:04:58 -05002315<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04002316
Cary Clark12799e12017-07-28 15:18:29 -04002317### Example
2318
Cary Clark2ade9972017-11-02 17:49:34 -04002319<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002320
Cary Clark682c58d2018-05-16 07:07:07 -04002321<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002322
2323---
Cary Clark12799e12017-07-28 15:18:29 -04002324
Cary Clark682c58d2018-05-16 07:07:07 -04002325<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002326<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002327</pre>
2328
Cary Clark80247e52018-07-11 16:18:41 -04002329Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002330
2331### Return Value
2332
Cary Clark09d80c02018-10-31 12:14:03 -04002333one 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 -04002334
2335### Example
2336
2337<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2338
2339#### Example Output
2340
2341~~~~
2342kButt_Cap == default stroke cap
2343~~~~
2344
2345</fiddle-embed></div>
2346
2347### See Also
2348
Cary Clark77b3f3a2018-11-07 14:59:03 -05002349<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002350
Cary Clark682c58d2018-05-16 07:07:07 -04002351<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002352
2353---
Cary Clark12799e12017-07-28 15:18:29 -04002354
Cary Clark682c58d2018-05-16 07:07:07 -04002355<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002356void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002357</pre>
2358
Cary Clark80247e52018-07-11 16:18:41 -04002359Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002360
2361### Parameters
2362
Cary Clark682c58d2018-05-16 07:07:07 -04002363<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002364 <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 -04002365 </tr>
2366</table>
2367
Cary Clark777eede2018-11-09 16:04:58 -05002368has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid
Cary Clark09d80c02018-10-31 12:14:03 -04002369
Cary Clark12799e12017-07-28 15:18:29 -04002370### Example
2371
2372<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2373
2374#### Example Output
2375
2376~~~~
2377kRound_Cap == paint.getStrokeCap()
2378~~~~
2379
2380</fiddle-embed></div>
2381
2382### See Also
2383
Cary Clark77b3f3a2018-11-07 14:59:03 -05002384<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002385
Cary Clarka90ea222018-10-16 10:30:28 -04002386<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002387
Cary Clark777eede2018-11-09 16:04:58 -05002388<a href='#Paint_Stroke_Join'>Stroke_Join</a> draws at the sharp corners of an open or closed <a href='#Path_Overview_Contour'>Path_Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002389
Cary Clark777eede2018-11-09 16:04:58 -05002390Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2391follows the <a href='#Path_Overview_Contour'>Path_Contour</a>, moving parallel to the <a href='SkPath_Overview#Contour'>contour</a> direction.
Cary Clark12799e12017-07-28 15:18:29 -04002392
Cary Clark777eede2018-11-09 16:04:58 -05002393If the <a href='SkPath_Overview#Contour'>contour</a> direction changes abruptly, because the tangent direction leading
2394to the end of a <a href='undocumented#Curve'>curve</a> within the <a href='SkPath_Overview#Contour'>contour</a> does not match the tangent direction of
2395the following <a href='undocumented#Curve'>curve</a>, the pair of <a href='undocumented#Curve'>curves</a> meet at <a href='#Paint_Stroke_Join'>Stroke_Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002396
2397### Example
2398
Cary Clark2ade9972017-11-02 17:49:34 -04002399<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002400
Cary Clarka90ea222018-10-16 10:30:28 -04002401<a name='SkPaint_Join'></a>
2402
2403---
Cary Clark12799e12017-07-28 15:18:29 -04002404
Cary Clarka560c472017-11-27 10:44:06 -05002405<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002406 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04002407 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2408 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2409 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002410 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2411 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002412 };
Cary Clarka90ea222018-10-16 10:30:28 -04002413</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002414
Cary Clarka90ea222018-10-16 10:30:28 -04002415<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002416 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 -05002417</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002418
Cary Clark777eede2018-11-09 16:04:58 -05002419<a href='#SkPaint_Join'>Join</a> specifies how corners are drawn when a shape is stroked. <a href='#SkPaint_Join'>Join</a>
2420affects the four corners of a stroked rectangle, and the connected segments in a
2421stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002422
Cary Clark777eede2018-11-09 16:04:58 -05002423Choose miter join to draw sharp corners. Choose round join to draw a <a href='undocumented#Circle'>circle</a> with a
2424radius equal to the <a href='#Stroke_Width'>stroke width</a> on top of the corner. Choose bevel join to minimally
2425connect the thick strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002426
Cary Clark777eede2018-11-09 16:04:58 -05002427The <a href='#Fill_Path'>fill path</a> constructed to describe the stroked <a href='SkPath_Reference#Path'>path</a> respects the join setting but may
2428not contain the actual join. For instance, a <a href='#Fill_Path'>fill path</a> constructed with round joins does
2429not necessarily include <a href='undocumented#Circle'>circles</a> at each connected segment.
Cary Clark12799e12017-07-28 15:18:29 -04002430
2431### Constants
2432
Cary Clark682c58d2018-05-16 07:07:07 -04002433<table style='border-collapse: collapse; width: 62.5em'>
2434 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2435<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2436<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2437 <tr style='background-color: #f0f0f0; '>
2438 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2439 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2440 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002441Extends the outside corner to the extent allowed by <a href='#Paint_Miter_Limit'>Miter_Limit</a>.
Cary Clark777eede2018-11-09 16:04:58 -05002442If the extension exceeds <a href='#Paint_Miter_Limit'>Miter_Limit</a>, <a href='#SkPaint_kBevel_Join'>kBevel_Join</a> is used instead.
Cary Clark1a8d7622018-03-05 13:26:16 -05002443</td>
Cary Clark12799e12017-07-28 15:18:29 -04002444 </tr>
2445 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002446 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2447 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2448 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002449Adds a <a href='undocumented#Circle'>circle</a> with a diameter of <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the sharp corner.
Cary Clark682c58d2018-05-16 07:07:07 -04002450</td>
2451 </tr>
2452 <tr style='background-color: #f0f0f0; '>
2453 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2454 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2455 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2456Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002457</td>
Cary Clark12799e12017-07-28 15:18:29 -04002458 </tr>
2459 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002460 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2461 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2462 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2463equivalent to the largest value for Stroke_Join</td>
2464 </tr>
2465 <tr style='background-color: #f0f0f0; '>
2466 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2467 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2468 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002469<a href='#Paint_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 -05002470</td>
Cary Clark12799e12017-07-28 15:18:29 -04002471 </tr>
2472 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002473 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2474 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2475 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002476May be used to verify that <a href='#Paint_Stroke_Join'>Stroke_Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002477</td>
Cary Clark12799e12017-07-28 15:18:29 -04002478 </tr>
2479</table>
2480
2481### Example
2482
2483<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2484
2485### See Also
2486
Cary Clark682c58d2018-05-16 07:07:07 -04002487<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 -04002488
Cary Clark682c58d2018-05-16 07:07:07 -04002489<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002490
2491---
Cary Clark12799e12017-07-28 15:18:29 -04002492
Cary Clark682c58d2018-05-16 07:07:07 -04002493<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002494<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002495</pre>
2496
Cary Clark80247e52018-07-11 16:18:41 -04002497Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002498
2499### Return Value
2500
Cary Clark09d80c02018-10-31 12:14:03 -04002501one 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 -04002502
2503### Example
2504
Cary Clark7f644ec2018-07-19 10:50:44 -04002505<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002506
2507#### Example Output
2508
2509~~~~
2510kMiter_Join == default stroke join
2511~~~~
2512
2513</fiddle-embed></div>
2514
2515### See Also
2516
Cary Clark77b3f3a2018-11-07 14:59:03 -05002517<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002518
Cary Clark682c58d2018-05-16 07:07:07 -04002519<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002520
2521---
Cary Clark12799e12017-07-28 15:18:29 -04002522
Cary Clark682c58d2018-05-16 07:07:07 -04002523<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002524void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002525</pre>
2526
Cary Clark80247e52018-07-11 16:18:41 -04002527Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002528
2529### Parameters
2530
Cary Clark682c58d2018-05-16 07:07:07 -04002531<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002532 <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 -04002533 </tr>
2534</table>
2535
Cary Clark09d80c02018-10-31 12:14:03 -04002536otherwise, has no effect
2537
Cary Clark12799e12017-07-28 15:18:29 -04002538### Example
2539
2540<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2541
2542#### Example Output
2543
2544~~~~
2545kMiter_Join == paint.getStrokeJoin()
2546~~~~
2547
2548</fiddle-embed></div>
2549
2550### See Also
2551
Cary Clark77b3f3a2018-11-07 14:59:03 -05002552<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002553
Cary Clark12799e12017-07-28 15:18:29 -04002554### See Also
2555
Cary Clark77b3f3a2018-11-07 14:59:03 -05002556<a href='#Paint_Miter_Limit'>Miter_Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002557
Cary Clarka90ea222018-10-16 10:30:28 -04002558<a name='Fill_Path'></a>
2559
2560---
Cary Clark08895c42018-02-01 09:37:32 -05002561
Cary Clark777eede2018-11-09 16:04:58 -05002562<a href='#Paint_Fill_Path'>Fill_Path</a> creates a <a href='SkPath_Reference#Path'>Path</a> by applying the <a href='#Path_Effect'>Path_Effect</a>, followed by the <a href='#Paint_Style_Stroke'>Style_Stroke</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002563
Cary Clark777eede2018-11-09 16:04:58 -05002564If <a href='SkPaint_Reference#Paint'>Paint</a> contains <a href='#Path_Effect'>Path_Effect</a>, <a href='#Path_Effect'>Path_Effect</a> operates on the source <a href='SkPath_Reference#Path'>Path</a>; the result
2565replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2566destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002567
Cary Clark777eede2018-11-09 16:04:58 -05002568Fill <a href='SkPath_Reference#Path'>Path</a> can request the <a href='#Path_Effect'>Path_Effect</a> to restrict to a culling rectangle, but
2569the <a href='#Path_Effect'>Path_Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002570
Cary Clark777eede2018-11-09 16:04:58 -05002571If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
2572and <a href='#Paint_Stroke_Width'>Stroke_Width</a> is greater than zero, the <a href='#Paint_Stroke_Width'>Stroke_Width</a>, <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>, <a href='#Paint_Stroke_Join'>Stroke_Join</a>,
2573and <a href='#Paint_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 -04002574
Cary Clark777eede2018-11-09 16:04:58 -05002575Fill <a href='SkPath_Reference#Path'>Path</a> can specify the precision used by <a href='#Paint_Stroke_Width'>Stroke_Width</a> to approximate the stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002576
Cary Clark777eede2018-11-09 16:04:58 -05002577If the <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> and the <a href='#Paint_Stroke_Width'>Stroke_Width</a> is zero, <a href='#SkPaint_getFillPath'>getFillPath</a>
2578returns false since Hairline has no filled equivalent.
Cary Clarka90ea222018-10-16 10:30:28 -04002579
2580### See Also
2581
Cary Clark77b3f3a2018-11-07 14:59:03 -05002582<a href='#Paint_Style_Stroke'>Style_Stroke</a> <a href='#Paint_Stroke_Width'>Stroke_Width</a> <a href='#Path_Effect'>Path_Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002583
Cary Clark682c58d2018-05-16 07:07:07 -04002584<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002585
2586---
Cary Clark12799e12017-07-28 15:18:29 -04002587
Cary Clark682c58d2018-05-16 07:07:07 -04002588<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002589bool <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 -04002590</pre>
2591
Cary Clark09d80c02018-10-31 12:14:03 -04002592Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002593
2594### Parameters
2595
Cary Clark682c58d2018-05-16 07:07:07 -04002596<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002597 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002598 </tr>
2599 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002600 <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 -04002601 </tr>
2602 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002603 <td>optional limit passed to <a href='undocumented#SkPathEffect'>SkPathEffect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04002604 </tr>
2605 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002606 <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 -04002607 </tr>
2608</table>
2609
Cary Clark09d80c02018-10-31 12:14:03 -04002610to favor speed and <a href='undocumented#Size'>size</a>
2611
Cary Clark12799e12017-07-28 15:18:29 -04002612### Return Value
2613
Cary Clark777eede2018-11-09 16:04:58 -05002614true 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 -04002615
2616### Example
2617
Cary Clark777eede2018-11-09 16:04:58 -05002618<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href='SkPath_Reference#Quad'>Quad</a> stroke is turned into a filled <a href='SkPath_Reference#Path'>path</a> with increasing levels of precision.
2619At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
2620At the highest precision, the filled <a href='SkPath_Reference#Path'>path</a> has high fidelity compared to the original stroke.
Cary Clark1a8d7622018-03-05 13:26:16 -05002621</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002622
Cary Clark682c58d2018-05-16 07:07:07 -04002623<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002624
Cary Clarka90ea222018-10-16 10:30:28 -04002625---
2626
Cary Clark682c58d2018-05-16 07:07:07 -04002627<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002628bool <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 -04002629</pre>
2630
Cary Clark09d80c02018-10-31 12:14:03 -04002631Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002632
Cary Clark777eede2018-11-09 16:04:58 -05002633Replaces <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>.
2634<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 -04002635
2636### Parameters
2637
Cary Clark682c58d2018-05-16 07:07:07 -04002638<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002639 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002640 </tr>
2641 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002642 <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 -04002643 </tr>
2644</table>
2645
2646### Return Value
2647
Cary Clark777eede2018-11-09 16:04:58 -05002648true 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 -04002649
2650### Example
2651
2652<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2653
Cary Clarka90ea222018-10-16 10:30:28 -04002654<a name='Shader_Methods'></a>
2655
Cary Clark12799e12017-07-28 15:18:29 -04002656---
2657
Cary Clark777eede2018-11-09 16:04:58 -05002658<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2659<a href='undocumented#Shader'>Shader</a> may be an <a href='SkImage_Reference#Image'>image</a>, a gradient, or a computed fill.
2660If <a href='SkPaint_Reference#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 -04002661
Cary Clark777eede2018-11-09 16:04:58 -05002662<a href='undocumented#Shader'>Shader</a> is modulated by <a href='#Color_Alpha'>Color_Alpha</a> component of <a href='SkColor_Reference#Color'>Color</a>.
2663If <a href='undocumented#Shader'>Shader</a> object defines only <a href='#Color_Alpha'>Color_Alpha</a>, then <a href='SkColor_Reference#Color'>Color</a> modulated by <a href='#Color_Alpha'>Color_Alpha</a> describes
2664the fill.
Cary Clark12799e12017-07-28 15:18:29 -04002665
Cary Clark777eede2018-11-09 16:04:58 -05002666The drawn transparency can be modified without altering <a href='undocumented#Shader'>Shader</a>, by changing <a href='#Color_Alpha'>Color_Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002667
2668### Example
2669
2670<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2671
Cary Clark777eede2018-11-09 16:04:58 -05002672If <a href='undocumented#Shader'>Shader</a> generates only <a href='#Color_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 -04002673
2674### Example
2675
skia-bookmaker525f9a92018-05-03 06:27:39 +00002676<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002677
Cary Clark682c58d2018-05-16 07:07:07 -04002678<a name='SkPaint_getShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002679
2680---
Cary Clark12799e12017-07-28 15:18:29 -04002681
Cary Clark682c58d2018-05-16 07:07:07 -04002682<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002683<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002684</pre>
2685
Cary Clark777eede2018-11-09 16:04:58 -05002686Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002687
Cary Clark09d80c02018-10-31 12:14:03 -04002688Does not alter <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002689
2690### Return Value
2691
Cary Clark777eede2018-11-09 16:04:58 -05002692<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002693
2694### Example
2695
2696<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2697
2698#### Example Output
2699
2700~~~~
2701nullptr == shader
2702nullptr != shader
2703~~~~
2704
2705</fiddle-embed></div>
2706
Cary Clark682c58d2018-05-16 07:07:07 -04002707<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002708
2709---
Cary Clark12799e12017-07-28 15:18:29 -04002710
Cary Clark682c58d2018-05-16 07:07:07 -04002711<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002712<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 -04002713</pre>
2714
Cary Clark777eede2018-11-09 16:04:58 -05002715Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002716
Cary Clark777eede2018-11-09 16:04:58 -05002717Increases <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002718
2719### Return Value
2720
Cary Clark777eede2018-11-09 16:04:58 -05002721<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002722
2723### Example
2724
2725<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2726
2727#### Example Output
2728
2729~~~~
2730shader unique: true
2731shader unique: false
2732~~~~
2733
2734</fiddle-embed></div>
2735
Cary Clark682c58d2018-05-16 07:07:07 -04002736<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002737
2738---
Cary Clark12799e12017-07-28 15:18:29 -04002739
Cary Clark682c58d2018-05-16 07:07:07 -04002740<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002741void <a href='#SkPaint_setShader'>setShader</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkShader'>SkShader</a>&gt; <a href='undocumented#Shader'>shader</a>)
Cary Clark12799e12017-07-28 15:18:29 -04002742</pre>
2743
Cary Clark777eede2018-11-09 16:04:58 -05002744Sets optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002745
Cary Clark777eede2018-11-09 16:04:58 -05002746Sets <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>.
2747Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002748
2749### Parameters
2750
Cary Clark682c58d2018-05-16 07:07:07 -04002751<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002752 <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 -04002753 </tr>
2754</table>
2755
2756### Example
2757
skia-bookmakere0a458f2018-07-16 05:29:00 +00002758<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002759
Cary Clarka90ea222018-10-16 10:30:28 -04002760<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002761
Cary Clarka90ea222018-10-16 10:30:28 -04002762---
Cary Clark08895c42018-02-01 09:37:32 -05002763
Cary Clark777eede2018-11-09 16:04:58 -05002764<a href='#Color_Filter'>Color_Filter</a> alters the <a href='SkColor_Reference#Color'>color</a> used when drawing a shape.
2765<a href='#Color_Filter'>Color_Filter</a> may apply <a href='#Blend_Mode'>Blend_Mode</a>, transform the <a href='SkColor_Reference#Color'>color</a> through a <a href='SkMatrix_Reference#Matrix'>matrix</a>, or composite multiple filters.
2766If <a href='SkPaint_Reference#Paint'>Paint</a> has no <a href='#Color_Filter'>Color_Filter</a>, the <a href='SkColor_Reference#Color'>color</a> is unaltered.
Cary Clark12799e12017-07-28 15:18:29 -04002767
Cary Clark777eede2018-11-09 16:04:58 -05002768The drawn transparency can be modified without altering <a href='#Color_Filter'>Color_Filter</a>, by changing <a href='#Color_Alpha'>Color_Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002769
2770### Example
2771
2772<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2773
Cary Clark682c58d2018-05-16 07:07:07 -04002774<a name='SkPaint_getColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002775
2776---
Cary Clark12799e12017-07-28 15:18:29 -04002777
Cary Clark682c58d2018-05-16 07:07:07 -04002778<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002779<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002780</pre>
2781
Cary Clark777eede2018-11-09 16:04:58 -05002782Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002783Does not alter <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002784
2785### Return Value
2786
Cary Clark777eede2018-11-09 16:04:58 -05002787<a href='undocumented#SkColorFilter'>SkColorFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002788
2789### Example
2790
2791<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2792
2793#### Example Output
2794
2795~~~~
2796nullptr == color filter
2797nullptr != color filter
2798~~~~
2799
2800</fiddle-embed></div>
2801
Cary Clark682c58d2018-05-16 07:07:07 -04002802<a name='SkPaint_refColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002803
2804---
Cary Clark12799e12017-07-28 15:18:29 -04002805
Cary Clark682c58d2018-05-16 07:07:07 -04002806<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002807<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 -04002808</pre>
2809
Cary Clark777eede2018-11-09 16:04:58 -05002810Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
2811Increases <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002812
2813### Return Value
2814
Cary Clark777eede2018-11-09 16:04:58 -05002815<a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002816
2817### Example
2818
2819<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2820
2821#### Example Output
2822
2823~~~~
2824color filter unique: true
2825color filter unique: false
2826~~~~
2827
2828</fiddle-embed></div>
2829
Cary Clark682c58d2018-05-16 07:07:07 -04002830<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002831
2832---
Cary Clark12799e12017-07-28 15:18:29 -04002833
Cary Clark682c58d2018-05-16 07:07:07 -04002834<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002835void <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 -04002836</pre>
2837
Cary Clark777eede2018-11-09 16:04:58 -05002838Sets <a href='undocumented#SkColorFilter'>SkColorFilter</a> to filter, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
2839<a href='undocumented#SkColorFilter'>SkColorFilter</a>. Pass nullptr to clear <a href='undocumented#SkColorFilter'>SkColorFilter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04002840
Cary Clark777eede2018-11-09 16:04:58 -05002841Increments filter <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002842
2843### Parameters
2844
Cary Clark682c58d2018-05-16 07:07:07 -04002845<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002846 <td><a href='undocumented#SkColorFilter'>SkColorFilter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002847 </tr>
2848</table>
2849
2850### Example
2851
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002852<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002853
Cary Clarka90ea222018-10-16 10:30:28 -04002854<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002855
Cary Clarka90ea222018-10-16 10:30:28 -04002856---
Cary Clark08895c42018-02-01 09:37:32 -05002857
Cary Clark777eede2018-11-09 16:04:58 -05002858<a href='#Blend_Mode'>Blend_Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination <a href='SkColor_Reference#Color'>color</a>.
2859The default setting, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>, draws the source <a href='SkColor_Reference#Color'>color</a>
2860over the destination <a href='SkColor_Reference#Color'>color</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002861
2862### Example
2863
Cary Clark83647062018-07-18 16:21:51 -04002864<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002865
2866### See Also
2867
Cary Clark77b3f3a2018-11-07 14:59:03 -05002868<a href='#Blend_Mode'>Blend_Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002869
Cary Clark682c58d2018-05-16 07:07:07 -04002870<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002871
2872---
Cary Clark12799e12017-07-28 15:18:29 -04002873
Cary Clark682c58d2018-05-16 07:07:07 -04002874<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002875<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002876</pre>
2877
Cary Clark09d80c02018-10-31 12:14:03 -04002878Returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>.
2879By default, returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002880
2881### Return Value
2882
Cary Clark777eede2018-11-09 16:04:58 -05002883mode 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 -04002884
2885### Example
2886
skia-bookmaker525f9a92018-05-03 06:27:39 +00002887<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04002888
2889#### Example Output
2890
2891~~~~
2892kSrcOver == getBlendMode
2893kSrcOver != getBlendMode
2894~~~~
2895
2896</fiddle-embed></div>
2897
Cary Clark682c58d2018-05-16 07:07:07 -04002898<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002899
2900---
Cary Clark12799e12017-07-28 15:18:29 -04002901
Cary Clark682c58d2018-05-16 07:07:07 -04002902<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002903bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002904</pre>
2905
Cary Clark777eede2018-11-09 16:04:58 -05002906Returns 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 -04002907
2908### Return Value
2909
Cary Clark777eede2018-11-09 16:04:58 -05002910true 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 -04002911
2912### Example
2913
2914<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2915
2916#### Example Output
2917
2918~~~~
2919isSrcOver == true
2920isSrcOver != true
2921~~~~
2922
2923</fiddle-embed></div>
2924
Cary Clark682c58d2018-05-16 07:07:07 -04002925<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002926
2927---
Cary Clark12799e12017-07-28 15:18:29 -04002928
Cary Clark682c58d2018-05-16 07:07:07 -04002929<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002930void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04002931</pre>
2932
Cary Clark777eede2018-11-09 16:04:58 -05002933Sets <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002934Does not check for valid input.
2935
2936### Parameters
2937
Cary Clark682c58d2018-05-16 07:07:07 -04002938<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002939 <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 -04002940 </tr>
2941</table>
2942
2943### Example
2944
2945<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2946
2947#### Example Output
2948
2949~~~~
2950isSrcOver == true
2951isSrcOver != true
2952~~~~
2953
2954</fiddle-embed></div>
2955
Cary Clarka90ea222018-10-16 10:30:28 -04002956<a name='Path_Effect_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002957
Cary Clarka90ea222018-10-16 10:30:28 -04002958---
Cary Clark08895c42018-02-01 09:37:32 -05002959
Cary Clark777eede2018-11-09 16:04:58 -05002960<a href='#Path_Effect'>Path_Effect</a> modifies the <a href='SkPath_Reference#Path'>path</a> geometry before drawing it.
2961<a href='#Path_Effect'>Path_Effect</a> may implement dashing, custom fill effects and custom stroke effects.
2962If <a href='SkPaint_Reference#Paint'>Paint</a> has no <a href='#Path_Effect'>Path_Effect</a>, the <a href='SkPath_Reference#Path'>path</a> geometry is unaltered when filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002963
2964### Example
2965
2966<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
2967
2968### See Also
2969
Cary Clark77b3f3a2018-11-07 14:59:03 -05002970<a href='#Path_Effect'>Path_Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002971
Cary Clark682c58d2018-05-16 07:07:07 -04002972<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002973
2974---
Cary Clark12799e12017-07-28 15:18:29 -04002975
Cary Clark682c58d2018-05-16 07:07:07 -04002976<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002977<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002978</pre>
2979
Cary Clark777eede2018-11-09 16:04:58 -05002980Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002981Does not alter <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002982
2983### Return Value
2984
Cary Clark777eede2018-11-09 16:04:58 -05002985<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002986
2987### Example
2988
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002989<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04002990
2991#### Example Output
2992
2993~~~~
2994nullptr == path effect
2995nullptr != path effect
2996~~~~
2997
2998</fiddle-embed></div>
2999
Cary Clark682c58d2018-05-16 07:07:07 -04003000<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003001
3002---
Cary Clark12799e12017-07-28 15:18:29 -04003003
Cary Clark682c58d2018-05-16 07:07:07 -04003004<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003005<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 -04003006</pre>
3007
Cary Clark777eede2018-11-09 16:04:58 -05003008Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
3009Increases <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003010
3011### Return Value
3012
Cary Clark777eede2018-11-09 16:04:58 -05003013<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003014
3015### Example
3016
Cary Clark83647062018-07-18 16:21:51 -04003017<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003018
3019#### Example Output
3020
3021~~~~
3022path effect unique: true
3023path effect unique: false
3024~~~~
3025
3026</fiddle-embed></div>
3027
Cary Clark682c58d2018-05-16 07:07:07 -04003028<a name='SkPaint_setPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003029
3030---
Cary Clark12799e12017-07-28 15:18:29 -04003031
Cary Clark682c58d2018-05-16 07:07:07 -04003032<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003033void <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 -04003034</pre>
3035
Cary Clark777eede2018-11-09 16:04:58 -05003036Sets <a href='undocumented#SkPathEffect'>SkPathEffect</a> to <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3037<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 -04003038
Cary Clark777eede2018-11-09 16:04:58 -05003039Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003040
3041### Parameters
3042
Cary Clark682c58d2018-05-16 07:07:07 -04003043<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003044 <td>replace <a href='SkPath_Reference#SkPath'>SkPath</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003045 </tr>
3046</table>
3047
3048### Example
3049
3050<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3051
Cary Clarka90ea222018-10-16 10:30:28 -04003052<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003053
Cary Clarka90ea222018-10-16 10:30:28 -04003054---
Cary Clark08895c42018-02-01 09:37:32 -05003055
Cary Clark777eede2018-11-09 16:04:58 -05003056<a href='#Mask_Filter'>Mask_Filter</a> uses coverage of the shape drawn to create <a href='#Mask_Alpha'>Mask_Alpha</a>.
3057<a href='#Mask_Filter'>Mask_Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003058
Cary Clark777eede2018-11-09 16:04:58 -05003059<a href='#Mask_Filter'>Mask_Filter</a> may change the geometry and transparency of the shape, such as
3060creating a blur effect. Set <a href='#Mask_Filter'>Mask_Filter</a> to nullptr to prevent <a href='#Mask_Filter'>Mask_Filter</a> from
3061modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003062
3063### Example
3064
Cary Clark681287e2018-03-16 11:34:15 -04003065<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003066
Cary Clark682c58d2018-05-16 07:07:07 -04003067<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003068
3069---
Cary Clark12799e12017-07-28 15:18:29 -04003070
Cary Clark682c58d2018-05-16 07:07:07 -04003071<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003072<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003073</pre>
3074
Cary Clark777eede2018-11-09 16:04:58 -05003075Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003076Does not alter <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003077
3078### Return Value
3079
Cary Clark777eede2018-11-09 16:04:58 -05003080<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003081
3082### Example
3083
Cary Clark681287e2018-03-16 11:34:15 -04003084<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003085
3086#### Example Output
3087
3088~~~~
3089nullptr == mask filter
3090nullptr != mask filter
3091~~~~
3092
3093</fiddle-embed></div>
3094
Cary Clark682c58d2018-05-16 07:07:07 -04003095<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003096
3097---
Cary Clark12799e12017-07-28 15:18:29 -04003098
Cary Clark682c58d2018-05-16 07:07:07 -04003099<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003100<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 -04003101</pre>
3102
Cary Clark777eede2018-11-09 16:04:58 -05003103Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003104
Cary Clark777eede2018-11-09 16:04:58 -05003105Increases <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003106
3107### Return Value
3108
Cary Clark777eede2018-11-09 16:04:58 -05003109<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003110
3111### Example
3112
Cary Clark83647062018-07-18 16:21:51 -04003113<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003114
3115#### Example Output
3116
3117~~~~
3118mask filter unique: true
3119mask filter unique: false
3120~~~~
3121
3122</fiddle-embed></div>
3123
Cary Clark682c58d2018-05-16 07:07:07 -04003124<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003125
3126---
Cary Clark12799e12017-07-28 15:18:29 -04003127
Cary Clark682c58d2018-05-16 07:07:07 -04003128<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003129void <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 -04003130</pre>
3131
Cary Clark777eede2018-11-09 16:04:58 -05003132Sets <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> to <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3133<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
Cary Clark09d80c02018-10-31 12:14:03 -04003134<a href='undocumented#Mask_Alpha'>mask alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003135
Cary Clark777eede2018-11-09 16:04:58 -05003136Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003137
3138### Parameters
3139
Cary Clark682c58d2018-05-16 07:07:07 -04003140<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3141 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003142 </tr>
3143</table>
3144
3145### Example
3146
Cary Clark681287e2018-03-16 11:34:15 -04003147<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003148
Cary Clarka90ea222018-10-16 10:30:28 -04003149<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003150
Cary Clarka90ea222018-10-16 10:30:28 -04003151---
Cary Clark08895c42018-02-01 09:37:32 -05003152
Cary Clark777eede2018-11-09 16:04:58 -05003153<a href='undocumented#Typeface'>Typeface</a> identifies the <a href='undocumented#Font'>font</a> used when drawing and measuring <a href='undocumented#Text'>text</a>.
3154<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a <a href='undocumented#Data'>data</a> <a href='SkStream_Reference#Stream'>stream</a>.
3155The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default <a href='undocumented#Font'>font</a>
3156implementation.
Cary Clark12799e12017-07-28 15:18:29 -04003157
3158### Example
3159
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003160<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003161
Cary Clark682c58d2018-05-16 07:07:07 -04003162<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003163
3164---
Cary Clark12799e12017-07-28 15:18:29 -04003165
Cary Clark682c58d2018-05-16 07:07:07 -04003166<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003167<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003168</pre>
3169
Cary Clark777eede2018-11-09 16:04:58 -05003170Returns <a href='undocumented#SkTypeface'>SkTypeface</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003171Does not alter <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003172
3173### Return Value
3174
Cary Clark777eede2018-11-09 16:04:58 -05003175<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003176
3177### Example
3178
Cary Clarkf9603982018-07-17 08:20:27 -04003179<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003180
3181#### Example Output
3182
3183~~~~
3184nullptr == typeface
3185nullptr != typeface
3186~~~~
3187
3188</fiddle-embed></div>
3189
Cary Clark682c58d2018-05-16 07:07:07 -04003190<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003191
3192---
Cary Clark12799e12017-07-28 15:18:29 -04003193
Cary Clark682c58d2018-05-16 07:07:07 -04003194<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003195<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 -04003196</pre>
3197
Cary Clark777eede2018-11-09 16:04:58 -05003198Increases <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003199
3200### Return Value
3201
Cary Clark777eede2018-11-09 16:04:58 -05003202<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003203
3204### Example
3205
Cary Clark83647062018-07-18 16:21:51 -04003206<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003207
3208#### Example Output
3209
3210~~~~
3211typeface1 != typeface2
3212typeface1 == typeface2
3213~~~~
3214
3215</fiddle-embed></div>
3216
Cary Clark682c58d2018-05-16 07:07:07 -04003217<a name='SkPaint_setTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003218
3219---
Cary Clark12799e12017-07-28 15:18:29 -04003220
Cary Clark682c58d2018-05-16 07:07:07 -04003221<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003222void <a href='#SkPaint_setTypeface'>setTypeface</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkTypeface'>SkTypeface</a>&gt; <a href='undocumented#Typeface'>typeface</a>)
Cary Clark12799e12017-07-28 15:18:29 -04003223</pre>
3224
Cary Clark777eede2018-11-09 16:04:58 -05003225Sets <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>.
3226Pass nullptr to clear <a href='undocumented#SkTypeface'>SkTypeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3227<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003228
3229### Parameters
3230
Cary Clark682c58d2018-05-16 07:07:07 -04003231<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003232 <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 -04003233 </tr>
3234</table>
3235
3236### Example
3237
Cary Clark71961fb2018-01-05 14:21:59 -05003238<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003239
Cary Clarka90ea222018-10-16 10:30:28 -04003240<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003241
Cary Clarka90ea222018-10-16 10:30:28 -04003242---
Cary Clark08895c42018-02-01 09:37:32 -05003243
Cary Clark777eede2018-11-09 16:04:58 -05003244<a href='#Image_Filter'>Image_Filter</a> operates on the <a href='undocumented#Pixel'>pixel</a> representation of the shape, as modified by <a href='SkPaint_Reference#Paint'>Paint</a>
3245with <a href='#Blend_Mode'>Blend_Mode</a> set to <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>. <a href='#Image_Filter'>Image_Filter</a> creates a new <a href='SkBitmap_Reference#Bitmap'>bitmap</a>,
3246which is drawn to the <a href='undocumented#Device'>device</a> using the set <a href='#Blend_Mode'>Blend_Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003247
Cary Clark777eede2018-11-09 16:04:58 -05003248<a href='#Image_Filter'>Image_Filter</a> is higher level than <a href='#Mask_Filter'>Mask_Filter</a>; for instance, an <a href='#Image_Filter'>Image_Filter</a>
3249can operate on all channels of <a href='SkColor_Reference#Color'>Color</a>, while <a href='#Mask_Filter'>Mask_Filter</a> generates <a href='SkColor_Reference#Alpha'>Alpha</a> only.
3250<a href='#Image_Filter'>Image_Filter</a> operates independently of and can be used in combination with
Cary Clark77b3f3a2018-11-07 14:59:03 -05003251<a href='#Mask_Filter'>Mask_Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003252
3253### Example
3254
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003255<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003256
Cary Clark682c58d2018-05-16 07:07:07 -04003257<a name='SkPaint_getImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003258
3259---
Cary Clark12799e12017-07-28 15:18:29 -04003260
Cary Clark682c58d2018-05-16 07:07:07 -04003261<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003262<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003263</pre>
3264
Cary Clark777eede2018-11-09 16:04:58 -05003265Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003266Does not alter <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003267
3268### Return Value
3269
Cary Clark777eede2018-11-09 16:04:58 -05003270<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003271
3272### Example
3273
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003274<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003275
3276#### Example Output
3277
3278~~~~
3279nullptr == image filter
3280nullptr != image filter
3281~~~~
3282
3283</fiddle-embed></div>
3284
Cary Clark682c58d2018-05-16 07:07:07 -04003285<a name='SkPaint_refImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003286
3287---
Cary Clark12799e12017-07-28 15:18:29 -04003288
Cary Clark682c58d2018-05-16 07:07:07 -04003289<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003290<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 -04003291</pre>
3292
Cary Clark777eede2018-11-09 16:04:58 -05003293Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
3294Increases <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003295
3296### Return Value
3297
Cary Clark777eede2018-11-09 16:04:58 -05003298<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003299
3300### Example
3301
3302<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3303
3304#### Example Output
3305
3306~~~~
3307image filter unique: true
3308image filter unique: false
3309~~~~
3310
3311</fiddle-embed></div>
3312
Cary Clark682c58d2018-05-16 07:07:07 -04003313<a name='SkPaint_setImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003314
3315---
Cary Clark12799e12017-07-28 15:18:29 -04003316
Cary Clark682c58d2018-05-16 07:07:07 -04003317<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003318void <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 -04003319</pre>
3320
Cary Clark777eede2018-11-09 16:04:58 -05003321Sets <a href='undocumented#SkImageFilter'>SkImageFilter</a> to <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3322<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 -04003323on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003324
Cary Clark777eede2018-11-09 16:04:58 -05003325Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003326
3327### Parameters
3328
Cary Clark682c58d2018-05-16 07:07:07 -04003329<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003330 <td>how <a href='SkImage_Reference#SkImage'>SkImage</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003331 </tr>
3332</table>
3333
3334### Example
3335
3336<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3337
Cary Clarka90ea222018-10-16 10:30:28 -04003338<a name='Draw_Looper_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003339
Cary Clarka90ea222018-10-16 10:30:28 -04003340---
Cary Clark08895c42018-02-01 09:37:32 -05003341
Cary Clark777eede2018-11-09 16:04:58 -05003342<a href='#Draw_Looper'>Draw_Looper</a> sets a modifier that communicates state from one <a href='#Draw_Layer'>Draw_Layer</a>
3343to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003344
Cary Clark777eede2018-11-09 16:04:58 -05003345<a href='#Draw_Looper'>Draw_Looper</a> draws one or more times, modifying the <a href='SkCanvas_Reference#Canvas'>canvas</a> and <a href='SkPaint_Reference#Paint'>paint</a> each time.
3346<a href='#Draw_Looper'>Draw_Looper</a> may be used to draw multiple colors or create a colored shadow.
3347Set <a href='#Draw_Looper'>Draw_Looper</a> to nullptr to prevent <a href='#Draw_Looper'>Draw_Looper</a> from modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003348
3349### Example
3350
3351<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3352
Cary Clark682c58d2018-05-16 07:07:07 -04003353<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003354
3355---
Cary Clark12799e12017-07-28 15:18:29 -04003356
Cary Clark682c58d2018-05-16 07:07:07 -04003357<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003358<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003359</pre>
3360
Cary Clark777eede2018-11-09 16:04:58 -05003361Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003362Does not alter <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003363
3364### Return Value
3365
Cary Clark777eede2018-11-09 16:04:58 -05003366<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003367
3368### Example
3369
3370<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3371
3372#### Example Output
3373
3374~~~~
3375nullptr == draw looper
3376nullptr != draw looper
3377~~~~
3378
3379</fiddle-embed></div>
3380
Cary Clark682c58d2018-05-16 07:07:07 -04003381<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003382
3383---
Cary Clark12799e12017-07-28 15:18:29 -04003384
Cary Clark682c58d2018-05-16 07:07:07 -04003385<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003386<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 -04003387</pre>
3388
Cary Clark777eede2018-11-09 16:04:58 -05003389Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
3390Increases <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003391
3392### Return Value
3393
Cary Clark777eede2018-11-09 16:04:58 -05003394<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003395
3396### Example
3397
3398<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3399
3400#### Example Output
3401
3402~~~~
3403draw looper unique: true
3404draw looper unique: false
3405~~~~
3406
3407</fiddle-embed></div>
3408
Cary Clark682c58d2018-05-16 07:07:07 -04003409<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003410
3411---
Cary Clark12799e12017-07-28 15:18:29 -04003412
Cary Clark682c58d2018-05-16 07:07:07 -04003413<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkabaffd82018-11-15 08:25:12 -05003414void <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 -04003415</pre>
3416
Cary Clark777eede2018-11-09 16:04:58 -05003417Sets <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> to <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3418<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 -04003419drawing unaltered.
3420
Cary Clark777eede2018-11-09 16:04:58 -05003421Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003422
3423### Parameters
3424
Cary Clark682c58d2018-05-16 07:07:07 -04003425<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003426 <td>iterates through drawing one or more time, altering <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003427 </tr>
3428</table>
3429
3430### Example
3431
3432<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3433
Cary Clarka90ea222018-10-16 10:30:28 -04003434<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003435
Cary Clarka90ea222018-10-16 10:30:28 -04003436---
Cary Clark08895c42018-02-01 09:37:32 -05003437
Cary Clark777eede2018-11-09 16:04:58 -05003438<a href='#Paint_Text_Size'>Text_Size</a> adjusts the overall <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
3439<a href='#Paint_Text_Size'>Text_Size</a> can be set to any positive value or zero.
3440<a href='#Paint_Text_Size'>Text_Size</a> defaults to 12.
3441Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults_TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003442
3443### Example
3444
3445<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3446
Cary Clark682c58d2018-05-16 07:07:07 -04003447<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003448
3449---
Cary Clark12799e12017-07-28 15:18:29 -04003450
Cary Clark682c58d2018-05-16 07:07:07 -04003451<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003452<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003453</pre>
3454
Cary Clark777eede2018-11-09 16:04:58 -05003455Returns <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a> in <a href='SkPoint_Reference#Point'>points</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003456
3457### Return Value
3458
Cary Clark09d80c02018-10-31 12:14:03 -04003459typographic height of <a href='undocumented#Text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04003460
3461### Example
3462
skia-bookmaker233c6522018-07-04 05:33:26 +00003463<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003464
Cary Clark682c58d2018-05-16 07:07:07 -04003465<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003466
3467---
Cary Clark12799e12017-07-28 15:18:29 -04003468
Cary Clark682c58d2018-05-16 07:07:07 -04003469<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003470void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003471</pre>
3472
Cary Clark777eede2018-11-09 16:04:58 -05003473Sets <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
3474Has 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 -04003475
3476### Parameters
3477
Cary Clark682c58d2018-05-16 07:07:07 -04003478<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003479 <td>typographic height of <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003480 </tr>
3481</table>
3482
3483### Example
3484
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003485<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003486
Cary Clarka90ea222018-10-16 10:30:28 -04003487<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003488
Cary Clarka90ea222018-10-16 10:30:28 -04003489---
Cary Clark08895c42018-02-01 09:37:32 -05003490
Cary Clark777eede2018-11-09 16:04:58 -05003491<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal scale.
3492<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
3493is not available.
3494<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> can be set to any value.
3495<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003496
3497### Example
3498
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003499<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003500
Cary Clark682c58d2018-05-16 07:07:07 -04003501<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003502
3503---
Cary Clark12799e12017-07-28 15:18:29 -04003504
Cary Clark682c58d2018-05-16 07:07:07 -04003505<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003506<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003507</pre>
3508
Cary Clark777eede2018-11-09 16:04:58 -05003509Returns <a href='undocumented#Text'>text</a> scale on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003510Default value is 1.
3511
3512### Return Value
3513
Cary Clark777eede2018-11-09 16:04:58 -05003514<a href='undocumented#Text'>text</a> horizontal scale
Cary Clark12799e12017-07-28 15:18:29 -04003515
3516### Example
3517
3518<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3519
Cary Clark682c58d2018-05-16 07:07:07 -04003520<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003521
3522---
Cary Clark12799e12017-07-28 15:18:29 -04003523
Cary Clark682c58d2018-05-16 07:07:07 -04003524<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003525void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003526</pre>
3527
Cary Clark777eede2018-11-09 16:04:58 -05003528Sets <a href='undocumented#Text'>text scale</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003529Default value is 1.
3530
3531### Parameters
3532
Cary Clark682c58d2018-05-16 07:07:07 -04003533<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003534 <td><a href='undocumented#Text'>text</a> horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003535 </tr>
3536</table>
3537
3538### Example
3539
3540<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3541
Cary Clarka90ea222018-10-16 10:30:28 -04003542<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003543
Cary Clarka90ea222018-10-16 10:30:28 -04003544---
Cary Clark08895c42018-02-01 09:37:32 -05003545
Cary Clark777eede2018-11-09 16:04:58 -05003546<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal slant.
3547<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
3548is not available.
3549<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> can be set to any value.
3550<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003551
3552### Example
3553
3554<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3555
Cary Clark682c58d2018-05-16 07:07:07 -04003556<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003557
3558---
Cary Clark12799e12017-07-28 15:18:29 -04003559
Cary Clark682c58d2018-05-16 07:07:07 -04003560<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003561<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003562</pre>
3563
Cary Clark777eede2018-11-09 16:04:58 -05003564Returns <a href='undocumented#Text'>text</a> skew on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003565Default value is zero.
3566
3567### Return Value
3568
Cary Clark09d80c02018-10-31 12:14:03 -04003569additional shear on x-axis relative to y-axis
Cary Clark12799e12017-07-28 15:18:29 -04003570
3571### Example
3572
Cary Clark7f644ec2018-07-19 10:50:44 -04003573<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003574
Cary Clark682c58d2018-05-16 07:07:07 -04003575<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003576
3577---
Cary Clark12799e12017-07-28 15:18:29 -04003578
Cary Clark682c58d2018-05-16 07:07:07 -04003579<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003580void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003581</pre>
3582
Cary Clark777eede2018-11-09 16:04:58 -05003583Sets <a href='undocumented#Text'>text skew</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003584Default value is zero.
3585
3586### Parameters
3587
Cary Clark682c58d2018-05-16 07:07:07 -04003588<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003589 <td>additional shear on x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003590 </tr>
3591</table>
3592
3593### Example
3594
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003595<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003596
Cary Clarka90ea222018-10-16 10:30:28 -04003597<a name='Text_Encoding'></a>
3598
Cary Clark12799e12017-07-28 15:18:29 -04003599---
3600
Cary Clarka90ea222018-10-16 10:30:28 -04003601<a name='SkPaint_TextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003602
Cary Clarka90ea222018-10-16 10:30:28 -04003603---
Cary Clark12799e12017-07-28 15:18:29 -04003604
Cary Clarka560c472017-11-27 10:44:06 -05003605<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003606 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04003607 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
3608 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
3609 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
3610 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003611 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003612</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003613
Cary Clark777eede2018-11-09 16:04:58 -05003614<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether <a href='undocumented#Text'>text</a> specifies character codes and their encoded
3615<a href='undocumented#Size'>size</a>, or <a href='undocumented#Glyph'>glyph</a> indices. Characters are encoded as specified by the
Cary Clark77b3f3a2018-11-07 14:59:03 -05003616<a href='https://unicode.org/standard/standard.html'>Unicode standard</a></a> .
Cary Clark6fc50412017-09-21 12:31:06 -04003617
Cary Clark777eede2018-11-09 16:04:58 -05003618Character codes encoded <a href='undocumented#Size'>size</a> are specified by UTF-8, UTF-16, or UTF-32.
3619All character code formats are able to represent all of Unicode, differing only
3620in the total storage required.
Cary Clark12799e12017-07-28 15:18:29 -04003621
Cary Clark682c58d2018-05-16 07:07:07 -04003622<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 -04003623
Cary Clark682c58d2018-05-16 07:07:07 -04003624<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 -04003625
Cary Clark682c58d2018-05-16 07:07:07 -04003626<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 -04003627
Cary Clark777eede2018-11-09 16:04:58 -05003628<a href='#Font_Manager'>Font_Manager</a> uses <a href='undocumented#Font'>font</a> <a href='undocumented#Data'>data</a> to convert character code <a href='SkPoint_Reference#Point'>points</a> into <a href='undocumented#Glyph'>glyph</a> indices.
3629A <a href='undocumented#Glyph'>glyph</a> index is a 16-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003630
Cary Clark777eede2018-11-09 16:04:58 -05003631<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 -04003632
3633### Constants
3634
Cary Clark682c58d2018-05-16 07:07:07 -04003635<table style='border-collapse: collapse; width: 62.5em'>
3636 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3637<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3638<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3639 <tr style='background-color: #f0f0f0; '>
3640 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
3641 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3642 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3643uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04003644 </tr>
3645 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003646 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
3647 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3648 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3649uses two byte words to represent most of Unicode</td>
3650 </tr>
3651 <tr style='background-color: #f0f0f0; '>
3652 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
3653 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3654 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3655uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04003656 </tr>
3657 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003658 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
3659 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3660 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3661uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04003662 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003663</table>
Cary Clark12799e12017-07-28 15:18:29 -04003664
3665### Example
3666
Cary Clark777eede2018-11-09 16:04:58 -05003667<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First <a href='undocumented#Line'>line</a> is encoded in UTF-8.
3668Second <a href='undocumented#Line'>line</a> is encoded in UTF-16.
3669Third <a href='undocumented#Line'>line</a> is encoded in UTF-32.
3670Fourth <a href='undocumented#Line'>line</a> has 16-bit <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003671</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003672
Cary Clark682c58d2018-05-16 07:07:07 -04003673<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003674
3675---
Cary Clark12799e12017-07-28 15:18:29 -04003676
Cary Clark682c58d2018-05-16 07:07:07 -04003677<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003678<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003679</pre>
3680
Cary Clark09d80c02018-10-31 12:14:03 -04003681Returns <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003682<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 -04003683
3684### Return Value
3685
Cary Clark777eede2018-11-09 16:04:58 -05003686one 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
Cary Clark09d80c02018-10-31 12:14:03 -04003687
3688<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003689
3690### Example
3691
skia-bookmaker525f9a92018-05-03 06:27:39 +00003692<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04003693
3694#### Example Output
3695
3696~~~~
3697kUTF8_TextEncoding == text encoding
3698kGlyphID_TextEncoding == text encoding
3699~~~~
3700
3701</fiddle-embed></div>
3702
Cary Clark682c58d2018-05-16 07:07:07 -04003703<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003704
3705---
Cary Clark12799e12017-07-28 15:18:29 -04003706
Cary Clark682c58d2018-05-16 07:07:07 -04003707<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003708void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04003709</pre>
3710
Cary Clark777eede2018-11-09 16:04:58 -05003711Sets <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
3712<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.
3713Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003714
3715### Parameters
3716
Cary Clark682c58d2018-05-16 07:07:07 -04003717<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003718 <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 -04003719 </tr>
3720</table>
3721
Cary Clark09d80c02018-10-31 12:14:03 -04003722<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
3723
Cary Clark12799e12017-07-28 15:18:29 -04003724### Example
3725
Cary Clark75fd4492018-06-20 12:45:16 -04003726<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04003727
3728#### Example Output
3729
3730~~~~
37314 != text encoding
3732~~~~
3733
3734</fiddle-embed></div>
3735
Cary Clark61313f32018-10-08 14:57:48 -04003736<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04003737
Cary Clarka90ea222018-10-16 10:30:28 -04003738---
3739
Cary Clark7e69c8f2018-11-06 20:40:45 -05003740<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003741
Cary Clark682c58d2018-05-16 07:07:07 -04003742<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003743
3744---
Cary Clark12799e12017-07-28 15:18:29 -04003745
Cary Clark682c58d2018-05-16 07:07:07 -04003746<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003747<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='undocumented#SkFontMetrics'>SkFontMetrics</a>* metrics) const
Cary Clark12799e12017-07-28 15:18:29 -04003748</pre>
3749
Cary Clark777eede2018-11-09 16:04:58 -05003750Returns <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> associated with <a href='undocumented#SkTypeface'>SkTypeface</a>.
3751The 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 -04003752descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003753If <a href='#SkPaint_getFontMetrics_metrics'>metrics</a> is not nullptr, <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> is copied to <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>.
3754Results are scaled by <a href='#Text_Size'>text size</a> but does not take into account
Cary Clark09d80c02018-10-31 12:14:03 -04003755dimensions 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>,
3756<a href='#Style_Stroke'>style stroke</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003757
3758### Parameters
3759
Cary Clark682c58d2018-05-16 07:07:07 -04003760<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003761 <td>storage for <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003762 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04003763</table>
3764
3765### Return Value
3766
Cary Clark09d80c02018-10-31 12:14:03 -04003767recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003768
3769### Example
3770
skia-bookmaker2dc1e342018-11-02 05:33:11 +00003771<div><fiddle-embed name="59d9b8249afa1c2af6186711250ce240"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003772
3773### See Also
3774
Cary Clark77b3f3a2018-11-07 14:59:03 -05003775<a href='#Paint_Text_Size'>Text_Size</a> <a href='undocumented#Typeface'>Typeface</a> <a href='#Paint_Typeface_Methods'>Typeface_Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04003776
Cary Clark682c58d2018-05-16 07:07:07 -04003777<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003778
3779---
Cary Clark12799e12017-07-28 15:18:29 -04003780
Cary Clark682c58d2018-05-16 07:07:07 -04003781<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003782<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003783</pre>
3784
Cary Clark777eede2018-11-09 16:04:58 -05003785Returns the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of metrics
Cary Clark12799e12017-07-28 15:18:29 -04003786descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003787Result is scaled by <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a> but does not take into account
Cary Clark09d80c02018-10-31 12:14:03 -04003788dimensions required by stroking and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
3789Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003790
3791### Return Value
3792
Cary Clark09d80c02018-10-31 12:14:03 -04003793recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003794
3795### Example
3796
3797<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
3798
3799#### Example Output
3800
3801~~~~
3802textSize: 12 fontSpacing: 13.9688
3803textSize: 18 fontSpacing: 20.9531
3804textSize: 24 fontSpacing: 27.9375
3805textSize: 32 fontSpacing: 37.25
3806~~~~
3807
3808</fiddle-embed></div>
3809
Cary Clark682c58d2018-05-16 07:07:07 -04003810<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003811
3812---
Cary Clark12799e12017-07-28 15:18:29 -04003813
Cary Clark682c58d2018-05-16 07:07:07 -04003814<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003815int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength, <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[]) const
Cary Clark12799e12017-07-28 15:18:29 -04003816</pre>
3817
Cary Clark777eede2018-11-09 16:04:58 -05003818Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into <a href='undocumented#Glyph'>glyph</a> indices.
3819Returns the number of <a href='undocumented#Glyph'>glyph</a> indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
3820<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>.
3821<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 -04003822
Cary Clark777eede2018-11-09 16:04:58 -05003823Does 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 -04003824
Cary Clark777eede2018-11-09 16:04:58 -05003825If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
3826If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003827
Cary Clark777eede2018-11-09 16:04:58 -05003828If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a> and
3829<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04003830
3831### Parameters
3832
Cary Clark682c58d2018-05-16 07:07:07 -04003833<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003834 <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 -04003835 </tr>
3836 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
3837 <td>length of character storage in bytes</td>
3838 </tr>
3839 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003840 <td>storage for <a href='undocumented#Glyph'>glyph</a> indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003841 </tr>
3842</table>
3843
3844### Return Value
3845
Cary Clark777eede2018-11-09 16:04:58 -05003846number 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 -04003847
3848### Example
3849
3850<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
3851
Cary Clark682c58d2018-05-16 07:07:07 -04003852<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003853
3854---
Cary Clark12799e12017-07-28 15:18:29 -04003855
Cary Clark682c58d2018-05-16 07:07:07 -04003856<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003857int <a href='#SkPaint_countText'>countText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04003858</pre>
3859
Cary Clark777eede2018-11-09 16:04:58 -05003860Returns the number of <a href='undocumented#Glyph'>glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
3861Uses <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to count the <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04003862Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003863
3864### Parameters
3865
Cary Clark682c58d2018-05-16 07:07:07 -04003866<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003867 <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 -04003868 </tr>
3869 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
3870 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04003871 </tr>
3872</table>
3873
3874### Return Value
3875
Cary Clark777eede2018-11-09 16:04:58 -05003876number 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 -04003877
3878### Example
3879
Cary Clarkf9603982018-07-17 08:20:27 -04003880<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04003881
3882#### Example Output
3883
3884~~~~
3885count = 5
3886~~~~
3887
3888</fiddle-embed></div>
3889
Cary Clark682c58d2018-05-16 07:07:07 -04003890<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003891
3892---
Cary Clark12799e12017-07-28 15:18:29 -04003893
Cary Clark682c58d2018-05-16 07:07:07 -04003894<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003895bool <a href='#SkPaint_containsText'>containsText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04003896</pre>
3897
Cary Clark777eede2018-11-09 16:04:58 -05003898Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index.
3899Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
Cary Clark09d80c02018-10-31 12:14:03 -04003900<a href='undocumented#SkTypeface'>SkTypeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003901
Cary Clark777eede2018-11-09 16:04:58 -05003902If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
3903returns true if all <a href='undocumented#Glyph'>glyph</a> indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
3904does 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 -04003905
Cary Clark777eede2018-11-09 16:04:58 -05003906Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04003907
3908### Parameters
3909
Cary Clark682c58d2018-05-16 07:07:07 -04003910<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003911 <td>array of characters or <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003912 </tr>
3913 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003914 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04003915 </tr>
3916</table>
3917
3918### Return Value
3919
Cary Clark777eede2018-11-09 16:04:58 -05003920true 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 -04003921
Cary Clark777eede2018-11-09 16:04:58 -05003922<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a <a href='undocumented#Glyph'>glyph</a> index
3923corresponding to the Unicode surrogate code <a href='SkPoint_Reference#Point'>point</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003924</div>
Cary Clark12799e12017-07-28 15:18:29 -04003925
3926#### Example Output
3927
3928~~~~
39290x00b0 == has char
39300xd800 != has char
3931~~~~
3932
Cary Clark12799e12017-07-28 15:18:29 -04003933### Example
3934
Cary Clark777eede2018-11-09 16:04:58 -05003935<div><fiddle-embed name="083557b6f653d6fc00a34e01f87b74ff"><div><a href='#SkPaint_containsText'>containsText</a> returns true that <a href='undocumented#Glyph'>glyph</a> index is greater than zero, not
3936that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003937</div>
Cary Clark12799e12017-07-28 15:18:29 -04003938
3939#### Example Output
3940
3941~~~~
39420x01ff == has glyph
39430x0000 != has glyph
39440xffff == has glyph
3945~~~~
3946
3947</fiddle-embed></div>
3948
3949### See Also
3950
Cary Clark682c58d2018-05-16 07:07:07 -04003951<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04003952
Cary Clark682c58d2018-05-16 07:07:07 -04003953<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003954
3955---
Cary Clark12799e12017-07-28 15:18:29 -04003956
Cary Clark682c58d2018-05-16 07:07:07 -04003957<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003958void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> <a href='undocumented#Text'>text</a>[]) const
Cary Clark12799e12017-07-28 15:18:29 -04003959</pre>
3960
Cary Clark777eede2018-11-09 16:04:58 -05003961Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
3962<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
3963Uses the <a href='undocumented#SkTypeface'>SkTypeface</a>, but is unaffected
3964by <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 -04003965
Cary Clark09d80c02018-10-31 12:14:03 -04003966Only supported on platforms that use FreeType as the <a href='undocumented#Font_Engine'>font engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003967
3968### Parameters
3969
Cary Clark682c58d2018-05-16 07:07:07 -04003970<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003971 <td>array of indices into <a href='undocumented#Font'>font</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003972 </tr>
3973 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003974 <td>length of <a href='undocumented#Glyph'>glyph</a> array</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003975 </tr>
3976 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003977 <td>storage for character codes, one per <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003978 </tr>
3979</table>
3980
3981### Example
3982
Cary Clark777eede2018-11-09 16:04:58 -05003983<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert UTF-8 <a href='#SkPaint_glyphsToUnichars_text'>text</a> to <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a>; then convert <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> to Unichar code <a href='SkPoint_Reference#Point'>points</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003984</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003985
Cary Clarka90ea222018-10-16 10:30:28 -04003986<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003987
Cary Clark682c58d2018-05-16 07:07:07 -04003988<a name='SkPaint_measureText'></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">
Cary Clark777eede2018-11-09 16:04:58 -05003993<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const
Cary Clark12799e12017-07-28 15:18:29 -04003994</pre>
3995
Cary Clark3aca39d2018-10-23 14:44:05 -04003996Returns the advance width of <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04003997The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003998Uses <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>,
3999and <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
4000<a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
4001Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
4002The 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 -04004003
4004### Parameters
4005
Cary Clark682c58d2018-05-16 07:07:07 -04004006<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004007 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004008 </tr>
4009 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004010 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004011 </tr>
4012 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
4013 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004014 </tr>
4015</table>
4016
4017### Return Value
4018
4019advance width or height
4020
4021### Example
4022
Cary Clark83647062018-07-18 16:21:51 -04004023<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004024
Cary Clark682c58d2018-05-16 07:07:07 -04004025<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05004026
Cary Clarka90ea222018-10-16 10:30:28 -04004027---
4028
Cary Clark682c58d2018-05-16 07:07:07 -04004029<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004030<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length) const
Cary Clark12799e12017-07-28 15:18:29 -04004031</pre>
4032
Cary Clark3aca39d2018-10-23 14:44:05 -04004033Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004034The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004035Uses <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>,
4036and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04004037Does 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 -04004038
4039### Parameters
4040
Cary Clark682c58d2018-05-16 07:07:07 -04004041<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004042 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004043 </tr>
4044 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004045 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004046 </tr>
4047</table>
4048
4049### Return Value
4050
4051advance width or height
4052
4053### Example
4054
4055<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4056
4057#### Example Output
4058
4059~~~~
4060default width = 5
4061double width = 10
4062~~~~
4063
4064</fiddle-embed></div>
4065
Cary Clark682c58d2018-05-16 07:07:07 -04004066<a name='SkPaint_breakText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004067
4068---
Cary Clark12799e12017-07-28 15:18:29 -04004069
Cary Clark682c58d2018-05-16 07:07:07 -04004070<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004071size_t <a href='#SkPaint_breakText'>breakText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
4072 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004073</pre>
4074
Cary Clark777eede2018-11-09 16:04:58 -05004075Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4076The <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 -04004077Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004078Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
4079Uses <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>,
4080and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04004081Does 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 -04004082
4083### Parameters
4084
Cary Clark682c58d2018-05-16 07:07:07 -04004085<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004086 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004087 </tr>
4088 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004089 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004090 </tr>
4091 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004092 <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>
Cary Clark682c58d2018-05-16 07:07:07 -04004093 </tr>
4094 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004095 <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 -04004096 </tr>
4097</table>
4098
4099### Return Value
4100
Cary Clark777eede2018-11-09 16:04:58 -05004101bytes 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 -04004102
4103### Example
4104
Cary Clark777eede2018-11-09 16:04:58 -05004105<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "Breakfast" shows desired width, shorter than available characters.
4106<a href='undocumented#Line'>Line</a> under "Bre" shows measured width after breaking <a href='#SkPaint_breakText_text'>text</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004107</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004108
Cary Clark682c58d2018-05-16 07:07:07 -04004109<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004110
4111---
Cary Clark12799e12017-07-28 15:18:29 -04004112
Cary Clark682c58d2018-05-16 07:07:07 -04004113<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004114int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* <a href='undocumented#Text'>text</a>, 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 -04004115</pre>
4116
Cary Clark777eede2018-11-09 16:04:58 -05004117Retrieves 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
4118the <a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4119Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4120If <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.
4121if <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.
4122Uses <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>,
4123and <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>.
Cary Clark09d80c02018-10-31 12:14:03 -04004124Does not scale the advance by <a href='#Fake_Bold'>fake bold</a> or <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004125Does 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 -04004126
4127### Parameters
4128
Cary Clark682c58d2018-05-16 07:07:07 -04004129<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004130 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004131 </tr>
4132 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004133 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004134 </tr>
4135 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004136 <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 -04004137 </tr>
4138 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004139 <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 -04004140 </tr>
4141</table>
4142
4143### Return Value
4144
Cary Clark777eede2018-11-09 16:04:58 -05004145<a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004146
4147### Example
4148
Cary Clark777eede2018-11-09 16:04:58 -05004149<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href='undocumented#Glyph'>Glyphs</a> increase for stroked <a href='#SkPaint_getTextWidths_text'>text</a>, but <a href='#SkPaint_getTextWidths_text'>text</a> advance remains the same.
4150The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004151</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004152
Cary Clarka90ea222018-10-16 10:30:28 -04004153<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004154
Cary Clark777eede2018-11-09 16:04:58 -05004155<a href='#Paint_Text_Path'>Text_Path</a> describes the geometry of <a href='undocumented#Glyph'>Glyphs</a> used to draw <a href='undocumented#Text'>text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004156
Cary Clark682c58d2018-05-16 07:07:07 -04004157<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004158
4159---
Cary Clark12799e12017-07-28 15:18:29 -04004160
Cary Clark682c58d2018-05-16 07:07:07 -04004161<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004162void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y, <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const
Cary Clark12799e12017-07-28 15:18:29 -04004163</pre>
4164
Cary Clark777eede2018-11-09 16:04:58 -05004165Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
4166Uses <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>,
4167and <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>.
4168All 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>.
4169Uses <a href='#SkPaint_getTextPath_x'>x</a>, <a href='#SkPaint_getTextPath_y'>y</a>, to position <a href='#SkPaint_getTextPath_path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004170
4171### Parameters
4172
Cary Clark682c58d2018-05-16 07:07:07 -04004173<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004174 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004175 </tr>
4176 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4177 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4178 </tr>
4179 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004180 <td>x-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004181 </tr>
4182 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004183 <td>y-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004184 </tr>
4185 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004186 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004187 </tr>
4188</table>
4189
4190### Example
4191
Cary Clark777eede2018-11-09 16:04:58 -05004192<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
4193the offset location. The result is rendered with one draw call.
Cary Clark1a8d7622018-03-05 13:26:16 -05004194</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004195
Cary Clark682c58d2018-05-16 07:07:07 -04004196<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004197
4198---
Cary Clark12799e12017-07-28 15:18:29 -04004199
Cary Clark682c58d2018-05-16 07:07:07 -04004200<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004201void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const
Cary Clark12799e12017-07-28 15:18:29 -04004202</pre>
4203
Cary Clark777eede2018-11-09 16:04:58 -05004204Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
4205Uses <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>,
4206and <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>.
4207All 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>.
4208Uses <a href='#SkPaint_getPosTextPath_pos'>pos</a> array to position <a href='#SkPaint_getPosTextPath_path'>path</a>.
4209<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 -04004210
4211### Parameters
4212
Cary Clark682c58d2018-05-16 07:07:07 -04004213<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004214 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004215 </tr>
4216 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4217 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4218 </tr>
4219 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004220 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004221 </tr>
4222 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004223 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004224 </tr>
4225</table>
4226
4227### Example
4228
Cary Clark777eede2018-11-09 16:04:58 -05004229<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 -05004230</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004231
Cary Clarka90ea222018-10-16 10:30:28 -04004232<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004233
Cary Clark777eede2018-11-09 16:04:58 -05004234<a href='#Paint_Text_Intercepts'>Text_Intercepts</a> describe the intersection of drawn <a href='undocumented#Text'>text</a> <a href='undocumented#Glyph'>Glyphs</a> with a pair
4235of <a href='undocumented#Line'>lines</a> parallel to the <a href='undocumented#Text'>text</a> advance. <a href='#Paint_Text_Intercepts'>Text_Intercepts</a> permits creating a
4236underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004237
Cary Clark682c58d2018-05-16 07:07:07 -04004238<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004239
4240---
Cary Clark12799e12017-07-28 15:18:29 -04004241
Cary Clark682c58d2018-05-16 07:07:07 -04004242<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004243int <a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
4244 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004245</pre>
4246
Cary Clark777eede2018-11-09 16:04:58 -05004247Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
4248<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.
4249The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
Cary Clark09d80c02018-10-31 12:14:03 -04004250the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004251Uses <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>,
4252and <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>.
4253Uses <a href='#SkPaint_getTextIntercepts_x'>x</a>, <a href='#SkPaint_getTextIntercepts_y'>y</a> to position <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004254
Cary Clark777eede2018-11-09 16:04:58 -05004255Pass 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 +00004256
Cary Clark777eede2018-11-09 16:04:58 -05004257<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004258
4259### Parameters
4260
Cary Clark682c58d2018-05-16 07:07:07 -04004261<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004262 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004263 </tr>
4264 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
4265 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
4266 </tr>
4267 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004268 <td>x-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004269 </tr>
4270 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004271 <td>y-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004272 </tr>
4273 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004274 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004275 </tr>
4276 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4277 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004278 </tr>
4279</table>
4280
4281### Return Value
4282
4283number of intersections; may be zero
4284
4285### Example
4286
Cary Clark777eede2018-11-09 16:04:58 -05004287<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the <a href='undocumented#Glyph'>glyph</a> Descender.
Cary Clark1a8d7622018-03-05 13:26:16 -05004288</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004289
Cary Clark682c58d2018-05-16 07:07:07 -04004290<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004291
4292---
Cary Clark12799e12017-07-28 15:18:29 -04004293
Cary Clark682c58d2018-05-16 07:07:07 -04004294<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004295int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
4296 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004297</pre>
4298
Cary Clark777eede2018-11-09 16:04:58 -05004299Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
4300<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.
4301The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
Cary Clark09d80c02018-10-31 12:14:03 -04004302the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004303Uses <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>,
4304and <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>.
4305Uses <a href='#SkPaint_getPosTextIntercepts_pos'>pos</a> array to position <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004306
Cary Clark777eede2018-11-09 16:04:58 -05004307Pass 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 +00004308
Cary Clark777eede2018-11-09 16:04:58 -05004309<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004310
4311### Parameters
4312
Cary Clark682c58d2018-05-16 07:07:07 -04004313<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004314 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004315 </tr>
4316 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
4317 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
4318 </tr>
4319 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004320 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004321 </tr>
4322 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004323 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004324 </tr>
4325 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4326 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004327 </tr>
4328</table>
4329
4330### Return Value
4331
Cary Clarka523d2d2017-08-30 08:58:10 -04004332number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004333
4334### Example
4335
Cary Clark777eede2018-11-09 16:04:58 -05004336<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 -05004337</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004338
Cary Clark682c58d2018-05-16 07:07:07 -04004339<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004340
4341---
Cary Clark12799e12017-07-28 15:18:29 -04004342
Cary Clark682c58d2018-05-16 07:07:07 -04004343<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004344int <a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='undocumented#SkScalar'>SkScalar</a> xpos[], <a href='undocumented#SkScalar'>SkScalar</a> constY,
4345 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004346</pre>
4347
Cary Clark777eede2018-11-09 16:04:58 -05004348Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
4349<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.
4350The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
Cary Clark09d80c02018-10-31 12:14:03 -04004351the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004352Uses <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>,
4353and <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>.
4354Uses <a href='#SkPaint_getPosTextHIntercepts_xpos'>xpos</a> array, <a href='#SkPaint_getPosTextHIntercepts_constY'>constY</a> to position <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004355
Cary Clark777eede2018-11-09 16:04:58 -05004356Pass 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 +00004357
Cary Clark777eede2018-11-09 16:04:58 -05004358<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004359
4360### Parameters
4361
Cary Clark682c58d2018-05-16 07:07:07 -04004362<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004363 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004364 </tr>
4365 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
4366 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
4367 </tr>
4368 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004369 <td>positions of each <a href='undocumented#Glyph'>glyph</a> on x-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004370 </tr>
4371 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004372 <td>position of each <a href='undocumented#Glyph'>glyph</a> on y-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004373 </tr>
4374 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004375 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004376 </tr>
4377 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4378 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004379 </tr>
4380</table>
4381
4382### Return Value
4383
4384number of intersections; may be zero
4385
4386### Example
4387
Cary Clark777eede2018-11-09 16:04:58 -05004388<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 -05004389</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004390
Cary Clark682c58d2018-05-16 07:07:07 -04004391<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004392
4393---
Cary Clark12799e12017-07-28 15:18:29 -04004394
Cary Clark682c58d2018-05-16 07:07:07 -04004395<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004396int <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 -04004397</pre>
4398
Cary Clark777eede2018-11-09 16:04:58 -05004399Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
4400<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.
4401The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>glyphs</a> in
Cary Clark09d80c02018-10-31 12:14:03 -04004402the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004403Uses <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
4404and <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>.
skia-bookmakerf1ec3912018-11-03 05:34:02 +00004405Uses run array to position <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004406
Cary Clark777eede2018-11-09 16:04:58 -05004407<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 -05004408
Cary Clark777eede2018-11-09 16:04:58 -05004409Pass 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 +00004410
Cary Clark777eede2018-11-09 16:04:58 -05004411<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004412
4413### Parameters
4414
Cary Clark682c58d2018-05-16 07:07:07 -04004415<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004416 <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 -04004417 </tr>
4418 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004419 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004420 </tr>
4421 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4422 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004423 </tr>
4424</table>
4425
4426### Return Value
4427
4428number of intersections; may be zero
4429
4430### Example
4431
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004432<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004433
Cary Clark77b3f3a2018-11-07 14:59:03 -05004434<a name='SkPaint_getFontBounds'></a>
4435
4436---
4437
4438<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004439<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark77b3f3a2018-11-07 14:59:03 -05004440</pre>
4441
4442Returns the union of bounds of all <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004443Returned dimensions are computed by <a href='undocumented#Font'>font</a> manager from <a href='undocumented#Font'>font</a> <a href='undocumented#Data'>data</a>,
Cary Clarkabaffd82018-11-15 08:25:12 -05004444ignoring <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting. Includes <a href='undocumented#Font'>font</a> metrics, but not fake bold or <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark77b3f3a2018-11-07 14:59:03 -05004445
Cary Clark777eede2018-11-09 16:04:58 -05004446If <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a> is large, <a href='undocumented#Text'>text</a> scale is one, and <a href='undocumented#Text'>text</a> skew is zero,
Cary Clark77b3f3a2018-11-07 14:59:03 -05004447returns the bounds as:
4448{ <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>::<a href='#SkFontMetrics_fXMin'>fXMin</a>, <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>::<a href='#SkFontMetrics_fTop'>fTop</a>, <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>::<a href='#SkFontMetrics_fXMax'>fXMax</a>, <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>::<a href='#SkFontMetrics_fBottom'>fBottom</a> }.
4449
4450### Return Value
4451
4452union of bounds of all <a href='undocumented#Glyph'>glyphs</a>
4453
4454### Example
4455
skia-bookmaker1e1ba0e2018-11-13 05:36:58 +00004456<div><fiddle-embed name="f29d005a75efd4746c6744004a0cb421">
Cary Clark77b3f3a2018-11-07 14:59:03 -05004457
4458#### Example Output
4459
4460~~~~
4461metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4462font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4463~~~~
4464
4465</fiddle-embed></div>
4466
Cary Clark682c58d2018-05-16 07:07:07 -04004467<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004468
4469---
Cary Clark12799e12017-07-28 15:18:29 -04004470
Cary Clark682c58d2018-05-16 07:07:07 -04004471<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004472bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004473</pre>
4474
Cary Clark777eede2018-11-09 16:04:58 -05004475Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing;
4476otherwise, the <a href='SkPaint_Reference#SkPaint'>SkPaint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004477
Cary Clark777eede2018-11-09 16:04:58 -05004478Returns true if, for example, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> combined with <a href='SkColor_Reference#Alpha'>alpha</a> computes a
4479new <a href='SkColor_Reference#Alpha'>alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004480
4481### Return Value
4482
Cary Clark777eede2018-11-09 16:04:58 -05004483true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004484
4485### Example
4486
Cary Clark83647062018-07-18 16:21:51 -04004487<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04004488
4489#### Example Output
4490
4491~~~~
4492initial nothing to draw: false
4493blend dst nothing to draw: true
4494blend src over nothing to draw: false
4495alpha 0 nothing to draw: true
4496~~~~
4497
4498</fiddle-embed></div>
4499
Cary Clarka90ea222018-10-16 10:30:28 -04004500<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05004501