blob: 60247fe7fe5cdb67c3590a7b9cbd3c171f55c293 [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
23 enum <a href='#SkPaint_Hinting'>Hinting</a> : uint8_t {
24 <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a> = 0,
25 <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a> = 1,
26 <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a> = 2,
27 <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a> = 3,
28 };
29
Cary Clark777eede2018-11-09 16:04:58 -050030 void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel);
Cary Clark8cc4cdc2018-11-09 23:16:58 -050031 <a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const;
32 void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> h);
33 <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 Clark777eede2018-11-09 16:04:58 -050047 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
48 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText_ReserveFlag</a> = 0x08,
49 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText_ReserveFlag</a> = 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;
145 <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const;
146 void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
147 void <a href='#SkPaint_setLooper'>setLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
148 <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;
194 bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const;
195 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastBounds'>computeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const;
196 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig,
197 <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const;
198 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage,
199 <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 Clark8cc4cdc2018-11-09 23:16:58 -0500253| <a href='#SkPaint_Hinting'>Hinting</a> | <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 Clark8cc4cdc2018-11-09 23:16:58 -0500598<a name='SkPaint_Hinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400599
600---
Cary Clark12799e12017-07-28 15:18:29 -0400601
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500602<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
603 enum <a href='#SkPaint_Hinting'>Hinting</a> : uint8_t {
604 <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a> = 0,
605 <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a> = 1,
606 <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a> = 2,
607 <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a> = 3,
608 };
Cary Clark12799e12017-07-28 15:18:29 -0400609</pre>
610
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500611### Constants
Cary Clark12799e12017-07-28 15:18:29 -0400612
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500613<table style='border-collapse: collapse; width: 62.5em'>
614 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
615<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
616<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
617 <tr style='background-color: #f0f0f0; '>
618 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
619 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
620 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
621Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -0400622
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500623</td>
624 </tr>
625 <tr>
626 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
627 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
628 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
629Deprecated.
Cary Clark777eede2018-11-09 16:04:58 -0500630
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500631</td>
632 </tr>
633 <tr style='background-color: #f0f0f0; '>
634 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
635 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
636 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
637Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -0400638
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500639</td>
640 </tr>
641 <tr>
642 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
643 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
644 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
645Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -0400646
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500647</td>
648 </tr>
649</table>
Cary Clark12799e12017-07-28 15:18:29 -0400650
Cary Clark682c58d2018-05-16 07:07:07 -0400651<a name='SkPaint_setHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400652
653---
Cary Clark12799e12017-07-28 15:18:29 -0400654
Cary Clark682c58d2018-05-16 07:07:07 -0400655<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500656void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400657</pre>
658
Cary Clark777eede2018-11-09 16:04:58 -0500659Sets level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400660Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400661
Cary Clark12799e12017-07-28 15:18:29 -0400662### Parameters
663
Cary Clark682c58d2018-05-16 07:07:07 -0400664<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
Cary Clark885f1072018-11-08 13:31:39 -0500665 <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 +0000666 </tr>
667</table>
668
Cary Clark885f1072018-11-08 13:31:39 -0500669<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 +0000670
671### Example
672
673<div><fiddle-embed name="197268a89c3343f600b9bade61c513ae">
674
675#### Example Output
676
677~~~~
678paint1 == paint2
679~~~~
680
681</fiddle-embed></div>
682
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500683<a name='SkPaint_getHinting'></a>
684
685---
686
687<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
688<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
689</pre>
690
691Returns level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
692
693### Return Value
694
695one of: <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a>
696
697<a name='SkPaint_setHinting_2'></a>
698
699---
700
701<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
702void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> h)
703</pre>
704
705Sets level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
706Does not check for valid values of <a href='#SkPaint_setHinting_2_h'>h</a>.
707
708### Parameters
709
710<table> <tr> <td><a name='SkPaint_setHinting_2_h'><code><strong>h</strong></code></a></td>
711 <td>one of: <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a></td>
712 </tr>
713</table>
714
Cary Clarka90ea222018-10-16 10:30:28 -0400715<a name='Flags'></a>
716
717<a name='SkPaint_Flags'></a>
718
Cary Clark12799e12017-07-28 15:18:29 -0400719---
720
Cary Clarka560c472017-11-27 10:44:06 -0500721<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400722 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clark777eede2018-11-09 16:04:58 -0500723 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
724 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
725 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
726 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
727 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
728 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
729 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
730 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
731 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400732 };
Cary Clark12799e12017-07-28 15:18:29 -0400733</pre>
734
Cary Clark682c58d2018-05-16 07:07:07 -0400735The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
Cary Clark777eede2018-11-09 16:04:58 -0500736The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
737with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a>.
738All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
739multiple settings at once.
Cary Clark12799e12017-07-28 15:18:29 -0400740
741### Constants
742
Cary Clark682c58d2018-05-16 07:07:07 -0400743<table style='border-collapse: collapse; width: 62.5em'>
744 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
745<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
746<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
747 <tr style='background-color: #f0f0f0; '>
748 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
749 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
750 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400751mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400752 </tr>
753 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400754 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
755 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
756 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
757mask for setting Dither</td>
758 </tr>
759 <tr style='background-color: #f0f0f0; '>
760 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
761 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
762 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
763mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -0400764 </tr>
765 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400766 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
767 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
768 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
769mask for setting Linear_Text</td>
770 </tr>
771 <tr style='background-color: #f0f0f0; '>
772 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
773 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
774 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
775mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400776 </tr>
777 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400778 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
779 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
780 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
781mask for setting LCD_Text</td>
782 </tr>
783 <tr style='background-color: #f0f0f0; '>
784 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
785 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
786 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
787mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400788 </tr>
789 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400790 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
791 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
792 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
793mask for setting Automatic_Hinting</td>
794 </tr>
795 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400796 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
797 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
798 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -0500799mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use
Cary Clark77b3f3a2018-11-07 14:59:03 -0500800</td>
Cary Clark12799e12017-07-28 15:18:29 -0400801 </tr>
Cary Clark777eede2018-11-09 16:04:58 -0500802<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark682c58d2018-05-16 07:07:07 -0400803</table>
Cary Clark12799e12017-07-28 15:18:29 -0400804
Cary Clarka90ea222018-10-16 10:30:28 -0400805<a name='SkPaint_ReserveFlags'></a>
806
807---
Cary Clark06c20f32018-03-20 15:53:27 -0400808
Cary Clarke8161dd2018-09-06 12:47:04 -0400809To be deprecated soon.
Cary Clark12799e12017-07-28 15:18:29 -0400810
Cary Clarke8161dd2018-09-06 12:47:04 -0400811Only valid for Android framework.
Cary Clark4855f782018-02-06 09:41:53 -0500812
Cary Clarka560c472017-11-27 10:44:06 -0500813<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400814 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
Cary Clark777eede2018-11-09 16:04:58 -0500815 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText_ReserveFlag</a> = 0x08,
816 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText_ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -0400817 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500818</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400819
820### Constants
821
Cary Clark682c58d2018-05-16 07:07:07 -0400822<table style='border-collapse: collapse; width: 62.5em'>
823 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
824<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
825<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
826 <tr style='background-color: #f0f0f0; '>
827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
828 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
829 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400830To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400831
Cary Clarke8161dd2018-09-06 12:47:04 -0400832</td>
Cary Clark12799e12017-07-28 15:18:29 -0400833 </tr>
834 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
836 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
837 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400838To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400839
Cary Clarke8161dd2018-09-06 12:47:04 -0400840</td>
Cary Clark12799e12017-07-28 15:18:29 -0400841 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400842</table>
Cary Clark4855f782018-02-06 09:41:53 -0500843
Cary Clark682c58d2018-05-16 07:07:07 -0400844<a name='SkPaint_getFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400845
846---
Cary Clark12799e12017-07-28 15:18:29 -0400847
Cary Clark682c58d2018-05-16 07:07:07 -0400848<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500849uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400850</pre>
851
Cary Clark777eede2018-11-09 16:04:58 -0500852Returns <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
853bit, 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 -0400854
855### Return Value
856
Cary Clark09d80c02018-10-31 12:14:03 -0400857zero, 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 -0400858
859### Example
860
861<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
862
863#### Example Output
864
865~~~~
866(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
867~~~~
868
869</fiddle-embed></div>
870
Cary Clark682c58d2018-05-16 07:07:07 -0400871<a name='SkPaint_setFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400872
873---
Cary Clark12799e12017-07-28 15:18:29 -0400874
Cary Clark682c58d2018-05-16 07:07:07 -0400875<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500876void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400877</pre>
878
Cary Clark777eede2018-11-09 16:04:58 -0500879Replaces <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.
880All <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 -0400881
882### Parameters
883
Cary Clark682c58d2018-05-16 07:07:07 -0400884<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500885 <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 -0400886 </tr>
887</table>
888
889### Example
890
891<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
892
893#### Example Output
894
895~~~~
896paint.isAntiAlias()
897paint.isDither()
898~~~~
899
900</fiddle-embed></div>
901
Cary Clarka90ea222018-10-16 10:30:28 -0400902<a name='Anti_Alias'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400903
Cary Clarka90ea222018-10-16 10:30:28 -0400904---
Cary Clark08895c42018-02-01 09:37:32 -0500905
Cary Clark777eede2018-11-09 16:04:58 -0500906<a href='#Paint_Anti_Alias'>Anti_Alias</a> drawing approximates partial <a href='undocumented#Pixel'>pixel</a> coverage with transparency.
907If <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.
908If <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 -0400909
Cary Clark777eede2018-11-09 16:04:58 -0500910The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
911passing 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 -0400912
Cary Clark777eede2018-11-09 16:04:58 -0500913<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
914active <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 -0400915
Cary Clark777eede2018-11-09 16:04:58 -0500916A platform may only support <a href='#Paint_Anti_Alias'>Anti_Aliased</a> drawing. Some GPU-backed platforms use
917<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 -0400918<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400919
Cary Clark777eede2018-11-09 16:04:58 -0500920The 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 -0400921
Cary Clark777eede2018-11-09 16:04:58 -0500922<a href='#Paint_Anti_Alias'>Anti_Alias</a> is disabled by default.
923<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>
924at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400925
926### Example
927
Cary Clark777eede2018-11-09 16:04:58 -0500928<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.
929A blue <a href='undocumented#Line'>line</a> draws only where the <a href='undocumented#Pixel'>pixel</a> centers are contained.
930The <a href='undocumented#Line'>lines</a> are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
931<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500932</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400933
Cary Clark682c58d2018-05-16 07:07:07 -0400934<a name='SkPaint_isAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400935
936---
Cary Clark12799e12017-07-28 15:18:29 -0400937
Cary Clark682c58d2018-05-16 07:07:07 -0400938<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500939bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400940</pre>
941
Cary Clark777eede2018-11-09 16:04:58 -0500942Returns 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 -0400943
Cary Clark777eede2018-11-09 16:04:58 -0500944Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400945
946### Return Value
947
Cary Clark777eede2018-11-09 16:04:58 -0500948<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400949
950### Example
951
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000952<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -0400953
954#### Example Output
955
956~~~~
957paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
958paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
959~~~~
960
961</fiddle-embed></div>
962
Cary Clark682c58d2018-05-16 07:07:07 -0400963<a name='SkPaint_setAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400964
965---
Cary Clark12799e12017-07-28 15:18:29 -0400966
Cary Clark682c58d2018-05-16 07:07:07 -0400967<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500968void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -0400969</pre>
970
Cary Clark777eede2018-11-09 16:04:58 -0500971Requests, 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 -0400972partial transparency.
973
Cary Clark777eede2018-11-09 16:04:58 -0500974Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
975Clears <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 -0400976
977### Parameters
978
Cary Clark682c58d2018-05-16 07:07:07 -0400979<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400980 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400981 </tr>
982</table>
983
984### Example
985
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000986<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -0400987
988#### Example Output
989
990~~~~
991paint1 == paint2
992~~~~
993
994</fiddle-embed></div>
995
Cary Clarka90ea222018-10-16 10:30:28 -0400996<a name='Dither'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400997
Cary Clarka90ea222018-10-16 10:30:28 -0400998---
Cary Clark08895c42018-02-01 09:37:32 -0500999
Cary Clark777eede2018-11-09 16:04:58 -05001000Dither increases fidelity by adjusting the <a href='SkColor_Reference#Color'>color</a> of adjacent pixels.
1001This can help to smooth <a href='SkColor_Reference#Color'>color</a> transitions and reducing banding in gradients.
1002Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1003and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1004and 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 -04001005
Cary Clark777eede2018-11-09 16:04:58 -05001006Dithering is always enabled for linear gradients drawing into
1007<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>.
1008Dither 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 -04001009<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 -04001010
Cary Clark777eede2018-11-09 16:04:58 -05001011Dither is disabled by default.
1012Dither can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>
1013at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001014
Cary Clark777eede2018-11-09 16:04:58 -05001015Some 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 -04001016
1017### Example
1018
Cary Clark777eede2018-11-09 16:04:58 -05001019<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested <a href='SkColor_Reference#Color'>color</a> by
1020alternating nearby colors from <a href='undocumented#Pixel'>pixel</a> to <a href='undocumented#Pixel'>pixel</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05001021</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001022
1023### Example
1024
Cary Clark777eede2018-11-09 16:04:58 -05001025<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to <a href='SkColor_Reference#Color'>color</a> to smooth gradients.
1026Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kPlus'>kPlus</a> exaggerates the
1027dither, making it easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -05001028</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001029
Cary Clarka90ea222018-10-16 10:30:28 -04001030### See Also
1031
1032Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1033
Cary Clark682c58d2018-05-16 07:07:07 -04001034<a name='SkPaint_isDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001035
1036---
Cary Clark12799e12017-07-28 15:18:29 -04001037
Cary Clark682c58d2018-05-16 07:07:07 -04001038<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001039bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001040</pre>
1041
Cary Clark777eede2018-11-09 16:04:58 -05001042Returns 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 +00001043
Cary Clark777eede2018-11-09 16:04:58 -05001044Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001045
1046### Return Value
1047
Cary Clark777eede2018-11-09 16:04:58 -05001048<a href='#SkPaint_kDither_Flag'>kDither_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001049
1050### Example
1051
1052<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1053
1054#### Example Output
1055
1056~~~~
1057paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1058paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1059~~~~
1060
1061</fiddle-embed></div>
1062
Cary Clark682c58d2018-05-16 07:07:07 -04001063<a name='SkPaint_setDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001064
1065---
Cary Clark12799e12017-07-28 15:18:29 -04001066
Cary Clark682c58d2018-05-16 07:07:07 -04001067<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001068void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001069</pre>
1070
Cary Clark777eede2018-11-09 16:04:58 -05001071Requests, but does not require, to distribute <a href='SkColor_Reference#Color'>color</a> error.
Cary Clark12799e12017-07-28 15:18:29 -04001072
Cary Clark777eede2018-11-09 16:04:58 -05001073Sets <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1074Clears <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 -04001075
1076### Parameters
1077
Cary Clark682c58d2018-05-16 07:07:07 -04001078<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001079 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001080 </tr>
1081</table>
1082
1083### Example
1084
1085<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1086
1087#### Example Output
1088
1089~~~~
1090paint1 == paint2
1091~~~~
1092
1093</fiddle-embed></div>
1094
1095### See Also
1096
Cary Clark682c58d2018-05-16 07:07:07 -04001097<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001098
Cary Clarka90ea222018-10-16 10:30:28 -04001099<a name='Device_Text'></a>
1100
Cary Clark12799e12017-07-28 15:18:29 -04001101---
1102
Cary Clark777eede2018-11-09 16:04:58 -05001103<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 -04001104
Cary Clark777eede2018-11-09 16:04:58 -05001105When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
1106create a <a href='SkColor_Reference#Color'>color</a>, and relies
1107on 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.
1108<a href='#Paint_LCD_Text'>LCD_Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1109the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001110
Cary Clark777eede2018-11-09 16:04:58 -05001111<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.
1112As the opaqueness
1113of 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 -04001114
Cary Clark777eede2018-11-09 16:04:58 -05001115Either or both techniques can be enabled.
1116<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> are clear by default.
1117<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
1118<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 -04001119
1120### Example
1121
Cary Clark777eede2018-11-09 16:04:58 -05001122<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>.
1123When <a href='#Paint_Subpixel_Text'>Subpixel_Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1124When <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 -05001125</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001126
Cary Clarka90ea222018-10-16 10:30:28 -04001127<a name='Linear_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001128
Cary Clark777eede2018-11-09 16:04:58 -05001129<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 Clark8cc4cdc2018-11-09 23:16:58 -05001130If <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is set, it has the same effect as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>.
1131If <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear, it is the same as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001132
Cary Clark682c58d2018-05-16 07:07:07 -04001133<a name='SkPaint_isLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001134
1135---
Cary Clark12799e12017-07-28 15:18:29 -04001136
Cary Clark682c58d2018-05-16 07:07:07 -04001137<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001138bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001139</pre>
1140
Cary Clark777eede2018-11-09 16:04:58 -05001141Returns 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 -04001142
Cary Clark777eede2018-11-09 16:04:58 -05001143Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001144
1145### Return Value
1146
Cary Clark777eede2018-11-09 16:04:58 -05001147<a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001148
1149### Example
1150
1151<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1152
1153### See Also
1154
Cary Clark8cc4cdc2018-11-09 23:16:58 -05001155<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001156
Cary Clark682c58d2018-05-16 07:07:07 -04001157<a name='SkPaint_setLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001158
1159---
Cary Clark12799e12017-07-28 15:18:29 -04001160
Cary Clark682c58d2018-05-16 07:07:07 -04001161<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001162void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001163</pre>
1164
Cary Clark777eede2018-11-09 16:04:58 -05001165Returns true if <a href='undocumented#Text'>text</a> is converted to <a href='SkPath_Reference#SkPath'>SkPath</a> before drawing and measuring.
1166By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001167
Cary Clark777eede2018-11-09 16:04:58 -05001168Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1169Clears <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 -04001170
1171### Parameters
1172
Cary Clark682c58d2018-05-16 07:07:07 -04001173<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001174 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001175 </tr>
1176</table>
1177
1178### Example
1179
Cary Clark83647062018-07-18 16:21:51 -04001180<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001181
1182### See Also
1183
Cary Clark8cc4cdc2018-11-09 23:16:58 -05001184<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001185
Cary Clarka90ea222018-10-16 10:30:28 -04001186<a name='Subpixel_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001187
Cary Clark777eede2018-11-09 16:04:58 -05001188<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.
1189As the opaqueness
1190of 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 -04001191
Cary Clark682c58d2018-05-16 07:07:07 -04001192<a name='SkPaint_isSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001193
1194---
Cary Clark12799e12017-07-28 15:18:29 -04001195
Cary Clark682c58d2018-05-16 07:07:07 -04001196<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001197bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001198</pre>
1199
Cary Clark777eede2018-11-09 16:04:58 -05001200Returns 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 -04001201
Cary Clark777eede2018-11-09 16:04:58 -05001202Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001203
1204### Return Value
1205
Cary Clark777eede2018-11-09 16:04:58 -05001206<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001207
1208### Example
1209
1210<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1211
1212#### Example Output
1213
1214~~~~
1215paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1216paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1217~~~~
1218
1219</fiddle-embed></div>
1220
Cary Clark682c58d2018-05-16 07:07:07 -04001221<a name='SkPaint_setSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001222
1223---
Cary Clark12799e12017-07-28 15:18:29 -04001224
Cary Clark682c58d2018-05-16 07:07:07 -04001225<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001226void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001227</pre>
1228
Cary Clark777eede2018-11-09 16:04:58 -05001229Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001230
Cary Clark777eede2018-11-09 16:04:58 -05001231Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1232Clears <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 -04001233
1234### Parameters
1235
Cary Clark682c58d2018-05-16 07:07:07 -04001236<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001237 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001238 </tr>
1239</table>
1240
1241### Example
1242
1243<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1244
1245#### Example Output
1246
1247~~~~
1248paint1 == paint2
1249~~~~
1250
1251</fiddle-embed></div>
1252
Cary Clarka90ea222018-10-16 10:30:28 -04001253<a name='LCD_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001254
Cary Clark777eede2018-11-09 16:04:58 -05001255When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
1256create a <a href='SkColor_Reference#Color'>color</a>, and relies
1257on 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.
1258<a href='#Paint_LCD_Text'>LCD_Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1259the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001260
Cary Clark682c58d2018-05-16 07:07:07 -04001261<a name='SkPaint_isLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001262
1263---
Cary Clark12799e12017-07-28 15:18:29 -04001264
Cary Clark682c58d2018-05-16 07:07:07 -04001265<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001266bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001267</pre>
1268
Cary Clark777eede2018-11-09 16:04:58 -05001269Returns 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 -04001270
Cary Clark777eede2018-11-09 16:04:58 -05001271Returns 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 -04001272
1273### Return Value
1274
Cary Clark777eede2018-11-09 16:04:58 -05001275<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001276
1277### Example
1278
skia-bookmakera391c722018-07-09 05:28:19 +00001279<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001280
1281#### Example Output
1282
1283~~~~
1284paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1285paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1286~~~~
1287
1288</fiddle-embed></div>
1289
Cary Clark682c58d2018-05-16 07:07:07 -04001290<a name='SkPaint_setLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001291
1292---
Cary Clark12799e12017-07-28 15:18:29 -04001293
Cary Clark682c58d2018-05-16 07:07:07 -04001294<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001295void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001296</pre>
1297
Cary Clark777eede2018-11-09 16:04:58 -05001298Requests, 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 -04001299
Cary Clark777eede2018-11-09 16:04:58 -05001300Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1301Clears <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 -04001302
1303### Parameters
1304
Cary Clark682c58d2018-05-16 07:07:07 -04001305<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001306 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001307 </tr>
1308</table>
1309
1310### Example
1311
skia-bookmakere0a458f2018-07-16 05:29:00 +00001312<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001313
1314#### Example Output
1315
1316~~~~
1317paint1 == paint2
1318~~~~
1319
1320</fiddle-embed></div>
1321
Cary Clarka90ea222018-10-16 10:30:28 -04001322<a name='Font_Embedded_Bitmaps'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001323
Cary Clarka90ea222018-10-16 10:30:28 -04001324---
Cary Clark08895c42018-02-01 09:37:32 -05001325
Cary Clark777eede2018-11-09 16:04:58 -05001326<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>.
1327<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
1328in a <a href='undocumented#Font'>font</a> if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001329
Cary Clark777eede2018-11-09 16:04:58 -05001330FreeType 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
1331the outline <a href='undocumented#Glyph'>glyph</a> if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> is clear.
1332Windows may select the <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> but is not required to do so.
1333<a href='#OS_X'>OS_X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001334
Cary Clark777eede2018-11-09 16:04:58 -05001335<a href='#Paint_Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> is disabled by default.
1336<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
1337<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001338
1339### Example
1340
Cary Clarka560c472017-11-27 10:44:06 -05001341<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001342<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001343 includes an embedded bitmap Glyph at odd font sizes. This example works
1344 on platforms that use FreeType as their Font_Engine.
1345 Windows may, but is not required to, return a bitmap glyph if
1346 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1347 bitmap.allocN32Pixels(30, 15);
1348 bitmap.eraseColor(0);
1349 SkCanvas offscreen(bitmap);
1350 SkPaint paint;
1351 paint.setAntiAlias(true);
1352 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001353 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001354 for (bool embedded : { false, true}) {
1355 paint.setEmbeddedBitmapText(embedded);
1356 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1357 }
1358 canvas->drawBitmap(bitmap, 0, 0);
1359 canvas->scale(10, 10);
1360 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001361
Cary Clarka560c472017-11-27 10:44:06 -05001362</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001363
Cary Clark682c58d2018-05-16 07:07:07 -04001364<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001365
1366---
Cary Clark12799e12017-07-28 15:18:29 -04001367
Cary Clark682c58d2018-05-16 07:07:07 -04001368<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001369bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001370</pre>
1371
Cary Clark777eede2018-11-09 16:04:58 -05001372Returns 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 -04001373
Cary Clark777eede2018-11-09 16:04:58 -05001374Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001375
1376### Return Value
1377
Cary Clark777eede2018-11-09 16:04:58 -05001378<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001379
1380### Example
1381
1382<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1383
1384#### Example Output
1385
1386~~~~
1387paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1388paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1389~~~~
1390
1391</fiddle-embed></div>
1392
Cary Clark682c58d2018-05-16 07:07:07 -04001393<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001394
1395---
Cary Clark12799e12017-07-28 15:18:29 -04001396
Cary Clark682c58d2018-05-16 07:07:07 -04001397<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001398void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001399</pre>
1400
Cary Clark777eede2018-11-09 16:04:58 -05001401Requests, 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 -04001402
Cary Clark777eede2018-11-09 16:04:58 -05001403Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1404Clears <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 -04001405
1406### Parameters
1407
Cary Clark682c58d2018-05-16 07:07:07 -04001408<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001409 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001410 </tr>
1411</table>
1412
1413### Example
1414
1415<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1416
1417#### Example Output
1418
1419~~~~
1420paint1 == paint2
1421~~~~
1422
1423</fiddle-embed></div>
1424
Cary Clarka90ea222018-10-16 10:30:28 -04001425<a name='Automatic_Hinting'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001426
Cary Clark8cc4cdc2018-11-09 23:16:58 -05001427If <a href='#SkPaint_Hinting'>Hinting</a> 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 -05001428instructs the <a href='#Font_Manager'>Font_Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark8cc4cdc2018-11-09 23:16:58 -05001429<a href='#Paint_Automatic_Hinting'>Automatic_Hinting</a> has no effect if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001430<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001431
Cary Clark777eede2018-11-09 16:04:58 -05001432<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 -04001433
Cary Clark682c58d2018-05-16 07:07:07 -04001434<a name='SkPaint_isAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001435
1436---
Cary Clark12799e12017-07-28 15:18:29 -04001437
Cary Clark682c58d2018-05-16 07:07:07 -04001438<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001439bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001440</pre>
1441
Cary Clark8cc4cdc2018-11-09 23:16:58 -05001442Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001443<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.
1444If 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 -04001445
Cary Clark777eede2018-11-09 16:04:58 -05001446Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001447
1448### Return Value
1449
Cary Clark777eede2018-11-09 16:04:58 -05001450<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001451
1452### Example
1453
1454<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1455
1456#### Example Output
1457
1458~~~~
1459paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1460paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1461~~~~
1462
1463</fiddle-embed></div>
1464
1465### See Also
1466
Cary Clark8cc4cdc2018-11-09 23:16:58 -05001467<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001468
Cary Clark682c58d2018-05-16 07:07:07 -04001469<a name='SkPaint_setAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001470
1471---
Cary Clark12799e12017-07-28 15:18:29 -04001472
Cary Clark682c58d2018-05-16 07:07:07 -04001473<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001474void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001475</pre>
1476
Cary Clark09d80c02018-10-31 12:14:03 -04001477Sets whether to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark8cc4cdc2018-11-09 23:16:58 -05001478If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Hinting'>Hinting</a> 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 -05001479and <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 Clark8cc4cdc2018-11-09 23:16:58 -05001480<a href='SkPaint_Reference#Automatic_Hinting'>auto-hinting</a> has no effect if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001481<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001482
Cary Clark09d80c02018-10-31 12:14:03 -04001483Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>font manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001484
Cary Clark777eede2018-11-09 16:04:58 -05001485Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1486Clears <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 -04001487
1488### Parameters
1489
Cary Clark682c58d2018-05-16 07:07:07 -04001490<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001491 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001492 </tr>
1493</table>
1494
1495### Example
1496
1497<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1498
1499### See Also
1500
Cary Clark8cc4cdc2018-11-09 23:16:58 -05001501<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001502
Cary Clarka90ea222018-10-16 10:30:28 -04001503<a name='Fake_Bold'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001504
Cary Clarka90ea222018-10-16 10:30:28 -04001505---
Cary Clark08895c42018-02-01 09:37:32 -05001506
Cary Clark777eede2018-11-09 16:04:58 -05001507<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
1508is not available. Skia does not provide <a href='undocumented#Font'>font</a> substitution; it is up to the client to find the
1509bold <a href='undocumented#Font'>font</a> face using the platform <a href='#Font_Manager'>Font_Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001510
Cary Clark777eede2018-11-09 16:04:58 -05001511Use <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
1512is not available.
Cary Clark12799e12017-07-28 15:18:29 -04001513
Cary Clark777eede2018-11-09 16:04:58 -05001514A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
1515the <a href='undocumented#Font_Engine'>font engine</a> to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
1516by 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 -04001517
Cary Clark777eede2018-11-09 16:04:58 -05001518<a href='#Paint_Fake_Bold'>Fake_Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001519
1520### Example
1521
1522<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1523
Cary Clark682c58d2018-05-16 07:07:07 -04001524<a name='SkPaint_isFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001525
1526---
Cary Clark12799e12017-07-28 15:18:29 -04001527
Cary Clark682c58d2018-05-16 07:07:07 -04001528<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001529bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001530</pre>
1531
Cary Clark77b3f3a2018-11-07 14:59:03 -05001532Returns 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 -04001533from outlines.
1534
Cary Clark777eede2018-11-09 16:04:58 -05001535Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001536
1537### Return Value
1538
Cary Clark777eede2018-11-09 16:04:58 -05001539<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001540
1541### Example
1542
1543<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1544
1545#### Example Output
1546
1547~~~~
1548paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1549paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1550~~~~
1551
1552</fiddle-embed></div>
1553
Cary Clark682c58d2018-05-16 07:07:07 -04001554<a name='SkPaint_setFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001555
1556---
Cary Clark12799e12017-07-28 15:18:29 -04001557
Cary Clark682c58d2018-05-16 07:07:07 -04001558<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001559void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001560</pre>
1561
Cary Clark777eede2018-11-09 16:04:58 -05001562Increases <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 -04001563
Cary Clark777eede2018-11-09 16:04:58 -05001564Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1565Clears <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 -04001566
1567### Parameters
1568
Cary Clark682c58d2018-05-16 07:07:07 -04001569<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001570 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001571 </tr>
1572</table>
1573
1574### Example
1575
1576<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1577
1578#### Example Output
1579
1580~~~~
1581paint1 == paint2
1582~~~~
1583
1584</fiddle-embed></div>
1585
Cary Clarka90ea222018-10-16 10:30:28 -04001586<a name='Full_Hinting_Spacing'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001587
Cary Clark8cc4cdc2018-11-09 23:16:58 -05001588if <a href='#SkPaint_Hinting'>Hinting</a> 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 -05001589spacing by the difference of the hinted and unhinted <a href='#Left_Side_Bearing'>Left_Side_Bearing</a> and
1590<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
1591FreeType as their <a href='#Font_Engine'>Font_Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001592
Cary Clark777eede2018-11-09 16:04:58 -05001593<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
1594a 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 -04001595
Cary Clarka90ea222018-10-16 10:30:28 -04001596<a name='Filter_Quality_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001597
Cary Clarka90ea222018-10-16 10:30:28 -04001598---
Cary Clark08895c42018-02-01 09:37:32 -05001599
Cary Clark777eede2018-11-09 16:04:58 -05001600<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.
1601A lower <a href='#Filter_Quality'>Filter_Quality</a> draws faster, but has less fidelity.
1602A higher <a href='#Filter_Quality'>Filter_Quality</a> draws slower, but looks better.
1603If the <a href='SkImage_Reference#Image'>image</a> is drawn without scaling, the <a href='#Filter_Quality'>Filter_Quality</a> choice will not result
1604in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001605
Cary Clark777eede2018-11-09 16:04:58 -05001606<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 -04001607
1608<table> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001609 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmap'>drawBitmap</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001610 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001611 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmapRect'>drawBitmapRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001612 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001613 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImage'>drawImage</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001614 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001615 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImageRect'>drawImageRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001616 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001617</table>
1618
Cary Clark777eede2018-11-09 16:04:58 -05001619and 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 -04001620
Cary Clark777eede2018-11-09 16:04:58 -05001621<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 -04001622
1623### Example
1624
skia-bookmaker525f9a92018-05-03 06:27:39 +00001625<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001626
Cary Clark682c58d2018-05-16 07:07:07 -04001627<a name='SkPaint_getFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001628
1629---
Cary Clark12799e12017-07-28 15:18:29 -04001630
Cary Clark682c58d2018-05-16 07:07:07 -04001631<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001632<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001633</pre>
1634
Cary Clark777eede2018-11-09 16:04:58 -05001635Returns <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1636draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
Cary Clark12799e12017-07-28 15:18:29 -04001637
1638### Return Value
1639
Cary Clark682c58d2018-05-16 07:07:07 -04001640one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
Cary Clark09d80c02018-10-31 12:14:03 -04001641
Cary Clark682c58d2018-05-16 07:07:07 -04001642<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001643
1644### Example
1645
1646<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1647
1648#### Example Output
1649
1650~~~~
1651kNone_SkFilterQuality == paint.getFilterQuality()
1652~~~~
1653
1654</fiddle-embed></div>
1655
Cary Clark682c58d2018-05-16 07:07:07 -04001656<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001657
1658---
Cary Clark12799e12017-07-28 15:18:29 -04001659
Cary Clark682c58d2018-05-16 07:07:07 -04001660<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001661void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001662</pre>
1663
Cary Clark777eede2018-11-09 16:04:58 -05001664Sets <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1665draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
1666Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001667
1668### Parameters
1669
Cary Clark682c58d2018-05-16 07:07:07 -04001670<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001671 <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 -04001672 </tr>
1673</table>
1674
Cary Clark09d80c02018-10-31 12:14:03 -04001675<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
1676
Cary Clark12799e12017-07-28 15:18:29 -04001677### Example
1678
1679<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1680
1681#### Example Output
1682
1683~~~~
1684kHigh_SkFilterQuality == paint.getFilterQuality()
1685~~~~
1686
1687</fiddle-embed></div>
1688
1689### See Also
1690
Cary Clark77b3f3a2018-11-07 14:59:03 -05001691<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#Image_Scaling'>Image_Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001692
Cary Clarka90ea222018-10-16 10:30:28 -04001693<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001694
Cary Clarka90ea222018-10-16 10:30:28 -04001695---
Cary Clark12799e12017-07-28 15:18:29 -04001696
Cary Clarkab2621d2018-01-30 10:08:57 -05001697| name | description |
1698| --- | --- |
Cary Clark777eede2018-11-09 16:04:58 -05001699| <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> |
1700| <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 -04001701
Cary Clark777eede2018-11-09 16:04:58 -05001702<a href='SkColor_Reference#Color'>Color</a> specifies the red, blue, green, and <a href='#Color_Alpha'>Color_Alpha</a>
1703values used to draw a filled or stroked shape in a 32-bit value. Each component
1704occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1705All values in any combination are valid.
Cary Clarkab2621d2018-01-30 10:08:57 -05001706
Cary Clark777eede2018-11-09 16:04:58 -05001707<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
1708RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001709
Cary Clark777eede2018-11-09 16:04:58 -05001710The bit positions of <a href='#Color_Alpha'>Color_Alpha</a> and RGB are independent of the bit
1711positions on the output <a href='undocumented#Device'>device</a>, which may have more or fewer bits, and may have
1712a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001713
Cary Clark77b3f3a2018-11-07 14:59:03 -05001714| bit positions | <a href='#Color_Alpha'>Color_Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001715| --- | --- | --- | --- | --- |
1716| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1717
1718### Example
1719
Ravi Mistry874e22b2018-07-19 03:49:13 +00001720<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001721
Cary Clark682c58d2018-05-16 07:07:07 -04001722<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001723
1724---
Cary Clark12799e12017-07-28 15:18:29 -04001725
Cary Clark682c58d2018-05-16 07:07:07 -04001726<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001727<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001728</pre>
1729
Cary Clark777eede2018-11-09 16:04:58 -05001730Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, packed into 32 bits.
1731Use 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
1732a <a href='SkColor_Reference#Color'>color</a> component.
Cary Clark12799e12017-07-28 15:18:29 -04001733
1734### Return Value
1735
Cary Clark777eede2018-11-09 16:04:58 -05001736<a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001737
1738### Example
1739
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001740<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001741
1742#### Example Output
1743
1744~~~~
1745Yellow is 100% red, 100% green, and 0% blue.
1746~~~~
1747
1748</fiddle-embed></div>
1749
1750### See Also
1751
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001752<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1753
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001754<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001755
1756---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001757
1758<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001759<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001760</pre>
1761
Cary Clark777eede2018-11-09 16:04:58 -05001762Retrieves <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 -04001763are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1764
1765### Return Value
1766
Cary Clark777eede2018-11-09 16:04:58 -05001767<a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001768
1769### Example
1770
1771<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1772
1773#### Example Output
1774
1775~~~~
1776Yellow is 100% red, 100% green, and 0% blue.
1777~~~~
1778
1779</fiddle-embed></div>
1780
1781### See Also
1782
1783<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001784
Cary Clark682c58d2018-05-16 07:07:07 -04001785<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001786
1787---
Cary Clark12799e12017-07-28 15:18:29 -04001788
Cary Clark682c58d2018-05-16 07:07:07 -04001789<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -05001790void <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 -04001791</pre>
1792
Cary Clark777eede2018-11-09 16:04:58 -05001793Sets <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,
1794<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 -04001795
1796### Parameters
1797
Cary Clark682c58d2018-05-16 07:07:07 -04001798<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001799 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001800 </tr>
1801</table>
1802
1803### Example
1804
skia-bookmaker233c6522018-07-04 05:33:26 +00001805<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001806
1807#### Example Output
1808
1809~~~~
1810green1 == green2
1811~~~~
1812
1813</fiddle-embed></div>
1814
1815### See Also
1816
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001817<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>
1818
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001819<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001820
1821---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001822
1823<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001824void <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 -04001825</pre>
1826
Cary Clark777eede2018-11-09 16:04:58 -05001827Sets <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
1828<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
1829the <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 -04001830sRGB <a href='undocumented#Color_Space'>color space</a>.
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001831
1832### Parameters
1833
1834<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001835 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA</td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001836 </tr>
1837 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001838 <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 -04001839 </tr>
1840</table>
1841
1842### Example
1843
1844<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
1845
1846#### Example Output
1847
1848~~~~
1849green1 == green2
1850~~~~
1851
1852</fiddle-embed></div>
1853
1854### See Also
1855
1856<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 -04001857
Cary Clarka90ea222018-10-16 10:30:28 -04001858<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001859
Cary Clark777eede2018-11-09 16:04:58 -05001860<a href='#Color_Alpha'>Color_Alpha</a> sets the transparency independent of RGB: red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04001861
Cary Clark682c58d2018-05-16 07:07:07 -04001862<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001863
1864---
Cary Clark12799e12017-07-28 15:18:29 -04001865
Cary Clark682c58d2018-05-16 07:07:07 -04001866<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001867uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001868</pre>
1869
Cary Clark777eede2018-11-09 16:04:58 -05001870Retrieves <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 -04001871
1872### Return Value
1873
Cary Clark777eede2018-11-09 16:04:58 -05001874<a href='SkColor_Reference#Alpha'>alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001875
1876### Example
1877
Cary Clark83647062018-07-18 16:21:51 -04001878<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04001879
1880#### Example Output
1881
1882~~~~
1883255 == paint.getAlpha()
1884~~~~
1885
1886</fiddle-embed></div>
1887
Cary Clark682c58d2018-05-16 07:07:07 -04001888<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001889
1890---
Cary Clark12799e12017-07-28 15:18:29 -04001891
Cary Clark682c58d2018-05-16 07:07:07 -04001892<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001893void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04001894</pre>
1895
Cary Clark777eede2018-11-09 16:04:58 -05001896Replaces <a href='SkColor_Reference#Alpha'>alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04001897unchanged. An out of range value triggers an assert in the debug
Cary Clark777eede2018-11-09 16:04:58 -05001898build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
1899<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 -04001900fully opaque.
1901
1902### Parameters
1903
Cary Clark682c58d2018-05-16 07:07:07 -04001904<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001905 <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 -04001906 </tr>
1907</table>
1908
1909### Example
1910
Ravi Mistry874e22b2018-07-19 03:49:13 +00001911<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04001912
1913#### Example Output
1914
1915~~~~
19160x44112233 == paint.getColor()
1917~~~~
1918
1919</fiddle-embed></div>
1920
Cary Clark682c58d2018-05-16 07:07:07 -04001921<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001922
1923---
Cary Clark12799e12017-07-28 15:18:29 -04001924
Cary Clark682c58d2018-05-16 07:07:07 -04001925<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001926void <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 -04001927</pre>
1928
Cary Clark777eede2018-11-09 16:04:58 -05001929Sets <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.
1930The <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 -04001931
1932### Parameters
1933
Cary Clark682c58d2018-05-16 07:07:07 -04001934<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001935 <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 -04001936 </tr>
1937 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001938 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001939 </tr>
1940 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001941 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001942 </tr>
1943 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001944 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04001945 </tr>
1946</table>
1947
1948### Example
1949
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001950<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04001951
1952#### Example Output
1953
1954~~~~
1955transRed1 == transRed2
1956~~~~
1957
1958</fiddle-embed></div>
1959
1960### See Also
1961
Cary Clark682c58d2018-05-16 07:07:07 -04001962<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001963
Cary Clarka90ea222018-10-16 10:30:28 -04001964<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001965
Cary Clarka90ea222018-10-16 10:30:28 -04001966---
Cary Clark08895c42018-02-01 09:37:32 -05001967
Cary Clark777eede2018-11-09 16:04:58 -05001968<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
1969Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001970
Cary Clarka90ea222018-10-16 10:30:28 -04001971<a name='Style_Fill'></a>
1972
Cary Clark777eede2018-11-09 16:04:58 -05001973Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kFill_Style'>kFill_Style</a> to fill the shape.
1974The fill covers the area inside the geometry for most shapes.
Cary Clark12799e12017-07-28 15:18:29 -04001975
Cary Clarka90ea222018-10-16 10:30:28 -04001976<a name='Style_Stroke'></a>
1977
Cary Clark777eede2018-11-09 16:04:58 -05001978Set <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 -04001979
Cary Clark777eede2018-11-09 16:04:58 -05001980The stroke covers the area described by following the shape edge with a pen or brush of
1981<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>.
1982The area covered where the shape turns a corner is described by <a href='#Paint_Stroke_Join'>Stroke_Join</a>.
1983The 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
1984may 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 -04001985
Cary Clarka90ea222018-10-16 10:30:28 -04001986### See Also
Cary Clark12799e12017-07-28 15:18:29 -04001987
Cary Clark77b3f3a2018-11-07 14:59:03 -05001988<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 -04001989
1990<a name='Hairline'></a>
1991
1992---
1993
Cary Clark777eede2018-11-09 16:04:58 -05001994<a href='#Paint_Stroke_Width'>Stroke_Width</a> of zero has a special meaning and switches drawing to use Hairline.
1995Hairline draws the thinnest continuous frame. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is clear, adjacent pixels
1996flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04001997
Cary Clark777eede2018-11-09 16:04:58 -05001998<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
1999two <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
2000<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
2001GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
2002while stroking.
Cary Clark12799e12017-07-28 15:18:29 -04002003
Cary Clarka90ea222018-10-16 10:30:28 -04002004### See Also
2005
Cary Clark77b3f3a2018-11-07 14:59:03 -05002006<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 -04002007
2008<a name='SkPaint_Style'></a>
2009
2010---
Cary Clark12799e12017-07-28 15:18:29 -04002011
Cary Clarka560c472017-11-27 10:44:06 -05002012<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002013 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04002014 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
2015 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
2016 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002017 };
Cary Clarka90ea222018-10-16 10:30:28 -04002018</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04002019
Cary Clarka90ea222018-10-16 10:30:28 -04002020<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002021 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 -05002022</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002023
Cary Clark777eede2018-11-09 16:04:58 -05002024Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
2025The stroke and fill
2026share 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 -04002027
Cary Clark777eede2018-11-09 16:04:58 -05002028Use <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> to avoid hitting the same pixels twice with a stroke draw and
2029a fill draw.
Cary Clark12799e12017-07-28 15:18:29 -04002030
2031### Constants
2032
Cary Clark682c58d2018-05-16 07:07:07 -04002033<table style='border-collapse: collapse; width: 62.5em'>
2034 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2035<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2036<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2037 <tr style='background-color: #f0f0f0; '>
2038 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2039 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2040 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002041Applies 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>.
2042<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
2043<a href='#SkPaint_kFill_Style'>kFill_Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2044The <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,
2045and to create an unfilled hole inside the shape.
2046<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 -05002047</td>
Cary Clark12799e12017-07-28 15:18:29 -04002048 </tr>
2049 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002050 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2051 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2052 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002053Applies 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>.
2054<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,
2055and ignore the set <a href='#SkPaint_Style'>Style</a>.
2056The stroke construction is unaffected by the <a href='#Path_Fill_Type'>Path_Fill_Type</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002057</td>
2058 </tr>
2059 <tr style='background-color: #f0f0f0; '>
2060 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2061 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2062 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002063Applies 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>.
2064<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>,
2065and the set <a href='#Path_Fill_Type'>Path_Fill_Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002066</td>
Cary Clark12799e12017-07-28 15:18:29 -04002067 </tr>
2068 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002069 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2070 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2071 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002072May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002073</td>
Cary Clark12799e12017-07-28 15:18:29 -04002074 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002075</table>
Cary Clark12799e12017-07-28 15:18:29 -04002076
Cary Clark682c58d2018-05-16 07:07:07 -04002077<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002078
2079---
Cary Clark12799e12017-07-28 15:18:29 -04002080
Cary Clark682c58d2018-05-16 07:07:07 -04002081<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002082<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002083</pre>
2084
Cary Clark80247e52018-07-11 16:18:41 -04002085Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002086
2087### Return Value
2088
Cary Clark09d80c02018-10-31 12:14:03 -04002089one 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 -04002090
2091### Example
2092
2093<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2094
2095#### Example Output
2096
2097~~~~
2098SkPaint::kFill_Style == paint.getStyle()
2099~~~~
2100
2101</fiddle-embed></div>
2102
2103### See Also
2104
Cary Clark682c58d2018-05-16 07:07:07 -04002105<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002106
Cary Clark682c58d2018-05-16 07:07:07 -04002107<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002108
2109---
Cary Clark12799e12017-07-28 15:18:29 -04002110
Cary Clark682c58d2018-05-16 07:07:07 -04002111<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002112void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002113</pre>
2114
2115Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark777eede2018-11-09 16:04:58 -05002116Has 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 -04002117
2118### Parameters
2119
Cary Clark682c58d2018-05-16 07:07:07 -04002120<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002121 <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 -04002122 </tr>
2123</table>
2124
2125### Example
2126
2127<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2128
2129### See Also
2130
Cary Clark682c58d2018-05-16 07:07:07 -04002131<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002132
Cary Clarka90ea222018-10-16 10:30:28 -04002133<a name='Stroke_Width'></a>
2134
Cary Clark12799e12017-07-28 15:18:29 -04002135---
2136
Cary Clark777eede2018-11-09 16:04:58 -05002137<a href='#Paint_Stroke_Width'>Stroke_Width</a> sets the width for stroking. The width is the thickness
2138of 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
2139set 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 -04002140
Cary Clark777eede2018-11-09 16:04:58 -05002141When width is greater than zero, the stroke encompasses as many pixels partially
2142or fully as needed. When the width equals zero, the <a href='SkPaint_Reference#Paint'>paint</a> enables hairlines;
2143the stroke is always one <a href='undocumented#Pixel'>pixel</a> wide.
Cary Clark12799e12017-07-28 15:18:29 -04002144
Cary Clark777eede2018-11-09 16:04:58 -05002145The stroke dimensions are scaled by the <a href='SkCanvas_Reference#Canvas_Matrix'>canvas matrix</a>, but Hairline stroke
2146remains one <a href='undocumented#Pixel'>pixel</a> wide regardless of scaling.
Cary Clark12799e12017-07-28 15:18:29 -04002147
Cary Clark777eede2018-11-09 16:04:58 -05002148The default width for the <a href='SkPaint_Reference#Paint'>paint</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04002149
2150### Example
2151
Cary Clark777eede2018-11-09 16:04:58 -05002152<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
2153<a href='undocumented#Line'>line</a> and the platform implementation.
Cary Clark1a8d7622018-03-05 13:26:16 -05002154</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002155
Cary Clark682c58d2018-05-16 07:07:07 -04002156<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002157
2158---
Cary Clark12799e12017-07-28 15:18:29 -04002159
Cary Clark682c58d2018-05-16 07:07:07 -04002160<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002161<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002162</pre>
2163
Cary Clark777eede2018-11-09 16:04:58 -05002164Returns the thickness of the pen used by <a href='SkPaint_Reference#SkPaint'>SkPaint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002165outline the shape.
2166
2167### Return Value
2168
Cary Clark09d80c02018-10-31 12:14:03 -04002169zero for hairline, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002170
2171### Example
2172
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002173<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002174
2175#### Example Output
2176
2177~~~~
21780 == paint.getStrokeWidth()
2179~~~~
2180
2181</fiddle-embed></div>
2182
Cary Clark682c58d2018-05-16 07:07:07 -04002183<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002184
2185---
Cary Clark12799e12017-07-28 15:18:29 -04002186
Cary Clark682c58d2018-05-16 07:07:07 -04002187<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002188void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002189</pre>
2190
Cary Clark777eede2018-11-09 16:04:58 -05002191Sets the thickness of the pen used by the <a href='SkPaint_Reference#Paint'>paint</a> to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002192outline the shape.
Cary Clark777eede2018-11-09 16:04:58 -05002193Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002194
2195### Parameters
2196
Cary Clark682c58d2018-05-16 07:07:07 -04002197<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002198 <td>zero thickness for hairline; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002199 </tr>
2200</table>
2201
2202### Example
2203
2204<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2205
2206#### Example Output
2207
2208~~~~
22095 == paint.getStrokeWidth()
2210~~~~
2211
2212</fiddle-embed></div>
2213
Cary Clarka90ea222018-10-16 10:30:28 -04002214<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002215
Cary Clarka90ea222018-10-16 10:30:28 -04002216---
Cary Clark08895c42018-02-01 09:37:32 -05002217
Cary Clark777eede2018-11-09 16:04:58 -05002218<a href='#Paint_Miter_Limit'>Miter_Limit</a> specifies the maximum miter length,
2219relative to the <a href='#Stroke_Width'>stroke width</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002220
Cary Clark777eede2018-11-09 16:04:58 -05002221<a href='#Paint_Miter_Limit'>Miter_Limit</a> is used when the <a href='#Paint_Stroke_Join'>Stroke_Join</a>
2222is 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>
2223or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002224
Cary Clark777eede2018-11-09 16:04:58 -05002225If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>
2226is replaced with <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002227
Cary Clark777eede2018-11-09 16:04:58 -05002228<a href='#Paint_Miter_Limit'>Miter_Limit</a> can be computed from the corner angle using:
Cary Clark77b3f3a2018-11-07 14:59:03 -05002229<code><a href='#Miter_Limit'>miter limit</a> = 1 / sin ( angle / 2 )</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002230
Cary Clark777eede2018-11-09 16:04:58 -05002231<a href='#Paint_Miter_Limit'>Miter_Limit</a> default value is 4.
2232The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults_MiterLimit</a>
2233in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002234
Cary Clark777eede2018-11-09 16:04:58 -05002235Here are some miter limits and the angles that triggers them.
Cary Clark12799e12017-07-28 15:18:29 -04002236
Cary Clark77b3f3a2018-11-07 14:59:03 -05002237| <a href='#Miter_Limit'>miter limit</a> | angle in degrees |
Cary Clark12799e12017-07-28 15:18:29 -04002238| --- | --- |
2239| 10 | 11.48 |
2240| 9 | 12.76 |
2241| 8 | 14.36 |
2242| 7 | 16.43 |
2243| 6 | 19.19 |
2244| 5 | 23.07 |
2245| 4 | 28.96 |
2246| 3 | 38.94 |
2247| 2 | 60 |
2248| 1 | 180 |
2249
2250### Example
2251
Cary Clarka619d452018-07-16 08:12:01 -04002252<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark77b3f3a2018-11-07 14:59:03 -05002253When the <a href='#Miter_Limit'>miter limit</a> is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002254by a bevel join.
2255</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002256
Cary Clark682c58d2018-05-16 07:07:07 -04002257<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002258
2259---
Cary Clark12799e12017-07-28 15:18:29 -04002260
Cary Clark682c58d2018-05-16 07:07:07 -04002261<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002262<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002263</pre>
2264
Cary Clark80247e52018-07-11 16:18:41 -04002265Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002266
2267### Return Value
2268
Cary Clark77b3f3a2018-11-07 14:59:03 -05002269zero and greater miter limit
Cary Clark12799e12017-07-28 15:18:29 -04002270
2271### Example
2272
2273<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2274
2275#### Example Output
2276
2277~~~~
2278default miter limit == 4
2279~~~~
2280
2281</fiddle-embed></div>
2282
2283### See Also
2284
Cary Clark77b3f3a2018-11-07 14:59:03 -05002285<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 -04002286
Cary Clark682c58d2018-05-16 07:07:07 -04002287<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002288
2289---
Cary Clark12799e12017-07-28 15:18:29 -04002290
Cary Clark682c58d2018-05-16 07:07:07 -04002291<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002292void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002293</pre>
2294
Cary Clark80247e52018-07-11 16:18:41 -04002295Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002296Valid values are zero and greater.
Cary Clark777eede2018-11-09 16:04:58 -05002297Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002298
2299### Parameters
2300
Cary Clark682c58d2018-05-16 07:07:07 -04002301<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002302 <td>zero and greater <a href='#Miter_Limit'>miter limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002303 </tr>
2304</table>
2305
2306### Example
2307
skia-bookmakera717ca92018-07-08 05:32:09 +00002308<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002309
2310#### Example Output
2311
2312~~~~
2313default miter limit == 8
2314~~~~
2315
2316</fiddle-embed></div>
2317
2318### See Also
2319
Cary Clark77b3f3a2018-11-07 14:59:03 -05002320<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 -04002321
Cary Clarka90ea222018-10-16 10:30:28 -04002322<a name='Stroke_Cap'></a>
2323
2324<a name='SkPaint_Cap'></a>
2325
Cary Clark12799e12017-07-28 15:18:29 -04002326---
2327
Cary Clarka560c472017-11-27 10:44:06 -05002328<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002329 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002330 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2331 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2332 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002333 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2334 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002335 };
Cary Clarka90ea222018-10-16 10:30:28 -04002336</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002337
Cary Clarka90ea222018-10-16 10:30:28 -04002338<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002339 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 -05002340</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002341
Cary Clark777eede2018-11-09 16:04:58 -05002342<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 -04002343
2344### Constants
2345
Cary Clark682c58d2018-05-16 07:07:07 -04002346<table style='border-collapse: collapse; width: 62.5em'>
2347 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2348<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2349<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2350 <tr style='background-color: #f0f0f0; '>
2351 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2352 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2353 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2354Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002355</td>
Cary Clark12799e12017-07-28 15:18:29 -04002356 </tr>
2357 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002358 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2359 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2360 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002361Adds a <a href='undocumented#Circle'>circle</a> with a diameter equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2362and end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002363</td>
Cary Clark12799e12017-07-28 15:18:29 -04002364 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002365 <tr style='background-color: #f0f0f0; '>
2366 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2367 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2368 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002369Adds a square with sides equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2370and end. The square sides are parallel to the initial and final direction
2371of the stroke.
Cary Clark1a8d7622018-03-05 13:26:16 -05002372</td>
Cary Clark12799e12017-07-28 15:18:29 -04002373 </tr>
2374 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002375 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2376 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2377 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002378Equivalent to the largest value for <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002379</td>
2380 </tr>
2381 <tr style='background-color: #f0f0f0; '>
2382 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2383 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2384 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002385<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 -05002386</td>
Cary Clark12799e12017-07-28 15:18:29 -04002387 </tr>
2388 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002389 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2390 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2391 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002392May be used to verify that <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002393</td>
Cary Clark12799e12017-07-28 15:18:29 -04002394 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002395</table>
Cary Clark12799e12017-07-28 15:18:29 -04002396
Cary Clark777eede2018-11-09 16:04:58 -05002397Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2398follows 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 -04002399
Cary Clark777eede2018-11-09 16:04:58 -05002400If 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
2401visible beginning and end.
Cary Clark12799e12017-07-28 15:18:29 -04002402
Cary Clark777eede2018-11-09 16:04:58 -05002403<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 -04002404
Cary Clark777eede2018-11-09 16:04:58 -05002405<a href='#SkPaint_kButt_Cap'>kButt_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> is not drawn.
2406<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>
2407at the <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPoint_Reference#Point'>point</a>.
2408<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
2409<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 -04002410
Cary Clark777eede2018-11-09 16:04:58 -05002411<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 -04002412
Cary Clark12799e12017-07-28 15:18:29 -04002413### Example
2414
Cary Clark2ade9972017-11-02 17:49:34 -04002415<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002416
Cary Clark682c58d2018-05-16 07:07:07 -04002417<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002418
2419---
Cary Clark12799e12017-07-28 15:18:29 -04002420
Cary Clark682c58d2018-05-16 07:07:07 -04002421<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002422<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002423</pre>
2424
Cary Clark80247e52018-07-11 16:18:41 -04002425Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002426
2427### Return Value
2428
Cary Clark09d80c02018-10-31 12:14:03 -04002429one 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 -04002430
2431### Example
2432
2433<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2434
2435#### Example Output
2436
2437~~~~
2438kButt_Cap == default stroke cap
2439~~~~
2440
2441</fiddle-embed></div>
2442
2443### See Also
2444
Cary Clark77b3f3a2018-11-07 14:59:03 -05002445<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002446
Cary Clark682c58d2018-05-16 07:07:07 -04002447<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002448
2449---
Cary Clark12799e12017-07-28 15:18:29 -04002450
Cary Clark682c58d2018-05-16 07:07:07 -04002451<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002452void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002453</pre>
2454
Cary Clark80247e52018-07-11 16:18:41 -04002455Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002456
2457### Parameters
2458
Cary Clark682c58d2018-05-16 07:07:07 -04002459<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002460 <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 -04002461 </tr>
2462</table>
2463
Cary Clark777eede2018-11-09 16:04:58 -05002464has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid
Cary Clark09d80c02018-10-31 12:14:03 -04002465
Cary Clark12799e12017-07-28 15:18:29 -04002466### Example
2467
2468<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2469
2470#### Example Output
2471
2472~~~~
2473kRound_Cap == paint.getStrokeCap()
2474~~~~
2475
2476</fiddle-embed></div>
2477
2478### See Also
2479
Cary Clark77b3f3a2018-11-07 14:59:03 -05002480<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002481
Cary Clarka90ea222018-10-16 10:30:28 -04002482<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002483
Cary Clark777eede2018-11-09 16:04:58 -05002484<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 -04002485
Cary Clark777eede2018-11-09 16:04:58 -05002486Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2487follows 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 -04002488
Cary Clark777eede2018-11-09 16:04:58 -05002489If the <a href='SkPath_Overview#Contour'>contour</a> direction changes abruptly, because the tangent direction leading
2490to 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
2491the 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 -04002492
2493### Example
2494
Cary Clark2ade9972017-11-02 17:49:34 -04002495<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002496
Cary Clarka90ea222018-10-16 10:30:28 -04002497<a name='SkPaint_Join'></a>
2498
2499---
Cary Clark12799e12017-07-28 15:18:29 -04002500
Cary Clarka560c472017-11-27 10:44:06 -05002501<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002502 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04002503 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2504 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2505 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002506 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2507 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002508 };
Cary Clarka90ea222018-10-16 10:30:28 -04002509</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002510
Cary Clarka90ea222018-10-16 10:30:28 -04002511<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002512 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 -05002513</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002514
Cary Clark777eede2018-11-09 16:04:58 -05002515<a href='#SkPaint_Join'>Join</a> specifies how corners are drawn when a shape is stroked. <a href='#SkPaint_Join'>Join</a>
2516affects the four corners of a stroked rectangle, and the connected segments in a
2517stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002518
Cary Clark777eede2018-11-09 16:04:58 -05002519Choose miter join to draw sharp corners. Choose round join to draw a <a href='undocumented#Circle'>circle</a> with a
2520radius equal to the <a href='#Stroke_Width'>stroke width</a> on top of the corner. Choose bevel join to minimally
2521connect the thick strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002522
Cary Clark777eede2018-11-09 16:04:58 -05002523The <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
2524not contain the actual join. For instance, a <a href='#Fill_Path'>fill path</a> constructed with round joins does
2525not necessarily include <a href='undocumented#Circle'>circles</a> at each connected segment.
Cary Clark12799e12017-07-28 15:18:29 -04002526
2527### Constants
2528
Cary Clark682c58d2018-05-16 07:07:07 -04002529<table style='border-collapse: collapse; width: 62.5em'>
2530 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2531<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2532<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2533 <tr style='background-color: #f0f0f0; '>
2534 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2535 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2536 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002537Extends the outside corner to the extent allowed by <a href='#Paint_Miter_Limit'>Miter_Limit</a>.
Cary Clark777eede2018-11-09 16:04:58 -05002538If 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 -05002539</td>
Cary Clark12799e12017-07-28 15:18:29 -04002540 </tr>
2541 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002542 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2543 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2544 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002545Adds 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 -04002546</td>
2547 </tr>
2548 <tr style='background-color: #f0f0f0; '>
2549 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2550 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2551 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2552Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002553</td>
Cary Clark12799e12017-07-28 15:18:29 -04002554 </tr>
2555 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002556 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2557 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2559equivalent to the largest value for Stroke_Join</td>
2560 </tr>
2561 <tr style='background-color: #f0f0f0; '>
2562 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2563 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2564 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002565<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 -05002566</td>
Cary Clark12799e12017-07-28 15:18:29 -04002567 </tr>
2568 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002569 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2570 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2571 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002572May be used to verify that <a href='#Paint_Stroke_Join'>Stroke_Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002573</td>
Cary Clark12799e12017-07-28 15:18:29 -04002574 </tr>
2575</table>
2576
2577### Example
2578
2579<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2580
2581### See Also
2582
Cary Clark682c58d2018-05-16 07:07:07 -04002583<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 -04002584
Cary Clark682c58d2018-05-16 07:07:07 -04002585<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002586
2587---
Cary Clark12799e12017-07-28 15:18:29 -04002588
Cary Clark682c58d2018-05-16 07:07:07 -04002589<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002590<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002591</pre>
2592
Cary Clark80247e52018-07-11 16:18:41 -04002593Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002594
2595### Return Value
2596
Cary Clark09d80c02018-10-31 12:14:03 -04002597one 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 -04002598
2599### Example
2600
Cary Clark7f644ec2018-07-19 10:50:44 -04002601<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002602
2603#### Example Output
2604
2605~~~~
2606kMiter_Join == default stroke join
2607~~~~
2608
2609</fiddle-embed></div>
2610
2611### See Also
2612
Cary Clark77b3f3a2018-11-07 14:59:03 -05002613<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002614
Cary Clark682c58d2018-05-16 07:07:07 -04002615<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002616
2617---
Cary Clark12799e12017-07-28 15:18:29 -04002618
Cary Clark682c58d2018-05-16 07:07:07 -04002619<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002620void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002621</pre>
2622
Cary Clark80247e52018-07-11 16:18:41 -04002623Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002624
2625### Parameters
2626
Cary Clark682c58d2018-05-16 07:07:07 -04002627<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002628 <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 -04002629 </tr>
2630</table>
2631
Cary Clark09d80c02018-10-31 12:14:03 -04002632otherwise, has no effect
2633
Cary Clark12799e12017-07-28 15:18:29 -04002634### Example
2635
2636<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2637
2638#### Example Output
2639
2640~~~~
2641kMiter_Join == paint.getStrokeJoin()
2642~~~~
2643
2644</fiddle-embed></div>
2645
2646### See Also
2647
Cary Clark77b3f3a2018-11-07 14:59:03 -05002648<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002649
Cary Clark12799e12017-07-28 15:18:29 -04002650### See Also
2651
Cary Clark77b3f3a2018-11-07 14:59:03 -05002652<a href='#Paint_Miter_Limit'>Miter_Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002653
Cary Clarka90ea222018-10-16 10:30:28 -04002654<a name='Fill_Path'></a>
2655
2656---
Cary Clark08895c42018-02-01 09:37:32 -05002657
Cary Clark777eede2018-11-09 16:04:58 -05002658<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 -04002659
Cary Clark777eede2018-11-09 16:04:58 -05002660If <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
2661replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2662destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002663
Cary Clark777eede2018-11-09 16:04:58 -05002664Fill <a href='SkPath_Reference#Path'>Path</a> can request the <a href='#Path_Effect'>Path_Effect</a> to restrict to a culling rectangle, but
2665the <a href='#Path_Effect'>Path_Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002666
Cary Clark777eede2018-11-09 16:04:58 -05002667If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
2668and <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>,
2669and <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 -04002670
Cary Clark777eede2018-11-09 16:04:58 -05002671Fill <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 -04002672
Cary Clark777eede2018-11-09 16:04:58 -05002673If 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>
2674returns false since Hairline has no filled equivalent.
Cary Clarka90ea222018-10-16 10:30:28 -04002675
2676### See Also
2677
Cary Clark77b3f3a2018-11-07 14:59:03 -05002678<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 -04002679
Cary Clark682c58d2018-05-16 07:07:07 -04002680<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002681
2682---
Cary Clark12799e12017-07-28 15:18:29 -04002683
Cary Clark682c58d2018-05-16 07:07:07 -04002684<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002685bool <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 -04002686</pre>
2687
Cary Clark09d80c02018-10-31 12:14:03 -04002688Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002689
2690### Parameters
2691
Cary Clark682c58d2018-05-16 07:07:07 -04002692<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002693 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002694 </tr>
2695 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002696 <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 -04002697 </tr>
2698 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002699 <td>optional limit passed to <a href='undocumented#SkPathEffect'>SkPathEffect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04002700 </tr>
2701 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002702 <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 -04002703 </tr>
2704</table>
2705
Cary Clark09d80c02018-10-31 12:14:03 -04002706to favor speed and <a href='undocumented#Size'>size</a>
2707
Cary Clark12799e12017-07-28 15:18:29 -04002708### Return Value
2709
Cary Clark777eede2018-11-09 16:04:58 -05002710true 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 -04002711
2712### Example
2713
Cary Clark777eede2018-11-09 16:04:58 -05002714<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.
2715At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
2716At 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 -05002717</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002718
Cary Clark682c58d2018-05-16 07:07:07 -04002719<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002720
Cary Clarka90ea222018-10-16 10:30:28 -04002721---
2722
Cary Clark682c58d2018-05-16 07:07:07 -04002723<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002724bool <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 -04002725</pre>
2726
Cary Clark09d80c02018-10-31 12:14:03 -04002727Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002728
Cary Clark777eede2018-11-09 16:04:58 -05002729Replaces <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>.
2730<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 -04002731
2732### Parameters
2733
Cary Clark682c58d2018-05-16 07:07:07 -04002734<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002735 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002736 </tr>
2737 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002738 <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 -04002739 </tr>
2740</table>
2741
2742### Return Value
2743
Cary Clark777eede2018-11-09 16:04:58 -05002744true 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 -04002745
2746### Example
2747
2748<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2749
Cary Clarka90ea222018-10-16 10:30:28 -04002750<a name='Shader_Methods'></a>
2751
Cary Clark12799e12017-07-28 15:18:29 -04002752---
2753
Cary Clark777eede2018-11-09 16:04:58 -05002754<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2755<a href='undocumented#Shader'>Shader</a> may be an <a href='SkImage_Reference#Image'>image</a>, a gradient, or a computed fill.
2756If <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 -04002757
Cary Clark777eede2018-11-09 16:04:58 -05002758<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>.
2759If <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
2760the fill.
Cary Clark12799e12017-07-28 15:18:29 -04002761
Cary Clark777eede2018-11-09 16:04:58 -05002762The 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 -04002763
2764### Example
2765
2766<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2767
Cary Clark777eede2018-11-09 16:04:58 -05002768If <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 -04002769
2770### Example
2771
skia-bookmaker525f9a92018-05-03 06:27:39 +00002772<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002773
Cary Clark682c58d2018-05-16 07:07:07 -04002774<a name='SkPaint_getShader'></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#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002780</pre>
2781
Cary Clark777eede2018-11-09 16:04:58 -05002782Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002783
Cary Clark09d80c02018-10-31 12:14:03 -04002784Does not alter <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002785
2786### Return Value
2787
Cary Clark777eede2018-11-09 16:04:58 -05002788<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002789
2790### Example
2791
2792<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2793
2794#### Example Output
2795
2796~~~~
2797nullptr == shader
2798nullptr != shader
2799~~~~
2800
2801</fiddle-embed></div>
2802
Cary Clark682c58d2018-05-16 07:07:07 -04002803<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002804
2805---
Cary Clark12799e12017-07-28 15:18:29 -04002806
Cary Clark682c58d2018-05-16 07:07:07 -04002807<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002808<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 -04002809</pre>
2810
Cary Clark777eede2018-11-09 16:04:58 -05002811Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002812
Cary Clark777eede2018-11-09 16:04:58 -05002813Increases <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002814
2815### Return Value
2816
Cary Clark777eede2018-11-09 16:04:58 -05002817<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002818
2819### Example
2820
2821<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2822
2823#### Example Output
2824
2825~~~~
2826shader unique: true
2827shader unique: false
2828~~~~
2829
2830</fiddle-embed></div>
2831
Cary Clark682c58d2018-05-16 07:07:07 -04002832<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002833
2834---
Cary Clark12799e12017-07-28 15:18:29 -04002835
Cary Clark682c58d2018-05-16 07:07:07 -04002836<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002837void <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 -04002838</pre>
2839
Cary Clark777eede2018-11-09 16:04:58 -05002840Sets optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002841
Cary Clark777eede2018-11-09 16:04:58 -05002842Sets <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>.
2843Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002844
2845### Parameters
2846
Cary Clark682c58d2018-05-16 07:07:07 -04002847<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002848 <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 -04002849 </tr>
2850</table>
2851
2852### Example
2853
skia-bookmakere0a458f2018-07-16 05:29:00 +00002854<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002855
Cary Clarka90ea222018-10-16 10:30:28 -04002856<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002857
Cary Clarka90ea222018-10-16 10:30:28 -04002858---
Cary Clark08895c42018-02-01 09:37:32 -05002859
Cary Clark777eede2018-11-09 16:04:58 -05002860<a href='#Color_Filter'>Color_Filter</a> alters the <a href='SkColor_Reference#Color'>color</a> used when drawing a shape.
2861<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.
2862If <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 -04002863
Cary Clark777eede2018-11-09 16:04:58 -05002864The 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 -04002865
2866### Example
2867
2868<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2869
Cary Clark682c58d2018-05-16 07:07:07 -04002870<a name='SkPaint_getColorFilter'></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='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002876</pre>
2877
Cary Clark777eede2018-11-09 16:04:58 -05002878Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002879Does not alter <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002880
2881### Return Value
2882
Cary Clark777eede2018-11-09 16:04:58 -05002883<a href='undocumented#SkColorFilter'>SkColorFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002884
2885### Example
2886
2887<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2888
2889#### Example Output
2890
2891~~~~
2892nullptr == color filter
2893nullptr != color filter
2894~~~~
2895
2896</fiddle-embed></div>
2897
Cary Clark682c58d2018-05-16 07:07:07 -04002898<a name='SkPaint_refColorFilter'></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 -05002903<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 -04002904</pre>
2905
Cary Clark777eede2018-11-09 16:04:58 -05002906Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
2907Increases <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002908
2909### Return Value
2910
Cary Clark777eede2018-11-09 16:04:58 -05002911<a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002912
2913### Example
2914
2915<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2916
2917#### Example Output
2918
2919~~~~
2920color filter unique: true
2921color filter unique: false
2922~~~~
2923
2924</fiddle-embed></div>
2925
Cary Clark682c58d2018-05-16 07:07:07 -04002926<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002927
2928---
Cary Clark12799e12017-07-28 15:18:29 -04002929
Cary Clark682c58d2018-05-16 07:07:07 -04002930<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002931void <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 -04002932</pre>
2933
Cary Clark777eede2018-11-09 16:04:58 -05002934Sets <a href='undocumented#SkColorFilter'>SkColorFilter</a> to filter, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
2935<a href='undocumented#SkColorFilter'>SkColorFilter</a>. Pass nullptr to clear <a href='undocumented#SkColorFilter'>SkColorFilter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04002936
Cary Clark777eede2018-11-09 16:04:58 -05002937Increments filter <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002938
2939### Parameters
2940
Cary Clark682c58d2018-05-16 07:07:07 -04002941<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002942 <td><a href='undocumented#SkColorFilter'>SkColorFilter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002943 </tr>
2944</table>
2945
2946### Example
2947
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002948<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002949
Cary Clarka90ea222018-10-16 10:30:28 -04002950<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002951
Cary Clarka90ea222018-10-16 10:30:28 -04002952---
Cary Clark08895c42018-02-01 09:37:32 -05002953
Cary Clark777eede2018-11-09 16:04:58 -05002954<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>.
2955The 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>
2956over the destination <a href='SkColor_Reference#Color'>color</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002957
2958### Example
2959
Cary Clark83647062018-07-18 16:21:51 -04002960<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002961
2962### See Also
2963
Cary Clark77b3f3a2018-11-07 14:59:03 -05002964<a href='#Blend_Mode'>Blend_Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002965
Cary Clark682c58d2018-05-16 07:07:07 -04002966<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002967
2968---
Cary Clark12799e12017-07-28 15:18:29 -04002969
Cary Clark682c58d2018-05-16 07:07:07 -04002970<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002971<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002972</pre>
2973
Cary Clark09d80c02018-10-31 12:14:03 -04002974Returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>.
2975By default, returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002976
2977### Return Value
2978
Cary Clark777eede2018-11-09 16:04:58 -05002979mode 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 -04002980
2981### Example
2982
skia-bookmaker525f9a92018-05-03 06:27:39 +00002983<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04002984
2985#### Example Output
2986
2987~~~~
2988kSrcOver == getBlendMode
2989kSrcOver != getBlendMode
2990~~~~
2991
2992</fiddle-embed></div>
2993
Cary Clark682c58d2018-05-16 07:07:07 -04002994<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002995
2996---
Cary Clark12799e12017-07-28 15:18:29 -04002997
Cary Clark682c58d2018-05-16 07:07:07 -04002998<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002999bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003000</pre>
3001
Cary Clark777eede2018-11-09 16:04:58 -05003002Returns 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 -04003003
3004### Return Value
3005
Cary Clark777eede2018-11-09 16:04:58 -05003006true 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 -04003007
3008### Example
3009
3010<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3011
3012#### Example Output
3013
3014~~~~
3015isSrcOver == true
3016isSrcOver != true
3017~~~~
3018
3019</fiddle-embed></div>
3020
Cary Clark682c58d2018-05-16 07:07:07 -04003021<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003022
3023---
Cary Clark12799e12017-07-28 15:18:29 -04003024
Cary Clark682c58d2018-05-16 07:07:07 -04003025<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003026void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003027</pre>
3028
Cary Clark777eede2018-11-09 16:04:58 -05003029Sets <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003030Does not check for valid input.
3031
3032### Parameters
3033
Cary Clark682c58d2018-05-16 07:07:07 -04003034<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003035 <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 -04003036 </tr>
3037</table>
3038
3039### Example
3040
3041<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3042
3043#### Example Output
3044
3045~~~~
3046isSrcOver == true
3047isSrcOver != true
3048~~~~
3049
3050</fiddle-embed></div>
3051
Cary Clarka90ea222018-10-16 10:30:28 -04003052<a name='Path_Effect_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='#Path_Effect'>Path_Effect</a> modifies the <a href='SkPath_Reference#Path'>path</a> geometry before drawing it.
3057<a href='#Path_Effect'>Path_Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3058If <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 -04003059
3060### Example
3061
3062<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3063
3064### See Also
3065
Cary Clark77b3f3a2018-11-07 14:59:03 -05003066<a href='#Path_Effect'>Path_Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003067
Cary Clark682c58d2018-05-16 07:07:07 -04003068<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003069
3070---
Cary Clark12799e12017-07-28 15:18:29 -04003071
Cary Clark682c58d2018-05-16 07:07:07 -04003072<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003073<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003074</pre>
3075
Cary Clark777eede2018-11-09 16:04:58 -05003076Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003077Does not alter <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003078
3079### Return Value
3080
Cary Clark777eede2018-11-09 16:04:58 -05003081<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003082
3083### Example
3084
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003085<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003086
3087#### Example Output
3088
3089~~~~
3090nullptr == path effect
3091nullptr != path effect
3092~~~~
3093
3094</fiddle-embed></div>
3095
Cary Clark682c58d2018-05-16 07:07:07 -04003096<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003097
3098---
Cary Clark12799e12017-07-28 15:18:29 -04003099
Cary Clark682c58d2018-05-16 07:07:07 -04003100<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003101<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 -04003102</pre>
3103
Cary Clark777eede2018-11-09 16:04:58 -05003104Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
3105Increases <a href='undocumented#SkPathEffect'>SkPathEffect</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#SkPathEffect'>SkPathEffect</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="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003114
3115#### Example Output
3116
3117~~~~
3118path effect unique: true
3119path effect unique: false
3120~~~~
3121
3122</fiddle-embed></div>
3123
Cary Clark682c58d2018-05-16 07:07:07 -04003124<a name='SkPaint_setPathEffect'></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_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 -04003130</pre>
3131
Cary Clark777eede2018-11-09 16:04:58 -05003132Sets <a href='undocumented#SkPathEffect'>SkPathEffect</a> to <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3133<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 -04003134
Cary Clark777eede2018-11-09 16:04:58 -05003135Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003136
3137### Parameters
3138
Cary Clark682c58d2018-05-16 07:07:07 -04003139<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003140 <td>replace <a href='SkPath_Reference#SkPath'>SkPath</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003141 </tr>
3142</table>
3143
3144### Example
3145
3146<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3147
Cary Clarka90ea222018-10-16 10:30:28 -04003148<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003149
Cary Clarka90ea222018-10-16 10:30:28 -04003150---
Cary Clark08895c42018-02-01 09:37:32 -05003151
Cary Clark777eede2018-11-09 16:04:58 -05003152<a href='#Mask_Filter'>Mask_Filter</a> uses coverage of the shape drawn to create <a href='#Mask_Alpha'>Mask_Alpha</a>.
3153<a href='#Mask_Filter'>Mask_Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003154
Cary Clark777eede2018-11-09 16:04:58 -05003155<a href='#Mask_Filter'>Mask_Filter</a> may change the geometry and transparency of the shape, such as
3156creating a blur effect. Set <a href='#Mask_Filter'>Mask_Filter</a> to nullptr to prevent <a href='#Mask_Filter'>Mask_Filter</a> from
3157modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003158
3159### Example
3160
Cary Clark681287e2018-03-16 11:34:15 -04003161<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003162
Cary Clark682c58d2018-05-16 07:07:07 -04003163<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003164
3165---
Cary Clark12799e12017-07-28 15:18:29 -04003166
Cary Clark682c58d2018-05-16 07:07:07 -04003167<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003168<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003169</pre>
3170
Cary Clark777eede2018-11-09 16:04:58 -05003171Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003172Does not alter <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003173
3174### Return Value
3175
Cary Clark777eede2018-11-09 16:04:58 -05003176<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003177
3178### Example
3179
Cary Clark681287e2018-03-16 11:34:15 -04003180<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003181
3182#### Example Output
3183
3184~~~~
3185nullptr == mask filter
3186nullptr != mask filter
3187~~~~
3188
3189</fiddle-embed></div>
3190
Cary Clark682c58d2018-05-16 07:07:07 -04003191<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003192
3193---
Cary Clark12799e12017-07-28 15:18:29 -04003194
Cary Clark682c58d2018-05-16 07:07:07 -04003195<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003196<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 -04003197</pre>
3198
Cary Clark777eede2018-11-09 16:04:58 -05003199Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003200
Cary Clark777eede2018-11-09 16:04:58 -05003201Increases <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003202
3203### Return Value
3204
Cary Clark777eede2018-11-09 16:04:58 -05003205<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003206
3207### Example
3208
Cary Clark83647062018-07-18 16:21:51 -04003209<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003210
3211#### Example Output
3212
3213~~~~
3214mask filter unique: true
3215mask filter unique: false
3216~~~~
3217
3218</fiddle-embed></div>
3219
Cary Clark682c58d2018-05-16 07:07:07 -04003220<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003221
3222---
Cary Clark12799e12017-07-28 15:18:29 -04003223
Cary Clark682c58d2018-05-16 07:07:07 -04003224<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003225void <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 -04003226</pre>
3227
Cary Clark777eede2018-11-09 16:04:58 -05003228Sets <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> to <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3229<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 -04003230<a href='undocumented#Mask_Alpha'>mask alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003231
Cary Clark777eede2018-11-09 16:04:58 -05003232Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003233
3234### Parameters
3235
Cary Clark682c58d2018-05-16 07:07:07 -04003236<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3237 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003238 </tr>
3239</table>
3240
3241### Example
3242
Cary Clark681287e2018-03-16 11:34:15 -04003243<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003244
Cary Clarka90ea222018-10-16 10:30:28 -04003245<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003246
Cary Clarka90ea222018-10-16 10:30:28 -04003247---
Cary Clark08895c42018-02-01 09:37:32 -05003248
Cary Clark777eede2018-11-09 16:04:58 -05003249<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>.
3250<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>.
3251The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default <a href='undocumented#Font'>font</a>
3252implementation.
Cary Clark12799e12017-07-28 15:18:29 -04003253
3254### Example
3255
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003256<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003257
Cary Clark682c58d2018-05-16 07:07:07 -04003258<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003259
3260---
Cary Clark12799e12017-07-28 15:18:29 -04003261
Cary Clark682c58d2018-05-16 07:07:07 -04003262<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003263<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003264</pre>
3265
Cary Clark777eede2018-11-09 16:04:58 -05003266Returns <a href='undocumented#SkTypeface'>SkTypeface</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003267Does not alter <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003268
3269### Return Value
3270
Cary Clark777eede2018-11-09 16:04:58 -05003271<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003272
3273### Example
3274
Cary Clarkf9603982018-07-17 08:20:27 -04003275<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003276
3277#### Example Output
3278
3279~~~~
3280nullptr == typeface
3281nullptr != typeface
3282~~~~
3283
3284</fiddle-embed></div>
3285
Cary Clark682c58d2018-05-16 07:07:07 -04003286<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003287
3288---
Cary Clark12799e12017-07-28 15:18:29 -04003289
Cary Clark682c58d2018-05-16 07:07:07 -04003290<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003291<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 -04003292</pre>
3293
Cary Clark777eede2018-11-09 16:04:58 -05003294Increases <a href='undocumented#SkTypeface'>SkTypeface</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#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003299
3300### Example
3301
Cary Clark83647062018-07-18 16:21:51 -04003302<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003303
3304#### Example Output
3305
3306~~~~
3307typeface1 != typeface2
3308typeface1 == typeface2
3309~~~~
3310
3311</fiddle-embed></div>
3312
Cary Clark682c58d2018-05-16 07:07:07 -04003313<a name='SkPaint_setTypeface'></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_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 -04003319</pre>
3320
Cary Clark777eede2018-11-09 16:04:58 -05003321Sets <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>.
3322Pass nullptr to clear <a href='undocumented#SkTypeface'>SkTypeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3323<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003324
3325### Parameters
3326
Cary Clark682c58d2018-05-16 07:07:07 -04003327<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003328 <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 -04003329 </tr>
3330</table>
3331
3332### Example
3333
Cary Clark71961fb2018-01-05 14:21:59 -05003334<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003335
Cary Clarka90ea222018-10-16 10:30:28 -04003336<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003337
Cary Clarka90ea222018-10-16 10:30:28 -04003338---
Cary Clark08895c42018-02-01 09:37:32 -05003339
Cary Clark777eede2018-11-09 16:04:58 -05003340<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>
3341with <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>,
3342which 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 -04003343
Cary Clark777eede2018-11-09 16:04:58 -05003344<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>
3345can 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.
3346<a href='#Image_Filter'>Image_Filter</a> operates independently of and can be used in combination with
Cary Clark77b3f3a2018-11-07 14:59:03 -05003347<a href='#Mask_Filter'>Mask_Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003348
3349### Example
3350
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003351<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003352
Cary Clark682c58d2018-05-16 07:07:07 -04003353<a name='SkPaint_getImageFilter'></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#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003359</pre>
3360
Cary Clark777eede2018-11-09 16:04:58 -05003361Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003362Does not alter <a href='undocumented#SkImageFilter'>SkImageFilter</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#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003367
3368### Example
3369
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003370<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003371
3372#### Example Output
3373
3374~~~~
3375nullptr == image filter
3376nullptr != image filter
3377~~~~
3378
3379</fiddle-embed></div>
3380
Cary Clark682c58d2018-05-16 07:07:07 -04003381<a name='SkPaint_refImageFilter'></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#SkImageFilter'>SkImageFilter</a>&gt; <a href='#SkPaint_refImageFilter'>refImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003387</pre>
3388
Cary Clark777eede2018-11-09 16:04:58 -05003389Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
3390Increases <a href='undocumented#SkImageFilter'>SkImageFilter</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#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003395
3396### Example
3397
3398<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3399
3400#### Example Output
3401
3402~~~~
3403image filter unique: true
3404image filter unique: false
3405~~~~
3406
3407</fiddle-embed></div>
3408
Cary Clark682c58d2018-05-16 07:07:07 -04003409<a name='SkPaint_setImageFilter'></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 Clark777eede2018-11-09 16:04:58 -05003414void <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 -04003415</pre>
3416
Cary Clark777eede2018-11-09 16:04:58 -05003417Sets <a href='undocumented#SkImageFilter'>SkImageFilter</a> to <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3418<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 -04003419on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003420
Cary Clark777eede2018-11-09 16:04:58 -05003421Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</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_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003426 <td>how <a href='SkImage_Reference#SkImage'>SkImage</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003427 </tr>
3428</table>
3429
3430### Example
3431
3432<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3433
Cary Clarka90ea222018-10-16 10:30:28 -04003434<a name='Draw_Looper_Methods'></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='#Draw_Looper'>Draw_Looper</a> sets a modifier that communicates state from one <a href='#Draw_Layer'>Draw_Layer</a>
3439to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003440
Cary Clark777eede2018-11-09 16:04:58 -05003441<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.
3442<a href='#Draw_Looper'>Draw_Looper</a> may be used to draw multiple colors or create a colored shadow.
3443Set <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 -04003444
3445### Example
3446
3447<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3448
Cary Clark682c58d2018-05-16 07:07:07 -04003449<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003450
3451---
Cary Clark12799e12017-07-28 15:18:29 -04003452
Cary Clark682c58d2018-05-16 07:07:07 -04003453<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003454<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003455</pre>
3456
Cary Clark777eede2018-11-09 16:04:58 -05003457Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003458Does not alter <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003459
3460### Return Value
3461
Cary Clark777eede2018-11-09 16:04:58 -05003462<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003463
3464### Example
3465
3466<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3467
3468#### Example Output
3469
3470~~~~
3471nullptr == draw looper
3472nullptr != draw looper
3473~~~~
3474
3475</fiddle-embed></div>
3476
Cary Clark682c58d2018-05-16 07:07:07 -04003477<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003478
3479---
Cary Clark12799e12017-07-28 15:18:29 -04003480
Cary Clark682c58d2018-05-16 07:07:07 -04003481<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003482<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 -04003483</pre>
3484
Cary Clark777eede2018-11-09 16:04:58 -05003485Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
3486Increases <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003487
3488### Return Value
3489
Cary Clark777eede2018-11-09 16:04:58 -05003490<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003491
3492### Example
3493
3494<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3495
3496#### Example Output
3497
3498~~~~
3499draw looper unique: true
3500draw looper unique: false
3501~~~~
3502
3503</fiddle-embed></div>
3504
Cary Clark682c58d2018-05-16 07:07:07 -04003505<a name='SkPaint_getLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003506
3507---
Cary Clark12799e12017-07-28 15:18:29 -04003508
Cary Clark682c58d2018-05-16 07:07:07 -04003509<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003510<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003511</pre>
3512
Cary Clark682c58d2018-05-16 07:07:07 -04003513Deprecated.
3514
Cary Clark682c58d2018-05-16 07:07:07 -04003515<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003516
3517---
Cary Clark12799e12017-07-28 15:18:29 -04003518
Cary Clark682c58d2018-05-16 07:07:07 -04003519<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003520void setDrawLooper(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003521</pre>
3522
Cary Clark777eede2018-11-09 16:04:58 -05003523Sets <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> to <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3524<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 -04003525drawing unaltered.
3526
Cary Clark777eede2018-11-09 16:04:58 -05003527Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003528
3529### Parameters
3530
Cary Clark682c58d2018-05-16 07:07:07 -04003531<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003532 <td>iterates through drawing one or more time, altering <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003533 </tr>
3534</table>
3535
3536### Example
3537
3538<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3539
Cary Clark682c58d2018-05-16 07:07:07 -04003540<a name='SkPaint_setLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003541
3542---
Cary Clark12799e12017-07-28 15:18:29 -04003543
Cary Clark682c58d2018-05-16 07:07:07 -04003544<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003545void <a href='#SkPaint_setLooper'>setLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003546</pre>
3547
Cary Clark682c58d2018-05-16 07:07:07 -04003548Deprecated.
3549
Cary Clarka90ea222018-10-16 10:30:28 -04003550<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003551
Cary Clarka90ea222018-10-16 10:30:28 -04003552---
Cary Clark08895c42018-02-01 09:37:32 -05003553
Cary Clark777eede2018-11-09 16:04:58 -05003554<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>.
3555<a href='#Paint_Text_Size'>Text_Size</a> can be set to any positive value or zero.
3556<a href='#Paint_Text_Size'>Text_Size</a> defaults to 12.
3557Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults_TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003558
3559### Example
3560
3561<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3562
Cary Clark682c58d2018-05-16 07:07:07 -04003563<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003564
3565---
Cary Clark12799e12017-07-28 15:18:29 -04003566
Cary Clark682c58d2018-05-16 07:07:07 -04003567<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003568<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003569</pre>
3570
Cary Clark777eede2018-11-09 16:04:58 -05003571Returns <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 -04003572
3573### Return Value
3574
Cary Clark09d80c02018-10-31 12:14:03 -04003575typographic height of <a href='undocumented#Text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04003576
3577### Example
3578
skia-bookmaker233c6522018-07-04 05:33:26 +00003579<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003580
Cary Clark682c58d2018-05-16 07:07:07 -04003581<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003582
3583---
Cary Clark12799e12017-07-28 15:18:29 -04003584
Cary Clark682c58d2018-05-16 07:07:07 -04003585<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003586void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003587</pre>
3588
Cary Clark777eede2018-11-09 16:04:58 -05003589Sets <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
3590Has 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 -04003591
3592### Parameters
3593
Cary Clark682c58d2018-05-16 07:07:07 -04003594<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003595 <td>typographic height of <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003596 </tr>
3597</table>
3598
3599### Example
3600
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003601<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003602
Cary Clarka90ea222018-10-16 10:30:28 -04003603<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003604
Cary Clarka90ea222018-10-16 10:30:28 -04003605---
Cary Clark08895c42018-02-01 09:37:32 -05003606
Cary Clark777eede2018-11-09 16:04:58 -05003607<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal scale.
3608<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
3609is not available.
3610<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> can be set to any value.
3611<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003612
3613### Example
3614
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003615<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003616
Cary Clark682c58d2018-05-16 07:07:07 -04003617<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003618
3619---
Cary Clark12799e12017-07-28 15:18:29 -04003620
Cary Clark682c58d2018-05-16 07:07:07 -04003621<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003622<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003623</pre>
3624
Cary Clark777eede2018-11-09 16:04:58 -05003625Returns <a href='undocumented#Text'>text</a> scale on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003626Default value is 1.
3627
3628### Return Value
3629
Cary Clark777eede2018-11-09 16:04:58 -05003630<a href='undocumented#Text'>text</a> horizontal scale
Cary Clark12799e12017-07-28 15:18:29 -04003631
3632### Example
3633
3634<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3635
Cary Clark682c58d2018-05-16 07:07:07 -04003636<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003637
3638---
Cary Clark12799e12017-07-28 15:18:29 -04003639
Cary Clark682c58d2018-05-16 07:07:07 -04003640<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003641void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003642</pre>
3643
Cary Clark777eede2018-11-09 16:04:58 -05003644Sets <a href='undocumented#Text'>text scale</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003645Default value is 1.
3646
3647### Parameters
3648
Cary Clark682c58d2018-05-16 07:07:07 -04003649<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003650 <td><a href='undocumented#Text'>text</a> horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003651 </tr>
3652</table>
3653
3654### Example
3655
3656<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3657
Cary Clarka90ea222018-10-16 10:30:28 -04003658<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003659
Cary Clarka90ea222018-10-16 10:30:28 -04003660---
Cary Clark08895c42018-02-01 09:37:32 -05003661
Cary Clark777eede2018-11-09 16:04:58 -05003662<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal slant.
3663<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
3664is not available.
3665<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> can be set to any value.
3666<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003667
3668### Example
3669
3670<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3671
Cary Clark682c58d2018-05-16 07:07:07 -04003672<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003673
3674---
Cary Clark12799e12017-07-28 15:18:29 -04003675
Cary Clark682c58d2018-05-16 07:07:07 -04003676<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003677<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003678</pre>
3679
Cary Clark777eede2018-11-09 16:04:58 -05003680Returns <a href='undocumented#Text'>text</a> skew on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003681Default value is zero.
3682
3683### Return Value
3684
Cary Clark09d80c02018-10-31 12:14:03 -04003685additional shear on x-axis relative to y-axis
Cary Clark12799e12017-07-28 15:18:29 -04003686
3687### Example
3688
Cary Clark7f644ec2018-07-19 10:50:44 -04003689<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003690
Cary Clark682c58d2018-05-16 07:07:07 -04003691<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003692
3693---
Cary Clark12799e12017-07-28 15:18:29 -04003694
Cary Clark682c58d2018-05-16 07:07:07 -04003695<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003696void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003697</pre>
3698
Cary Clark777eede2018-11-09 16:04:58 -05003699Sets <a href='undocumented#Text'>text skew</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003700Default value is zero.
3701
3702### Parameters
3703
Cary Clark682c58d2018-05-16 07:07:07 -04003704<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003705 <td>additional shear on x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003706 </tr>
3707</table>
3708
3709### Example
3710
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003711<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003712
Cary Clarka90ea222018-10-16 10:30:28 -04003713<a name='Text_Encoding'></a>
3714
Cary Clark12799e12017-07-28 15:18:29 -04003715---
3716
Cary Clarka90ea222018-10-16 10:30:28 -04003717<a name='SkPaint_TextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003718
Cary Clarka90ea222018-10-16 10:30:28 -04003719---
Cary Clark12799e12017-07-28 15:18:29 -04003720
Cary Clarka560c472017-11-27 10:44:06 -05003721<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003722 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04003723 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
3724 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
3725 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
3726 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003727 };
Cary Clark1a8d7622018-03-05 13:26:16 -05003728</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003729
Cary Clark777eede2018-11-09 16:04:58 -05003730<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether <a href='undocumented#Text'>text</a> specifies character codes and their encoded
3731<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 -05003732<a href='https://unicode.org/standard/standard.html'>Unicode standard</a></a> .
Cary Clark6fc50412017-09-21 12:31:06 -04003733
Cary Clark777eede2018-11-09 16:04:58 -05003734Character codes encoded <a href='undocumented#Size'>size</a> are specified by UTF-8, UTF-16, or UTF-32.
3735All character code formats are able to represent all of Unicode, differing only
3736in the total storage required.
Cary Clark12799e12017-07-28 15:18:29 -04003737
Cary Clark682c58d2018-05-16 07:07:07 -04003738<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 -04003739
Cary Clark682c58d2018-05-16 07:07:07 -04003740<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 -04003741
Cary Clark682c58d2018-05-16 07:07:07 -04003742<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 -04003743
Cary Clark777eede2018-11-09 16:04:58 -05003744<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.
3745A <a href='undocumented#Glyph'>glyph</a> index is a 16-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003746
Cary Clark777eede2018-11-09 16:04:58 -05003747<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 -04003748
3749### Constants
3750
Cary Clark682c58d2018-05-16 07:07:07 -04003751<table style='border-collapse: collapse; width: 62.5em'>
3752 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3753<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3754<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3755 <tr style='background-color: #f0f0f0; '>
3756 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
3757 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3758 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3759uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04003760 </tr>
3761 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003762 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
3763 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3764 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3765uses two byte words to represent most of Unicode</td>
3766 </tr>
3767 <tr style='background-color: #f0f0f0; '>
3768 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
3769 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3770 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3771uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04003772 </tr>
3773 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003774 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
3775 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3776 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3777uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04003778 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003779</table>
Cary Clark12799e12017-07-28 15:18:29 -04003780
3781### Example
3782
Cary Clark777eede2018-11-09 16:04:58 -05003783<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First <a href='undocumented#Line'>line</a> is encoded in UTF-8.
3784Second <a href='undocumented#Line'>line</a> is encoded in UTF-16.
3785Third <a href='undocumented#Line'>line</a> is encoded in UTF-32.
3786Fourth <a href='undocumented#Line'>line</a> has 16-bit <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003787</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003788
Cary Clark682c58d2018-05-16 07:07:07 -04003789<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003790
3791---
Cary Clark12799e12017-07-28 15:18:29 -04003792
Cary Clark682c58d2018-05-16 07:07:07 -04003793<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003794<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003795</pre>
3796
Cary Clark09d80c02018-10-31 12:14:03 -04003797Returns <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003798<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 -04003799
3800### Return Value
3801
Cary Clark777eede2018-11-09 16:04:58 -05003802one 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 -04003803
3804<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003805
3806### Example
3807
skia-bookmaker525f9a92018-05-03 06:27:39 +00003808<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04003809
3810#### Example Output
3811
3812~~~~
3813kUTF8_TextEncoding == text encoding
3814kGlyphID_TextEncoding == text encoding
3815~~~~
3816
3817</fiddle-embed></div>
3818
Cary Clark682c58d2018-05-16 07:07:07 -04003819<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003820
3821---
Cary Clark12799e12017-07-28 15:18:29 -04003822
Cary Clark682c58d2018-05-16 07:07:07 -04003823<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003824void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04003825</pre>
3826
Cary Clark777eede2018-11-09 16:04:58 -05003827Sets <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
3828<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.
3829Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
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_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003834 <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 -04003835 </tr>
3836</table>
3837
Cary Clark09d80c02018-10-31 12:14:03 -04003838<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
3839
Cary Clark12799e12017-07-28 15:18:29 -04003840### Example
3841
Cary Clark75fd4492018-06-20 12:45:16 -04003842<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04003843
3844#### Example Output
3845
3846~~~~
38474 != text encoding
3848~~~~
3849
3850</fiddle-embed></div>
3851
Cary Clark61313f32018-10-08 14:57:48 -04003852<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04003853
Cary Clarka90ea222018-10-16 10:30:28 -04003854---
3855
Cary Clark7e69c8f2018-11-06 20:40:45 -05003856<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003857
Cary Clark682c58d2018-05-16 07:07:07 -04003858<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003859
3860---
Cary Clark12799e12017-07-28 15:18:29 -04003861
Cary Clark682c58d2018-05-16 07:07:07 -04003862<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003863<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 -04003864</pre>
3865
Cary Clark777eede2018-11-09 16:04:58 -05003866Returns <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> associated with <a href='undocumented#SkTypeface'>SkTypeface</a>.
3867The 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 -04003868descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003869If <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>.
3870Results are scaled by <a href='#Text_Size'>text size</a> but does not take into account
Cary Clark09d80c02018-10-31 12:14:03 -04003871dimensions 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>,
3872<a href='#Style_Stroke'>style stroke</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003873
3874### Parameters
3875
Cary Clark682c58d2018-05-16 07:07:07 -04003876<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003877 <td>storage for <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003878 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04003879</table>
3880
3881### Return Value
3882
Cary Clark09d80c02018-10-31 12:14:03 -04003883recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003884
3885### Example
3886
skia-bookmaker2dc1e342018-11-02 05:33:11 +00003887<div><fiddle-embed name="59d9b8249afa1c2af6186711250ce240"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003888
3889### See Also
3890
Cary Clark77b3f3a2018-11-07 14:59:03 -05003891<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 -04003892
Cary Clark682c58d2018-05-16 07:07:07 -04003893<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003894
3895---
Cary Clark12799e12017-07-28 15:18:29 -04003896
Cary Clark682c58d2018-05-16 07:07:07 -04003897<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003898<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003899</pre>
3900
Cary Clark777eede2018-11-09 16:04:58 -05003901Returns the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of metrics
Cary Clark12799e12017-07-28 15:18:29 -04003902descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003903Result 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 -04003904dimensions required by stroking and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
3905Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003906
3907### Return Value
3908
Cary Clark09d80c02018-10-31 12:14:03 -04003909recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003910
3911### Example
3912
3913<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
3914
3915#### Example Output
3916
3917~~~~
3918textSize: 12 fontSpacing: 13.9688
3919textSize: 18 fontSpacing: 20.9531
3920textSize: 24 fontSpacing: 27.9375
3921textSize: 32 fontSpacing: 37.25
3922~~~~
3923
3924</fiddle-embed></div>
3925
Cary Clark682c58d2018-05-16 07:07:07 -04003926<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003927
3928---
Cary Clark12799e12017-07-28 15:18:29 -04003929
Cary Clark682c58d2018-05-16 07:07:07 -04003930<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003931int <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 -04003932</pre>
3933
Cary Clark777eede2018-11-09 16:04:58 -05003934Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into <a href='undocumented#Glyph'>glyph</a> indices.
3935Returns the number of <a href='undocumented#Glyph'>glyph</a> indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
3936<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>.
3937<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 -04003938
Cary Clark777eede2018-11-09 16:04:58 -05003939Does 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 -04003940
Cary Clark777eede2018-11-09 16:04:58 -05003941If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
3942If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003943
Cary Clark777eede2018-11-09 16:04:58 -05003944If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a> and
3945<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04003946
3947### Parameters
3948
Cary Clark682c58d2018-05-16 07:07:07 -04003949<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003950 <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 -04003951 </tr>
3952 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
3953 <td>length of character storage in bytes</td>
3954 </tr>
3955 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003956 <td>storage for <a href='undocumented#Glyph'>glyph</a> indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003957 </tr>
3958</table>
3959
3960### Return Value
3961
Cary Clark777eede2018-11-09 16:04:58 -05003962number 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 -04003963
3964### Example
3965
3966<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
3967
Cary Clark682c58d2018-05-16 07:07:07 -04003968<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003969
3970---
Cary Clark12799e12017-07-28 15:18:29 -04003971
Cary Clark682c58d2018-05-16 07:07:07 -04003972<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003973int <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 -04003974</pre>
3975
Cary Clark777eede2018-11-09 16:04:58 -05003976Returns the number of <a href='undocumented#Glyph'>glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
3977Uses <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 -04003978Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003979
3980### Parameters
3981
Cary Clark682c58d2018-05-16 07:07:07 -04003982<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003983 <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 -04003984 </tr>
3985 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
3986 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04003987 </tr>
3988</table>
3989
3990### Return Value
3991
Cary Clark777eede2018-11-09 16:04:58 -05003992number 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 -04003993
3994### Example
3995
Cary Clarkf9603982018-07-17 08:20:27 -04003996<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04003997
3998#### Example Output
3999
4000~~~~
4001count = 5
4002~~~~
4003
4004</fiddle-embed></div>
4005
Cary Clark682c58d2018-05-16 07:07:07 -04004006<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004007
4008---
Cary Clark12799e12017-07-28 15:18:29 -04004009
Cary Clark682c58d2018-05-16 07:07:07 -04004010<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004011bool <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 -04004012</pre>
4013
Cary Clark777eede2018-11-09 16:04:58 -05004014Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index.
4015Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
Cary Clark09d80c02018-10-31 12:14:03 -04004016<a href='undocumented#SkTypeface'>SkTypeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004017
Cary Clark777eede2018-11-09 16:04:58 -05004018If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
4019returns true if all <a href='undocumented#Glyph'>glyph</a> indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
4020does 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 -04004021
Cary Clark777eede2018-11-09 16:04:58 -05004022Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004023
4024### Parameters
4025
Cary Clark682c58d2018-05-16 07:07:07 -04004026<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004027 <td>array of characters or <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004028 </tr>
4029 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004030 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004031 </tr>
4032</table>
4033
4034### Return Value
4035
Cary Clark777eede2018-11-09 16:04:58 -05004036true 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 -04004037
Cary Clark777eede2018-11-09 16:04:58 -05004038<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a <a href='undocumented#Glyph'>glyph</a> index
4039corresponding to the Unicode surrogate code <a href='SkPoint_Reference#Point'>point</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004040</div>
Cary Clark12799e12017-07-28 15:18:29 -04004041
4042#### Example Output
4043
4044~~~~
40450x00b0 == has char
40460xd800 != has char
4047~~~~
4048
Cary Clark12799e12017-07-28 15:18:29 -04004049### Example
4050
Cary Clark777eede2018-11-09 16:04:58 -05004051<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
4052that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004053</div>
Cary Clark12799e12017-07-28 15:18:29 -04004054
4055#### Example Output
4056
4057~~~~
40580x01ff == has glyph
40590x0000 != has glyph
40600xffff == has glyph
4061~~~~
4062
4063</fiddle-embed></div>
4064
4065### See Also
4066
Cary Clark682c58d2018-05-16 07:07:07 -04004067<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004068
Cary Clark682c58d2018-05-16 07:07:07 -04004069<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004070
4071---
Cary Clark12799e12017-07-28 15:18:29 -04004072
Cary Clark682c58d2018-05-16 07:07:07 -04004073<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004074void <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 -04004075</pre>
4076
Cary Clark777eede2018-11-09 16:04:58 -05004077Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
4078<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
4079Uses the <a href='undocumented#SkTypeface'>SkTypeface</a>, but is unaffected
4080by <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 -04004081
Cary Clark09d80c02018-10-31 12:14:03 -04004082Only supported on platforms that use FreeType as the <a href='undocumented#Font_Engine'>font engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004083
4084### Parameters
4085
Cary Clark682c58d2018-05-16 07:07:07 -04004086<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004087 <td>array of indices into <a href='undocumented#Font'>font</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004088 </tr>
4089 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004090 <td>length of <a href='undocumented#Glyph'>glyph</a> array</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004091 </tr>
4092 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004093 <td>storage for character codes, one per <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004094 </tr>
4095</table>
4096
4097### Example
4098
Cary Clark777eede2018-11-09 16:04:58 -05004099<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 -05004100</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004101
Cary Clarka90ea222018-10-16 10:30:28 -04004102<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004103
Cary Clark682c58d2018-05-16 07:07:07 -04004104<a name='SkPaint_measureText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004105
4106---
Cary Clark12799e12017-07-28 15:18:29 -04004107
Cary Clark682c58d2018-05-16 07:07:07 -04004108<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004109<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 -04004110</pre>
4111
Cary Clark3aca39d2018-10-23 14:44:05 -04004112Returns the advance width of <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004113The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004114Uses <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>,
4115and <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
4116<a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
4117Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
4118The 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 -04004119
4120### Parameters
4121
Cary Clark682c58d2018-05-16 07:07:07 -04004122<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004123 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004124 </tr>
4125 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004126 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004127 </tr>
4128 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
4129 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004130 </tr>
4131</table>
4132
4133### Return Value
4134
4135advance width or height
4136
4137### Example
4138
Cary Clark83647062018-07-18 16:21:51 -04004139<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004140
Cary Clark682c58d2018-05-16 07:07:07 -04004141<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05004142
Cary Clarka90ea222018-10-16 10:30:28 -04004143---
4144
Cary Clark682c58d2018-05-16 07:07:07 -04004145<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004146<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 -04004147</pre>
4148
Cary Clark3aca39d2018-10-23 14:44:05 -04004149Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004150The 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 -05004151Uses <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>,
4152and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04004153Does 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 -04004154
4155### Parameters
4156
Cary Clark682c58d2018-05-16 07:07:07 -04004157<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004158 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004159 </tr>
4160 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004161 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004162 </tr>
4163</table>
4164
4165### Return Value
4166
4167advance width or height
4168
4169### Example
4170
4171<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4172
4173#### Example Output
4174
4175~~~~
4176default width = 5
4177double width = 10
4178~~~~
4179
4180</fiddle-embed></div>
4181
Cary Clark682c58d2018-05-16 07:07:07 -04004182<a name='SkPaint_breakText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004183
4184---
Cary Clark12799e12017-07-28 15:18:29 -04004185
Cary Clark682c58d2018-05-16 07:07:07 -04004186<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004187size_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,
4188 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004189</pre>
4190
Cary Clark777eede2018-11-09 16:04:58 -05004191Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4192The <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 -04004193Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004194Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
4195Uses <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>,
4196and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04004197Does 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 -04004198
4199### Parameters
4200
Cary Clark682c58d2018-05-16 07:07:07 -04004201<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004202 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004203 </tr>
4204 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004205 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004206 </tr>
4207 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004208 <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 -04004209 </tr>
4210 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004211 <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 -04004212 </tr>
4213</table>
4214
4215### Return Value
4216
Cary Clark777eede2018-11-09 16:04:58 -05004217bytes 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 -04004218
4219### Example
4220
Cary Clark777eede2018-11-09 16:04:58 -05004221<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "Breakfast" shows desired width, shorter than available characters.
4222<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 -05004223</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004224
Cary Clark682c58d2018-05-16 07:07:07 -04004225<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004226
4227---
Cary Clark12799e12017-07-28 15:18:29 -04004228
Cary Clark682c58d2018-05-16 07:07:07 -04004229<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004230int <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 -04004231</pre>
4232
Cary Clark777eede2018-11-09 16:04:58 -05004233Retrieves 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
4234the <a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4235Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4236If <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.
4237if <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.
4238Uses <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>,
4239and <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 -04004240Does 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 -05004241Does 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 -04004242
4243### Parameters
4244
Cary Clark682c58d2018-05-16 07:07:07 -04004245<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004246 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004247 </tr>
4248 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004249 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004250 </tr>
4251 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004252 <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 -04004253 </tr>
4254 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004255 <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 -04004256 </tr>
4257</table>
4258
4259### Return Value
4260
Cary Clark777eede2018-11-09 16:04:58 -05004261<a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004262
4263### Example
4264
Cary Clark777eede2018-11-09 16:04:58 -05004265<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.
4266The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004267</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004268
Cary Clarka90ea222018-10-16 10:30:28 -04004269<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004270
Cary Clark777eede2018-11-09 16:04:58 -05004271<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 -04004272
Cary Clark682c58d2018-05-16 07:07:07 -04004273<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004274
4275---
Cary Clark12799e12017-07-28 15:18:29 -04004276
Cary Clark682c58d2018-05-16 07:07:07 -04004277<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004278void <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 -04004279</pre>
4280
Cary Clark777eede2018-11-09 16:04:58 -05004281Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
4282Uses <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>,
4283and <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>.
4284All 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>.
4285Uses <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 -04004286
4287### Parameters
4288
Cary Clark682c58d2018-05-16 07:07:07 -04004289<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004290 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004291 </tr>
4292 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4293 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4294 </tr>
4295 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004296 <td>x-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004297 </tr>
4298 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004299 <td>y-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004300 </tr>
4301 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004302 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004303 </tr>
4304</table>
4305
4306### Example
4307
Cary Clark777eede2018-11-09 16:04:58 -05004308<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
4309the offset location. The result is rendered with one draw call.
Cary Clark1a8d7622018-03-05 13:26:16 -05004310</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004311
Cary Clark682c58d2018-05-16 07:07:07 -04004312<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004313
4314---
Cary Clark12799e12017-07-28 15:18:29 -04004315
Cary Clark682c58d2018-05-16 07:07:07 -04004316<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004317void <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 -04004318</pre>
4319
Cary Clark777eede2018-11-09 16:04:58 -05004320Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
4321Uses <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>,
4322and <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>.
4323All 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>.
4324Uses <a href='#SkPaint_getPosTextPath_pos'>pos</a> array to position <a href='#SkPaint_getPosTextPath_path'>path</a>.
4325<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 -04004326
4327### Parameters
4328
Cary Clark682c58d2018-05-16 07:07:07 -04004329<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004330 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004331 </tr>
4332 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4333 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4334 </tr>
4335 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004336 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004337 </tr>
4338 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004339 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004340 </tr>
4341</table>
4342
4343### Example
4344
Cary Clark777eede2018-11-09 16:04:58 -05004345<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 -05004346</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004347
Cary Clarka90ea222018-10-16 10:30:28 -04004348<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004349
Cary Clark777eede2018-11-09 16:04:58 -05004350<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
4351of <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
4352underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004353
Cary Clark682c58d2018-05-16 07:07:07 -04004354<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004355
4356---
Cary Clark12799e12017-07-28 15:18:29 -04004357
Cary Clark682c58d2018-05-16 07:07:07 -04004358<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004359int <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,
4360 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004361</pre>
4362
Cary Clark777eede2018-11-09 16:04:58 -05004363Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
4364<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.
4365The 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 -04004366the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004367Uses <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>,
4368and <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>.
4369Uses <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 +00004370
Cary Clark777eede2018-11-09 16:04:58 -05004371Pass 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 +00004372
Cary Clark777eede2018-11-09 16:04:58 -05004373<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004374
4375### Parameters
4376
Cary Clark682c58d2018-05-16 07:07:07 -04004377<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004378 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004379 </tr>
4380 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
4381 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
4382 </tr>
4383 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004384 <td>x-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004385 </tr>
4386 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004387 <td>y-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004388 </tr>
4389 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004390 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004391 </tr>
4392 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4393 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004394 </tr>
4395</table>
4396
4397### Return Value
4398
4399number of intersections; may be zero
4400
4401### Example
4402
Cary Clark777eede2018-11-09 16:04:58 -05004403<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 -05004404</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004405
Cary Clark682c58d2018-05-16 07:07:07 -04004406<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004407
4408---
Cary Clark12799e12017-07-28 15:18:29 -04004409
Cary Clark682c58d2018-05-16 07:07:07 -04004410<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004411int <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[],
4412 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004413</pre>
4414
Cary Clark777eede2018-11-09 16:04:58 -05004415Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
4416<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.
4417The 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 -04004418the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004419Uses <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>,
4420and <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>.
4421Uses <a href='#SkPaint_getPosTextIntercepts_pos'>pos</a> array to position <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004422
Cary Clark777eede2018-11-09 16:04:58 -05004423Pass 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 +00004424
Cary Clark777eede2018-11-09 16:04:58 -05004425<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004426
4427### Parameters
4428
Cary Clark682c58d2018-05-16 07:07:07 -04004429<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004430 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004431 </tr>
4432 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
4433 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
4434 </tr>
4435 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004436 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004437 </tr>
4438 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004439 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004440 </tr>
4441 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4442 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004443 </tr>
4444</table>
4445
4446### Return Value
4447
Cary Clarka523d2d2017-08-30 08:58:10 -04004448number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004449
4450### Example
4451
Cary Clark777eede2018-11-09 16:04:58 -05004452<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 -05004453</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004454
Cary Clark682c58d2018-05-16 07:07:07 -04004455<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004456
4457---
Cary Clark12799e12017-07-28 15:18:29 -04004458
Cary Clark682c58d2018-05-16 07:07:07 -04004459<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004460int <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,
4461 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004462</pre>
4463
Cary Clark777eede2018-11-09 16:04:58 -05004464Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
4465<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.
4466The 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 -04004467the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004468Uses <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>,
4469and <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>.
4470Uses <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 +00004471
Cary Clark777eede2018-11-09 16:04:58 -05004472Pass 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 +00004473
Cary Clark777eede2018-11-09 16:04:58 -05004474<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004475
4476### Parameters
4477
Cary Clark682c58d2018-05-16 07:07:07 -04004478<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004479 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004480 </tr>
4481 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
4482 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
4483 </tr>
4484 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004485 <td>positions of each <a href='undocumented#Glyph'>glyph</a> on x-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004486 </tr>
4487 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004488 <td>position of each <a href='undocumented#Glyph'>glyph</a> on y-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004489 </tr>
4490 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004491 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004492 </tr>
4493 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4494 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004495 </tr>
4496</table>
4497
4498### Return Value
4499
4500number of intersections; may be zero
4501
4502### Example
4503
Cary Clark777eede2018-11-09 16:04:58 -05004504<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 -05004505</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004506
Cary Clark682c58d2018-05-16 07:07:07 -04004507<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004508
4509---
Cary Clark12799e12017-07-28 15:18:29 -04004510
Cary Clark682c58d2018-05-16 07:07:07 -04004511<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004512int <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 -04004513</pre>
4514
Cary Clark777eede2018-11-09 16:04:58 -05004515Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
4516<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.
4517The 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 -04004518the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004519Uses <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
4520and <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 +00004521Uses run array to position <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004522
Cary Clark777eede2018-11-09 16:04:58 -05004523<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 -05004524
Cary Clark777eede2018-11-09 16:04:58 -05004525Pass 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 +00004526
Cary Clark777eede2018-11-09 16:04:58 -05004527<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004528
4529### Parameters
4530
Cary Clark682c58d2018-05-16 07:07:07 -04004531<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004532 <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 -04004533 </tr>
4534 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004535 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004536 </tr>
4537 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4538 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004539 </tr>
4540</table>
4541
4542### Return Value
4543
4544number of intersections; may be zero
4545
4546### Example
4547
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004548<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004549
Cary Clark77b3f3a2018-11-07 14:59:03 -05004550<a name='SkPaint_getFontBounds'></a>
4551
4552---
4553
4554<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004555<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark77b3f3a2018-11-07 14:59:03 -05004556</pre>
4557
4558Returns the union of bounds of all <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004559Returned 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 Clark8cc4cdc2018-11-09 23:16:58 -05004560ignoring <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Hinting'>Hinting</a>. 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 -05004561
Cary Clark777eede2018-11-09 16:04:58 -05004562If <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 -05004563returns the bounds as:
4564{ <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> }.
4565
4566### Return Value
4567
4568union of bounds of all <a href='undocumented#Glyph'>glyphs</a>
4569
4570### Example
4571
skia-bookmaker1e1ba0e2018-11-13 05:36:58 +00004572<div><fiddle-embed name="f29d005a75efd4746c6744004a0cb421">
Cary Clark77b3f3a2018-11-07 14:59:03 -05004573
4574#### Example Output
4575
4576~~~~
4577metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4578font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4579~~~~
4580
4581</fiddle-embed></div>
4582
Cary Clark682c58d2018-05-16 07:07:07 -04004583<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004584
4585---
Cary Clark12799e12017-07-28 15:18:29 -04004586
Cary Clark682c58d2018-05-16 07:07:07 -04004587<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004588bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004589</pre>
4590
Cary Clark777eede2018-11-09 16:04:58 -05004591Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing;
4592otherwise, the <a href='SkPaint_Reference#SkPaint'>SkPaint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004593
Cary Clark777eede2018-11-09 16:04:58 -05004594Returns true if, for example, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> combined with <a href='SkColor_Reference#Alpha'>alpha</a> computes a
4595new <a href='SkColor_Reference#Alpha'>alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004596
4597### Return Value
4598
Cary Clark777eede2018-11-09 16:04:58 -05004599true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004600
4601### Example
4602
Cary Clark83647062018-07-18 16:21:51 -04004603<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04004604
4605#### Example Output
4606
4607~~~~
4608initial nothing to draw: false
4609blend dst nothing to draw: true
4610blend src over nothing to draw: false
4611alpha 0 nothing to draw: true
4612~~~~
4613
4614</fiddle-embed></div>
4615
Cary Clarka90ea222018-10-16 10:30:28 -04004616<a name='Fast_Bounds'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004617
Cary Clark61313f32018-10-08 14:57:48 -04004618Private: To be made private.
4619
Cary Clark777eede2018-11-09 16:04:58 -05004620<a href='#Paint_Fast_Bounds'>Fast_Bounds</a> functions conservatively outset a drawing bounds by additional area
4621<a href='SkPaint_Reference#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04004622
Cary Clark682c58d2018-05-16 07:07:07 -04004623<a name='SkPaint_canComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004624
4625---
Cary Clark12799e12017-07-28 15:18:29 -04004626
Cary Clark682c58d2018-05-16 07:07:07 -04004627<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004628bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004629</pre>
4630
Cary Clark61313f32018-10-08 14:57:48 -04004631Private: (to be made private)
4632
Cary Clark777eede2018-11-09 16:04:58 -05004633Returns true if <a href='SkPaint_Reference#Paint'>Paint</a> does not include elements requiring extensive computation
4634to compute <a href='undocumented#Device'>Device</a> bounds of drawn geometry. For instance, <a href='SkPaint_Reference#Paint'>Paint</a> with <a href='#Path_Effect'>Path_Effect</a>
4635always returns false.
Cary Clark12799e12017-07-28 15:18:29 -04004636
4637### Return Value
4638
Cary Clark777eede2018-11-09 16:04:58 -05004639true if <a href='SkPaint_Reference#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04004640
Cary Clark682c58d2018-05-16 07:07:07 -04004641<a name='SkPaint_computeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004642
4643---
Cary Clark12799e12017-07-28 15:18:29 -04004644
Cary Clark682c58d2018-05-16 07:07:07 -04004645<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004646const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastBounds'>computeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const
Cary Clark12799e12017-07-28 15:18:29 -04004647</pre>
4648
Cary Clark61313f32018-10-08 14:57:48 -04004649Private: (to be made private)
4650
Cary Clark777eede2018-11-09 16:04:58 -05004651Only call if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
4652raw rectangle, the raw bounds of a shape; and adjusts it for stylistic
4653effects in the <a href='SkPaint_Reference#Paint'>paint</a>, such as stroking. If needed, it uses the <a href='#SkPaint_computeFastBounds_storage'>storage</a>
4654parameter. It returns the adjusted bounds that can then be used
4655for <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_quickReject'>quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04004656
Cary Clark777eede2018-11-09 16:04:58 -05004657The returned <a href='SkRect_Reference#Rect'>Rect</a> will either be <a href='#SkPaint_computeFastBounds_orig'>orig</a> or <a href='#SkPaint_computeFastBounds_storage'>storage</a>, thus the caller
4658should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
4659use the returned value. It is legal for <a href='#SkPaint_computeFastBounds_orig'>orig</a> and <a href='#SkPaint_computeFastBounds_storage'>storage</a> to be the same
Cary Clark682c58d2018-05-16 07:07:07 -04004660<a href='SkRect_Reference#Rect'>Rect</a>.
4661
Cary Clark61313f32018-10-08 14:57:48 -04004662Private: For example:
4663 if (!path.isInverseFillType() && paint.canComputeFastBounds()) {
4664 SkRect storage;
4665 if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &storage))) {
4666 return; // do not draw the path
4667 }
4668 }
4669 // draw the path
4670
Cary Clark12799e12017-07-28 15:18:29 -04004671### Parameters
4672
Cary Clark682c58d2018-05-16 07:07:07 -04004673<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004674 <td>geometry modified by <a href='SkPaint_Reference#Paint'>Paint</a> when drawn</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004675 </tr>
4676 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
4677 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004678 </tr>
4679</table>
4680
4681### Return Value
4682
4683fast computed bounds
4684
Cary Clark682c58d2018-05-16 07:07:07 -04004685<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004686
4687---
Cary Clark12799e12017-07-28 15:18:29 -04004688
Cary Clark682c58d2018-05-16 07:07:07 -04004689<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004690const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const
Cary Clark12799e12017-07-28 15:18:29 -04004691</pre>
4692
Cary Clark61313f32018-10-08 14:57:48 -04004693Private: (to be made private)
4694
Cary Clark12799e12017-07-28 15:18:29 -04004695### Parameters
4696
Cary Clark682c58d2018-05-16 07:07:07 -04004697<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004698 <td>geometry modified by <a href='SkPaint_Reference#Paint'>Paint</a> when drawn</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004699 </tr>
4700 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
4701 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04004702 </tr>
4703</table>
4704
4705### Return Value
4706
4707fast computed bounds
4708
Cary Clark682c58d2018-05-16 07:07:07 -04004709<a name='SkPaint_doComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004710
4711---
Cary Clark12799e12017-07-28 15:18:29 -04004712
Cary Clark682c58d2018-05-16 07:07:07 -04004713<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004714const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage, <a href='#SkPaint_Style'>Style</a> style) const
Cary Clark12799e12017-07-28 15:18:29 -04004715</pre>
4716
Cary Clark61313f32018-10-08 14:57:48 -04004717Private: (to be made private)
4718
Cary Clark777eede2018-11-09 16:04:58 -05004719Computes the bounds, overriding the <a href='SkPaint_Reference#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
4720account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
4721altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04004722
4723### Parameters
4724
Cary Clark682c58d2018-05-16 07:07:07 -04004725<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004726 <td>geometry modified by <a href='SkPaint_Reference#Paint'>Paint</a> when drawn</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004727 </tr>
4728 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
4729 <td>computed bounds of geometry</td>
4730 </tr>
4731 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
4732 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004733 </tr>
4734</table>
4735
4736### Return Value
4737
4738fast computed bounds
4739
Cary Clarka90ea222018-10-16 10:30:28 -04004740<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05004741