blob: fb370bf2448f7f990d9f4b273eaa632a31254bb3 [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 Clarkcb6bef02018-11-29 12:05:25 -050011
Cary Clark61313f32018-10-08 14:57:48 -040012 <a href='#SkPaint_empty_constructor'>SkPaint()</a>;
Cary Clarkcb6bef02018-11-29 12:05:25 -050013 <a href='#SkPaint_copy_const_SkPaint'>SkPaint</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>);
14 <a href='#SkPaint_move_SkPaint'>SkPaint</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>);
15 <a href='#SkPaint_destructor'>~SkPaint()</a>;
16 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>);
17 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>);
18 friend bool <a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b);
19 friend bool <a href='#SkPaint_notequal_operator'>operator!=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b);
Cary Clark777eede2018-11-09 16:04:58 -050020 uint32_t <a href='#SkPaint_getHash'>getHash</a>() const;
21 void <a href='#SkPaint_reset'>reset()</a>;
Cary Clark777eede2018-11-09 16:04:58 -050022 void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel);
Cary Clark8cc4cdc2018-11-09 23:16:58 -050023 <a href='undocumented#SkFontHinting'>SkFontHinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const;
Cary Clark61313f32018-10-08 14:57:48 -040024
Cary Clark777eede2018-11-09 16:04:58 -050025 enum <a href='#SkPaint_Flags'>Flags</a> {
26 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
27 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
28 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
29 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
30 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
31 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
32 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
33 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
34 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark61313f32018-10-08 14:57:48 -040035 };
36
Cary Clark777eede2018-11-09 16:04:58 -050037 uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const;
38 void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags);
39 bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const;
40 void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa);
41 bool <a href='#SkPaint_isDither'>isDither</a>() const;
42 void <a href='#SkPaint_setDither'>setDither</a>(bool dither);
43 bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const;
44 void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText);
45 bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const;
46 void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText);
47 bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const;
48 void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText);
49 bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const;
50 void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText);
51 bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const;
52 void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter);
53 bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const;
54 void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText);
55 <a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const;
56 void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality);
Cary Clark61313f32018-10-08 14:57:48 -040057
Cary Clark777eede2018-11-09 16:04:58 -050058 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -040059 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
60 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
61 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
62 };
63
Cary Clarkcb6bef02018-11-29 12:05:25 -050064 static constexpr int <a href='#SkPaint_kStyleCount'>kStyleCount</a> = <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> + 1
Cary Clark777eede2018-11-09 16:04:58 -050065 <a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const;
66 void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style);
67 <a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const;
68 <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const;
69 void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='SkColor_Reference#Color'>color</a>);
70 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);
71 uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const;
72 void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a);
73 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);
74 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const;
75 void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width);
76 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const;
77 void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter);
Cary Clark61313f32018-10-08 14:57:48 -040078
Cary Clark777eede2018-11-09 16:04:58 -050079 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -040080 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
81 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
82 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
83 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
84 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
85 };
86
Cary Clarkcb6bef02018-11-29 12:05:25 -050087 static constexpr int <a href='#SkPaint_kCapCount'>kCapCount</a> = <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> + 1
Cary Clark777eede2018-11-09 16:04:58 -050088 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -040089 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
90 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
91 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
92 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
93 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
94 };
95
Cary Clarkcb6bef02018-11-29 12:05:25 -050096 static constexpr int <a href='#SkPaint_kJoinCount'>kJoinCount</a> = <a href='#SkPaint_kLast_Join'>kLast_Join</a> + 1
Cary Clark777eede2018-11-09 16:04:58 -050097 <a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const;
98 void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap);
99 <a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const;
100 void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join);
101 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,
102 <a href='undocumented#SkScalar'>SkScalar</a> resScale = 1) const;
103 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;
104 <a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const;
105 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkShader'>SkShader</a>> <a href='#SkPaint_refShader'>refShader</a>() const;
106 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>);
107 <a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const;
108 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorFilter'>SkColorFilter</a>> <a href='#SkPaint_refColorFilter'>refColorFilter</a>() const;
109 void <a href='#SkPaint_setColorFilter'>setColorFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorFilter'>SkColorFilter</a>> colorFilter);
110 <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const;
111 bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const;
112 void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode);
113 <a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const;
114 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkPathEffect'>SkPathEffect</a>> <a href='#SkPaint_refPathEffect'>refPathEffect</a>() const;
115 void <a href='#SkPaint_setPathEffect'>setPathEffect</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkPathEffect'>SkPathEffect</a>> pathEffect);
116 <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const;
117 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> <a href='#SkPaint_refMaskFilter'>refMaskFilter</a>() const;
118 void <a href='#SkPaint_setMaskFilter'>setMaskFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> maskFilter);
119 <a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const;
120 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkTypeface'>SkTypeface</a>> <a href='#SkPaint_refTypeface'>refTypeface</a>() const;
121 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>);
122 <a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const;
123 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkImageFilter'>SkImageFilter</a>> <a href='#SkPaint_refImageFilter'>refImageFilter</a>() const;
124 void <a href='#SkPaint_setImageFilter'>setImageFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkImageFilter'>SkImageFilter</a>> imageFilter);
125 <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const;
126 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> <a href='#SkPaint_refDrawLooper'>refDrawLooper</a>() const;
Cary Clark777eede2018-11-09 16:04:58 -0500127 void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
Cary Clark777eede2018-11-09 16:04:58 -0500128 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const;
129 void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize);
130 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const;
131 void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX);
132 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const;
133 void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX);
Cary Clark61313f32018-10-08 14:57:48 -0400134
Cary Clark777eede2018-11-09 16:04:58 -0500135 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -0400136 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
137 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
138 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
139 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
140 };
141
Cary Clark777eede2018-11-09 16:04:58 -0500142 <a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const;
143 void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding);
Cary Clark61313f32018-10-08 14:57:48 -0400144
Cary Clark777eede2018-11-09 16:04:58 -0500145 typedef <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> <a href='#SkPaint_FontMetrics'>FontMetrics</a>;
Cary Clark61313f32018-10-08 14:57:48 -0400146
Cary Clark777eede2018-11-09 16:04:58 -0500147 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='undocumented#SkFontMetrics'>SkFontMetrics</a>* metrics) const;
148 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const;
149 int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength,
150 <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[]) const;
151 bool <a href='#SkPaint_containsText'>containsText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const;
152 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;
153 int <a href='#SkPaint_countText'>countText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const;
154 <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;
155 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length) const;
156 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,
157 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const;
158 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[],
159 <a href='SkRect_Reference#SkRect'>SkRect</a> bounds[] = nullptr) const;
160 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,
161 <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const;
162 void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length,
163 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 Clarkcb6bef02018-11-29 12:05:25 -0500164 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,
165 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
166 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[],
167 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
168 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[],
169 <a href='undocumented#SkScalar'>SkScalar</a> constY, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
Cary Clark777eede2018-11-09 16:04:58 -0500170 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],
171 <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
Cary Clark777eede2018-11-09 16:04:58 -0500172 bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const;
Cary Clark61313f32018-10-08 14:57:48 -0400173};
Cary Clarkcb6bef02018-11-29 12:05:25 -0500174
Cary Clark61313f32018-10-08 14:57:48 -0400175</pre>
176
Cary Clark777eede2018-11-09 16:04:58 -0500177<a href='SkPaint_Reference#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='SkPaint_Reference#Paint'>Paint</a> collects all
178options 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 -0400179
Cary Clark777eede2018-11-09 16:04:58 -0500180Various options apply to <a href='undocumented#Text'>text</a>, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -0400181
Cary Clark777eede2018-11-09 16:04:58 -0500182Some options may not be implemented on all platforms; in these cases, setting
183the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
184functionality; 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 -0400185
Cary Clark777eede2018-11-09 16:04:58 -0500186<a href='SkPaint_Reference#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
187pipeline and multiple pipeline stages may be affected by a single <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400188
Cary Clark777eede2018-11-09 16:04:58 -0500189<a href='SkPaint_Reference#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
190algorithms that alter the drawing geometry, <a href='SkColor_Reference#Color'>color</a>, and transparency. For instance,
191<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 -0400192
Cary Clark777eede2018-11-09 16:04:58 -0500193The 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>
194to affect it. The implementation is free to defer computations associated with the
195<a href='SkPaint_Reference#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
196<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>
197is set in <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400198
Cary Clarkcb6bef02018-11-29 12:05:25 -0500199<a href='SkPaint_Reference#Paint'>Paint</a> describes a single <a href='SkColor_Reference#Color'>color</a>, a single <a href='SkFont_Reference#Font'>font</a>, a single <a href='SkImage_Reference#Image'>image</a> quality, and so on.
Cary Clark777eede2018-11-09 16:04:58 -0500200Multiple colors are drawn either by using multiple paints or with objects like
201<a href='undocumented#Shader'>Shader</a> attached to <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400202
Cary Clark682c58d2018-05-16 07:07:07 -0400203<a name='SkPaint_empty_constructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400204
205---
Cary Clark12799e12017-07-28 15:18:29 -0400206
Cary Clark682c58d2018-05-16 07:07:07 -0400207<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500208<a href='#SkPaint_empty_constructor'>SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400209</pre>
210
Cary Clark777eede2018-11-09 16:04:58 -0500211Constructs <a href='SkPaint_Reference#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400212
213| attribute | default value |
214| --- | --- |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500215| <a href='#Paint_Anti_Alias'>Anti_Alias</a> | false |
216| <a href='#Blend_Mode'>Blend_Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a> |
217| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK_ColorBLACK</a> |
218| <a href='#Color_Alpha'>Color_Alpha</a> | 255 |
219| <a href='#Color_Filter'>Color_Filter</a> | nullptr |
220| Dither | false |
221| <a href='#Draw_Looper'>Draw_Looper</a> | nullptr |
222| <a href='#Paint_Fake_Bold'>Fake_Bold</a> | false |
223| <a href='#Filter_Quality'>Filter_Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
224| <a href='#Paint_Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> | false |
225| <a href='#Paint_Automatic_Hinting'>Automatic_Hinting</a> | false |
226| <a href='#Paint_Full_Hinting_Spacing'>Full_Hinting_Spacing</a> | false |
Cary Clarkabaffd82018-11-15 08:25:12 -0500227| Hinting | <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500228| <a href='#Image_Filter'>Image_Filter</a> | nullptr |
229| <a href='#Paint_LCD_Text'>LCD_Text</a> | false |
230| <a href='#Paint_Linear_Text'>Linear_Text</a> | false |
231| <a href='#Paint_Miter_Limit'>Miter_Limit</a> | 4 |
232| <a href='#Mask_Filter'>Mask_Filter</a> | nullptr |
233| <a href='#Path_Effect'>Path_Effect</a> | nullptr |
Cary Clark682c58d2018-05-16 07:07:07 -0400234| <a href='undocumented#Shader'>Shader</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500235| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill_Style</a> |
236| <a href='#Paint_Text_Encoding'>Text_Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a> |
237| <a href='#Paint_Text_Scale_X'>Text_Scale_X</a> | 1 |
238| <a href='#Paint_Text_Size'>Text_Size</a> | 12 |
239| <a href='#Paint_Text_Skew_X'>Text_Skew_X</a> | 0 |
Cary Clark682c58d2018-05-16 07:07:07 -0400240| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500241| <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> |
242| <a href='#Paint_Stroke_Join'>Stroke_Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter_Join</a> |
243| <a href='#Paint_Stroke_Width'>Stroke_Width</a> | 0 |
244| <a href='#Paint_Subpixel_Text'>Subpixel_Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400245
Cary Clark777eede2018-11-09 16:04:58 -0500246The 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
247<a href='SkPaint_Reference#Paint'>paint</a> default values. The overrides may be included in "SkUserConfig.h" or predefined by the
248build system.
Cary Clark12799e12017-07-28 15:18:29 -0400249
250### Return Value
251
Cary Clark77b3f3a2018-11-07 14:59:03 -0500252default initialized <a href='SkPaint_Reference#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400253
254### Example
255
256<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
257
Cary Clark682c58d2018-05-16 07:07:07 -0400258<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400259
260---
Cary Clark12799e12017-07-28 15:18:29 -0400261
Cary Clark682c58d2018-05-16 07:07:07 -0400262<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500263<a href='#SkPaint_copy_const_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 -0400264</pre>
265
Cary Clark09d80c02018-10-31 12:14:03 -0400266Makes 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 -0500267<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
268between 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 -0400269their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400270
Cary Clark09d80c02018-10-31 12:14:03 -0400271The 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 -0500272<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> cannot be modified after they are created.
273This 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 -0400274
275### Parameters
276
Cary Clark682c58d2018-05-16 07:07:07 -0400277<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
278 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400279 </tr>
280</table>
281
282### Return Value
283
Cary Clark77b3f3a2018-11-07 14:59:03 -0500284shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400285
286### Example
287
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000288<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400289
290#### Example Output
291
292~~~~
293SK_ColorRED == paint1.getColor()
294SK_ColorBLUE == paint2.getColor()
295~~~~
296
297</fiddle-embed></div>
298
Cary Clark682c58d2018-05-16 07:07:07 -0400299<a name='SkPaint_move_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400300
301---
Cary Clark12799e12017-07-28 15:18:29 -0400302
Cary Clark682c58d2018-05-16 07:07:07 -0400303<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500304<a href='#SkPaint_move_SkPaint'>SkPaint</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400305</pre>
306
Cary Clarkd0530ba2017-09-14 11:25:39 -0400307Implements a move constructor to avoid increasing the reference counts
Cary Clark77b3f3a2018-11-07 14:59:03 -0500308of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400309
Cary Clark777eede2018-11-09 16:04:58 -0500310After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400311
312### Parameters
313
Cary Clark682c58d2018-05-16 07:07:07 -0400314<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
315 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400316 </tr>
317</table>
318
319### Return Value
320
Cary Clark77b3f3a2018-11-07 14:59:03 -0500321content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400322
323### Example
324
Cary Clark83647062018-07-18 16:21:51 -0400325<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -0400326
327#### Example Output
328
329~~~~
330path effect unique: true
331~~~~
332
333</fiddle-embed></div>
334
Cary Clark682c58d2018-05-16 07:07:07 -0400335<a name='SkPaint_reset'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400336
337---
Cary Clark12799e12017-07-28 15:18:29 -0400338
Cary Clark682c58d2018-05-16 07:07:07 -0400339<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500340void <a href='#SkPaint_reset'>reset()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400341</pre>
342
Cary Clark777eede2018-11-09 16:04:58 -0500343Sets all <a href='SkPaint_Reference#SkPaint'>SkPaint</a> contents to their initial values. This is equivalent to replacing
344<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 -0400345
346### Example
347
348<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
349
350#### Example Output
351
352~~~~
353paint1 == paint2
354~~~~
355
356</fiddle-embed></div>
357
Cary Clark682c58d2018-05-16 07:07:07 -0400358<a name='SkPaint_destructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400359
360---
Cary Clark12799e12017-07-28 15:18:29 -0400361
Cary Clark682c58d2018-05-16 07:07:07 -0400362<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500363<a href='#SkPaint_destructor'>~SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400364</pre>
365
Cary Clark777eede2018-11-09 16:04:58 -0500366Decreases <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>,
367<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
368objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400369
Cary Clarka90ea222018-10-16 10:30:28 -0400370<a name='Management'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400371
Cary Clark682c58d2018-05-16 07:07:07 -0400372<a name='SkPaint_copy_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400373
374---
Cary Clark12799e12017-07-28 15:18:29 -0400375
Cary Clark682c58d2018-05-16 07:07:07 -0400376<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500377<a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400378</pre>
379
Cary Clark09d80c02018-10-31 12:14:03 -0400380Makes 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 -0500381<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
382between 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 -0400383prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark777eede2018-11-09 16:04:58 -0500384resulting count is zero. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
385are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400386
387### Parameters
388
Cary Clark682c58d2018-05-16 07:07:07 -0400389<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
390 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400391 </tr>
392</table>
393
394### Return Value
395
Cary Clark77b3f3a2018-11-07 14:59:03 -0500396content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400397
398### Example
399
400<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
401
402#### Example Output
403
404~~~~
405SK_ColorRED == paint1.getColor()
406SK_ColorRED == paint2.getColor()
407~~~~
408
409</fiddle-embed></div>
410
Cary Clark682c58d2018-05-16 07:07:07 -0400411<a name='SkPaint_move_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400412
413---
Cary Clark12799e12017-07-28 15:18:29 -0400414
Cary Clark682c58d2018-05-16 07:07:07 -0400415<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500416<a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400417</pre>
418
Cary Clark777eede2018-11-09 16:04:58 -0500419Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
420of 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 -0400421prior destination are decreased by one; those objects are deleted if the resulting count
422is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400423
Cary Clark777eede2018-11-09 16:04:58 -0500424After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400425
426### Parameters
427
Cary Clark682c58d2018-05-16 07:07:07 -0400428<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
429 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400430 </tr>
431</table>
432
433### Return Value
434
Cary Clark77b3f3a2018-11-07 14:59:03 -0500435content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400436
437### Example
438
Ravi Mistry874e22b2018-07-19 03:49:13 +0000439<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -0400440
441#### Example Output
442
443~~~~
444SK_ColorRED == paint2.getColor()
445~~~~
446
447</fiddle-embed></div>
448
Cary Clark682c58d2018-05-16 07:07:07 -0400449<a name='SkPaint_equal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400450
451---
Cary Clark12799e12017-07-28 15:18:29 -0400452
Cary Clark682c58d2018-05-16 07:07:07 -0400453<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500454bool <a href='#SkPaint_equal_operator'>operator==</a>(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 -0400455</pre>
456
Cary Clark777eede2018-11-09 16:04:58 -0500457Compares <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 -0400458if <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 -0500459<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 -0400460
461### Parameters
462
Cary Clark682c58d2018-05-16 07:07:07 -0400463<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500464 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400465 </tr>
466 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500467 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400468 </tr>
469</table>
470
471### Return Value
472
Cary Clark777eede2018-11-09 16:04:58 -0500473true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400474
475### Example
476
477<div><fiddle-embed name="7481a948e34672720337a631830586dd">
478
479#### Example Output
480
481~~~~
482paint1 == paint2
483paint1 != paint2
484~~~~
485
486</fiddle-embed></div>
487
Cary Clark06c20f32018-03-20 15:53:27 -0400488### See Also
489
Cary Clarkcb6bef02018-11-29 12:05:25 -0500490<a href='#SkPaint_notequal_operator'>operator!=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_equal_operator_a'>a</a>, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_equal_operator_b'>b</a>)
Cary Clark06c20f32018-03-20 15:53:27 -0400491
Cary Clark682c58d2018-05-16 07:07:07 -0400492<a name='SkPaint_notequal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400493
494---
Cary Clark12799e12017-07-28 15:18:29 -0400495
Cary Clark682c58d2018-05-16 07:07:07 -0400496<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500497bool <a href='#SkPaint_notequal_operator'>operator!=</a>(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 -0400498</pre>
499
Cary Clark777eede2018-11-09 16:04:58 -0500500Compares <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 -0400501if <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 -0500502<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 -0400503
504### Parameters
505
Cary Clark682c58d2018-05-16 07:07:07 -0400506<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500507 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400508 </tr>
509 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500510 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400511 </tr>
512</table>
513
514### Return Value
515
Cary Clark777eede2018-11-09 16:04:58 -0500516true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400517
518### Example
519
skia-bookmakera717ca92018-07-08 05:32:09 +0000520<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -0400521
522#### Example Output
523
524~~~~
525paint1 == paint2
526paint1 == paint2
527~~~~
528
529</fiddle-embed></div>
530
Cary Clark06c20f32018-03-20 15:53:27 -0400531### See Also
532
Cary Clarkcb6bef02018-11-29 12:05:25 -0500533<a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_notequal_operator_a'>a</a>, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_notequal_operator_b'>b</a>)
Cary Clark06c20f32018-03-20 15:53:27 -0400534
Cary Clark682c58d2018-05-16 07:07:07 -0400535<a name='SkPaint_getHash'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400536
537---
Cary Clark12799e12017-07-28 15:18:29 -0400538
Cary Clark682c58d2018-05-16 07:07:07 -0400539<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500540uint32_t <a href='#SkPaint_getHash'>getHash</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400541</pre>
542
Cary Clark777eede2018-11-09 16:04:58 -0500543Returns a hash generated from <a href='SkPaint_Reference#SkPaint'>SkPaint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400544Identical hashes guarantee that the paints are
545equivalent, but differing hashes do not guarantee that the paints have differing
546contents.
547
Cary Clarkcb6bef02018-11-29 12:05:25 -0500548If <a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b) returns true for two paints,
Cary Clark12799e12017-07-28 15:18:29 -0400549their hashes are also equal.
550
551The hash returned is platform and implementation specific.
552
553### Return Value
554
555a shallow hash
556
557### Example
558
Cary Clark83647062018-07-18 16:21:51 -0400559<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -0400560
561#### Example Output
562
563~~~~
564paint1 == paint2
565paint1.getHash() == paint2.getHash()
566~~~~
567
568</fiddle-embed></div>
569
Cary Clarka90ea222018-10-16 10:30:28 -0400570<a name='Hinting'></a>
571
Cary Clark682c58d2018-05-16 07:07:07 -0400572<a name='SkPaint_setHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400573
574---
Cary Clark12799e12017-07-28 15:18:29 -0400575
Cary Clark682c58d2018-05-16 07:07:07 -0400576<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500577void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400578</pre>
579
Cary Clark777eede2018-11-09 16:04:58 -0500580Sets level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400581Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400582
Cary Clark12799e12017-07-28 15:18:29 -0400583### Parameters
584
Cary Clark682c58d2018-05-16 07:07:07 -0400585<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
Cary Clark885f1072018-11-08 13:31:39 -0500586 <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 +0000587 </tr>
588</table>
589
Cary Clark885f1072018-11-08 13:31:39 -0500590<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 +0000591
592### Example
593
skia-bookmaker6894f222018-12-02 05:59:00 +0000594<div><fiddle-embed name="bb179ec5698ec1398ff18f3657ab73f7">
skia-bookmakere6c85752018-11-06 05:32:09 +0000595
596#### Example Output
597
598~~~~
599paint1 == paint2
600~~~~
601
602</fiddle-embed></div>
603
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500604<a name='SkPaint_getHinting'></a>
605
606---
607
608<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500609<a href='undocumented#SkFontHinting'>SkFontHinting</a> <a href='#SkPaint_getHinting'>getHinting</a>()const
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500610</pre>
611
612Returns level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
613
614### Return Value
615
Cary Clarkabaffd82018-11-15 08:25:12 -0500616one of: <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>,
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500617
Cary Clarkabaffd82018-11-15 08:25:12 -0500618<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500619
Cary Clarkabaffd82018-11-15 08:25:12 -0500620### Example
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500621
Cary Clarkabaffd82018-11-15 08:25:12 -0500622<div><fiddle-embed name="b56b70c7ea2453c41bfa58b626953bed">
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500623
Cary Clarkabaffd82018-11-15 08:25:12 -0500624#### Example Output
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500625
Cary Clarkabaffd82018-11-15 08:25:12 -0500626~~~~
627SkFontHinting::kNormal == paint.getHinting()
628~~~~
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500629
Cary Clarkabaffd82018-11-15 08:25:12 -0500630</fiddle-embed></div>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500631
Cary Clarka90ea222018-10-16 10:30:28 -0400632<a name='Flags'></a>
633
634<a name='SkPaint_Flags'></a>
635
Cary Clark12799e12017-07-28 15:18:29 -0400636---
637
Cary Clarka560c472017-11-27 10:44:06 -0500638<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400639 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clark777eede2018-11-09 16:04:58 -0500640 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
641 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
642 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
643 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
644 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
645 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
646 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
647 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
648 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400649 };
Cary Clarkcb6bef02018-11-29 12:05:25 -0500650
Cary Clark12799e12017-07-28 15:18:29 -0400651</pre>
652
Cary Clark682c58d2018-05-16 07:07:07 -0400653The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
Cary Clark777eede2018-11-09 16:04:58 -0500654The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
655with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a>.
656All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
657multiple settings at once.
Cary Clark12799e12017-07-28 15:18:29 -0400658
659### Constants
660
Cary Clark682c58d2018-05-16 07:07:07 -0400661<table style='border-collapse: collapse; width: 62.5em'>
662 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
663<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
664<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
665 <tr style='background-color: #f0f0f0; '>
666 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
667 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
668 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400669mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400670 </tr>
671 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400672 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
673 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
674 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
675mask for setting Dither</td>
676 </tr>
677 <tr style='background-color: #f0f0f0; '>
678 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
679 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
680 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
681mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -0400682 </tr>
683 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400684 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
685 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
686 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
687mask for setting Linear_Text</td>
688 </tr>
689 <tr style='background-color: #f0f0f0; '>
690 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
691 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
692 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
693mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400694 </tr>
695 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400696 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
697 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
698 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
699mask for setting LCD_Text</td>
700 </tr>
701 <tr style='background-color: #f0f0f0; '>
702 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
703 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
704 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
705mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400706 </tr>
707 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400708 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
709 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
710 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
711mask for setting Automatic_Hinting</td>
712 </tr>
713 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400714 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
715 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
716 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -0500717mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use
Cary Clark77b3f3a2018-11-07 14:59:03 -0500718</td>
Cary Clark12799e12017-07-28 15:18:29 -0400719 </tr>
Cary Clark777eede2018-11-09 16:04:58 -0500720<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark682c58d2018-05-16 07:07:07 -0400721</table>
Cary Clark12799e12017-07-28 15:18:29 -0400722
Cary Clark682c58d2018-05-16 07:07:07 -0400723<a name='SkPaint_getFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400724
725---
Cary Clark12799e12017-07-28 15:18:29 -0400726
Cary Clark682c58d2018-05-16 07:07:07 -0400727<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500728uint32_t <a href='#SkPaint_getFlags'>getFlags</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400729</pre>
730
Cary Clark777eede2018-11-09 16:04:58 -0500731Returns <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
732bit, 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 -0400733
734### Return Value
735
Cary Clark09d80c02018-10-31 12:14:03 -0400736zero, 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 -0400737
738### Example
739
740<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
741
742#### Example Output
743
744~~~~
745(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
746~~~~
747
748</fiddle-embed></div>
749
Cary Clark682c58d2018-05-16 07:07:07 -0400750<a name='SkPaint_setFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400751
752---
Cary Clark12799e12017-07-28 15:18:29 -0400753
Cary Clark682c58d2018-05-16 07:07:07 -0400754<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500755void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400756</pre>
757
Cary Clark777eede2018-11-09 16:04:58 -0500758Replaces <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.
759All <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 -0400760
761### Parameters
762
Cary Clark682c58d2018-05-16 07:07:07 -0400763<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500764 <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 -0400765 </tr>
766</table>
767
768### Example
769
770<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
771
772#### Example Output
773
774~~~~
775paint.isAntiAlias()
776paint.isDither()
777~~~~
778
779</fiddle-embed></div>
780
Cary Clarka90ea222018-10-16 10:30:28 -0400781<a name='Anti_Alias'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400782
Cary Clarka90ea222018-10-16 10:30:28 -0400783---
Cary Clark08895c42018-02-01 09:37:32 -0500784
Cary Clark777eede2018-11-09 16:04:58 -0500785<a href='#Paint_Anti_Alias'>Anti_Alias</a> drawing approximates partial <a href='undocumented#Pixel'>pixel</a> coverage with transparency.
786If <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.
787If <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 -0400788
Cary Clark777eede2018-11-09 16:04:58 -0500789The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
790passing 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 -0400791
Cary Clark777eede2018-11-09 16:04:58 -0500792<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
793active <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 -0400794
Cary Clark777eede2018-11-09 16:04:58 -0500795A platform may only support <a href='#Paint_Anti_Alias'>Anti_Aliased</a> drawing. Some GPU-backed platforms use
796<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 -0400797<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400798
Cary Clark777eede2018-11-09 16:04:58 -0500799The 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 -0400800
Cary Clark777eede2018-11-09 16:04:58 -0500801<a href='#Paint_Anti_Alias'>Anti_Alias</a> is disabled by default.
802<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>
803at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400804
805### Example
806
Cary Clark777eede2018-11-09 16:04:58 -0500807<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.
808A blue <a href='undocumented#Line'>line</a> draws only where the <a href='undocumented#Pixel'>pixel</a> centers are contained.
809The <a href='undocumented#Line'>lines</a> are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
810<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500811</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400812
Cary Clark682c58d2018-05-16 07:07:07 -0400813<a name='SkPaint_isAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400814
815---
Cary Clark12799e12017-07-28 15:18:29 -0400816
Cary Clark682c58d2018-05-16 07:07:07 -0400817<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500818bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400819</pre>
820
Cary Clark777eede2018-11-09 16:04:58 -0500821Returns 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 -0400822
Cary Clark777eede2018-11-09 16:04:58 -0500823Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400824
825### Return Value
826
Cary Clark777eede2018-11-09 16:04:58 -0500827<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400828
829### Example
830
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000831<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -0400832
833#### Example Output
834
835~~~~
836paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
837paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
838~~~~
839
840</fiddle-embed></div>
841
Cary Clark682c58d2018-05-16 07:07:07 -0400842<a name='SkPaint_setAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400843
844---
Cary Clark12799e12017-07-28 15:18:29 -0400845
Cary Clark682c58d2018-05-16 07:07:07 -0400846<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500847void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -0400848</pre>
849
skia-bookmaker8be41962018-11-20 05:34:36 +0000850Requests, but does not require, that edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -0400851partial transparency.
852
Cary Clark777eede2018-11-09 16:04:58 -0500853Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
854Clears <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 -0400855
856### Parameters
857
Cary Clark682c58d2018-05-16 07:07:07 -0400858<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400859 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400860 </tr>
861</table>
862
863### Example
864
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000865<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -0400866
867#### Example Output
868
869~~~~
870paint1 == paint2
871~~~~
872
873</fiddle-embed></div>
874
Cary Clarka90ea222018-10-16 10:30:28 -0400875<a name='Dither'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400876
Cary Clarka90ea222018-10-16 10:30:28 -0400877---
Cary Clark08895c42018-02-01 09:37:32 -0500878
Cary Clark777eede2018-11-09 16:04:58 -0500879Dither increases fidelity by adjusting the <a href='SkColor_Reference#Color'>color</a> of adjacent pixels.
880This can help to smooth <a href='SkColor_Reference#Color'>color</a> transitions and reducing banding in gradients.
881Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
882and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
883and 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 -0400884
Cary Clark777eede2018-11-09 16:04:58 -0500885Dithering is always enabled for linear gradients drawing into
886<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>.
887Dither 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 -0400888<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 -0400889
Cary Clark777eede2018-11-09 16:04:58 -0500890Dither is disabled by default.
891Dither can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>
892at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400893
Cary Clark777eede2018-11-09 16:04:58 -0500894Some 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 -0400895
896### Example
897
Cary Clark777eede2018-11-09 16:04:58 -0500898<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested <a href='SkColor_Reference#Color'>color</a> by
899alternating nearby colors from <a href='undocumented#Pixel'>pixel</a> to <a href='undocumented#Pixel'>pixel</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -0500900</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400901
902### Example
903
Cary Clark777eede2018-11-09 16:04:58 -0500904<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to <a href='SkColor_Reference#Color'>color</a> to smooth gradients.
905Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kPlus'>kPlus</a> exaggerates the
906dither, making it easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500907</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400908
Cary Clarka90ea222018-10-16 10:30:28 -0400909### See Also
910
911Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
912
Cary Clark682c58d2018-05-16 07:07:07 -0400913<a name='SkPaint_isDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400914
915---
Cary Clark12799e12017-07-28 15:18:29 -0400916
Cary Clark682c58d2018-05-16 07:07:07 -0400917<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500918bool <a href='#SkPaint_isDither'>isDither</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400919</pre>
920
Cary Clark777eede2018-11-09 16:04:58 -0500921Returns 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 +0000922
Cary Clark777eede2018-11-09 16:04:58 -0500923Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400924
925### Return Value
926
Cary Clark777eede2018-11-09 16:04:58 -0500927<a href='#SkPaint_kDither_Flag'>kDither_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400928
929### Example
930
931<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
932
933#### Example Output
934
935~~~~
936paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
937paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
938~~~~
939
940</fiddle-embed></div>
941
Cary Clark682c58d2018-05-16 07:07:07 -0400942<a name='SkPaint_setDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400943
944---
Cary Clark12799e12017-07-28 15:18:29 -0400945
Cary Clark682c58d2018-05-16 07:07:07 -0400946<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500947void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -0400948</pre>
949
Cary Clark777eede2018-11-09 16:04:58 -0500950Requests, but does not require, to distribute <a href='SkColor_Reference#Color'>color</a> error.
Cary Clark12799e12017-07-28 15:18:29 -0400951
Cary Clark777eede2018-11-09 16:04:58 -0500952Sets <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
953Clears <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 -0400954
955### Parameters
956
Cary Clark682c58d2018-05-16 07:07:07 -0400957<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400958 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400959 </tr>
960</table>
961
962### Example
963
964<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
965
966#### Example Output
967
968~~~~
969paint1 == paint2
970~~~~
971
972</fiddle-embed></div>
973
974### See Also
975
Cary Clark682c58d2018-05-16 07:07:07 -0400976<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -0400977
Cary Clarka90ea222018-10-16 10:30:28 -0400978<a name='Device_Text'></a>
979
Cary Clark12799e12017-07-28 15:18:29 -0400980---
981
Cary Clark777eede2018-11-09 16:04:58 -0500982<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 -0400983
Cary Clark777eede2018-11-09 16:04:58 -0500984When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
985create a <a href='SkColor_Reference#Color'>color</a>, and relies
986on 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.
987<a href='#Paint_LCD_Text'>LCD_Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
988the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -0400989
Cary Clark777eede2018-11-09 16:04:58 -0500990<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.
991As the opaqueness
992of 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 -0400993
Cary Clark777eede2018-11-09 16:04:58 -0500994Either or both techniques can be enabled.
995<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> are clear by default.
996<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
997<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 -0400998
999### Example
1000
Cary Clark777eede2018-11-09 16:04:58 -05001001<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>.
1002When <a href='#Paint_Subpixel_Text'>Subpixel_Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1003When <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 -05001004</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001005
Cary Clarka90ea222018-10-16 10:30:28 -04001006<a name='Linear_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001007
Cary Clark777eede2018-11-09 16:04:58 -05001008<a href='#Paint_Linear_Text'>Linear_Text</a> selects whether <a href='undocumented#Text'>text</a> is rendered as a <a href='undocumented#Glyph'>Glyph</a> or as a <a href='SkPath_Reference#Path'>Path</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001009If <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is set, it has the same effect as setting Hinting to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>.
1010If <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear, it is the same as setting Hinting to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001011
Cary Clark682c58d2018-05-16 07:07:07 -04001012<a name='SkPaint_isLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001013
1014---
Cary Clark12799e12017-07-28 15:18:29 -04001015
Cary Clark682c58d2018-05-16 07:07:07 -04001016<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001017bool <a href='#SkPaint_isLinearText'>isLinearText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001018</pre>
1019
Cary Clark777eede2018-11-09 16:04:58 -05001020Returns 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 -04001021
Cary Clark777eede2018-11-09 16:04:58 -05001022Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001023
1024### Return Value
1025
Cary Clark777eede2018-11-09 16:04:58 -05001026<a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001027
1028### Example
1029
1030<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1031
1032### See Also
1033
Cary Clarkabaffd82018-11-15 08:25:12 -05001034<a href='#SkPaint_setLinearText'>setLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001035
Cary Clark682c58d2018-05-16 07:07:07 -04001036<a name='SkPaint_setLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001037
1038---
Cary Clark12799e12017-07-28 15:18:29 -04001039
Cary Clark682c58d2018-05-16 07:07:07 -04001040<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001041void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001042</pre>
1043
skia-bookmaker8be41962018-11-20 05:34:36 +00001044Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> are converted to <a href='SkPath_Reference#SkPath'>SkPath</a>
1045before drawing and measuring.
Cary Clark777eede2018-11-09 16:04:58 -05001046By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001047
Cary Clark777eede2018-11-09 16:04:58 -05001048Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1049Clears <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 -04001050
1051### Parameters
1052
Cary Clark682c58d2018-05-16 07:07:07 -04001053<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001054 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001055 </tr>
1056</table>
1057
1058### Example
1059
Cary Clark83647062018-07-18 16:21:51 -04001060<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001061
1062### See Also
1063
Cary Clarkabaffd82018-11-15 08:25:12 -05001064<a href='#SkPaint_isLinearText'>isLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001065
Cary Clarka90ea222018-10-16 10:30:28 -04001066<a name='Subpixel_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001067
Cary Clark777eede2018-11-09 16:04:58 -05001068<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.
1069As the opaqueness
1070of 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 -04001071
Cary Clark682c58d2018-05-16 07:07:07 -04001072<a name='SkPaint_isSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001073
1074---
Cary Clark12799e12017-07-28 15:18:29 -04001075
Cary Clark682c58d2018-05-16 07:07:07 -04001076<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001077bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001078</pre>
1079
Cary Clark777eede2018-11-09 16:04:58 -05001080Returns 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 -04001081
Cary Clark777eede2018-11-09 16:04:58 -05001082Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001083
1084### Return Value
1085
Cary Clark777eede2018-11-09 16:04:58 -05001086<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001087
1088### Example
1089
1090<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1091
1092#### Example Output
1093
1094~~~~
1095paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1096paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1097~~~~
1098
1099</fiddle-embed></div>
1100
Cary Clark682c58d2018-05-16 07:07:07 -04001101<a name='SkPaint_setSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001102
1103---
Cary Clark12799e12017-07-28 15:18:29 -04001104
Cary Clark682c58d2018-05-16 07:07:07 -04001105<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001106void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001107</pre>
1108
Cary Clark777eede2018-11-09 16:04:58 -05001109Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001110
Cary Clark777eede2018-11-09 16:04:58 -05001111Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1112Clears <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 -04001113
1114### Parameters
1115
Cary Clark682c58d2018-05-16 07:07:07 -04001116<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001117 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001118 </tr>
1119</table>
1120
1121### Example
1122
1123<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1124
1125#### Example Output
1126
1127~~~~
1128paint1 == paint2
1129~~~~
1130
1131</fiddle-embed></div>
1132
Cary Clarka90ea222018-10-16 10:30:28 -04001133<a name='LCD_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001134
Cary Clark777eede2018-11-09 16:04:58 -05001135When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
1136create a <a href='SkColor_Reference#Color'>color</a>, and relies
1137on 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.
1138<a href='#Paint_LCD_Text'>LCD_Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1139the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001140
Cary Clark682c58d2018-05-16 07:07:07 -04001141<a name='SkPaint_isLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001142
1143---
Cary Clark12799e12017-07-28 15:18:29 -04001144
Cary Clark682c58d2018-05-16 07:07:07 -04001145<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001146bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001147</pre>
1148
Cary Clark777eede2018-11-09 16:04:58 -05001149Returns 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 -04001150
Cary Clark777eede2018-11-09 16:04:58 -05001151Returns 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 -04001152
1153### Return Value
1154
Cary Clark777eede2018-11-09 16:04:58 -05001155<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001156
1157### Example
1158
skia-bookmakera391c722018-07-09 05:28:19 +00001159<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001160
1161#### Example Output
1162
1163~~~~
1164paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1165paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1166~~~~
1167
1168</fiddle-embed></div>
1169
Cary Clark682c58d2018-05-16 07:07:07 -04001170<a name='SkPaint_setLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001171
1172---
Cary Clark12799e12017-07-28 15:18:29 -04001173
Cary Clark682c58d2018-05-16 07:07:07 -04001174<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001175void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001176</pre>
1177
Cary Clark777eede2018-11-09 16:04:58 -05001178Requests, 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 -04001179
Cary Clark777eede2018-11-09 16:04:58 -05001180Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1181Clears <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 -04001182
1183### Parameters
1184
Cary Clark682c58d2018-05-16 07:07:07 -04001185<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001186 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001187 </tr>
1188</table>
1189
1190### Example
1191
skia-bookmakere0a458f2018-07-16 05:29:00 +00001192<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001193
1194#### Example Output
1195
1196~~~~
1197paint1 == paint2
1198~~~~
1199
1200</fiddle-embed></div>
1201
Cary Clarka90ea222018-10-16 10:30:28 -04001202<a name='Font_Embedded_Bitmaps'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001203
Cary Clarka90ea222018-10-16 10:30:28 -04001204---
Cary Clark08895c42018-02-01 09:37:32 -05001205
Cary Clark777eede2018-11-09 16:04:58 -05001206<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>.
1207<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
Cary Clarkcb6bef02018-11-29 12:05:25 -05001208in a <a href='SkFont_Reference#Font'>font</a> if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001209
Cary Clark777eede2018-11-09 16:04:58 -05001210FreeType 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
1211the outline <a href='undocumented#Glyph'>glyph</a> if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> is clear.
1212Windows may select the <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> but is not required to do so.
1213<a href='#OS_X'>OS_X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001214
Cary Clark777eede2018-11-09 16:04:58 -05001215<a href='#Paint_Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> is disabled by default.
1216<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
1217<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001218
1219### Example
1220
Cary Clarka560c472017-11-27 10:44:06 -05001221<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001222<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001223 includes an embedded bitmap Glyph at odd font sizes. This example works
1224 on platforms that use FreeType as their Font_Engine.
1225 Windows may, but is not required to, return a bitmap glyph if
1226 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1227 bitmap.allocN32Pixels(30, 15);
1228 bitmap.eraseColor(0);
1229 SkCanvas offscreen(bitmap);
1230 SkPaint paint;
1231 paint.setAntiAlias(true);
1232 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001233 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001234 for (bool embedded : { false, true}) {
1235 paint.setEmbeddedBitmapText(embedded);
1236 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1237 }
1238 canvas->drawBitmap(bitmap, 0, 0);
1239 canvas->scale(10, 10);
1240 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001241
Cary Clarka560c472017-11-27 10:44:06 -05001242</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001243
Cary Clark682c58d2018-05-16 07:07:07 -04001244<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001245
1246---
Cary Clark12799e12017-07-28 15:18:29 -04001247
Cary Clark682c58d2018-05-16 07:07:07 -04001248<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001249bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001250</pre>
1251
Cary Clarkcb6bef02018-11-29 12:05:25 -05001252Returns true if <a href='SkFont_Reference#Font'>font</a> engine may return <a href='undocumented#Glyph'>glyphs</a> from <a href='SkFont_Reference#Font'>font</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001253
Cary Clark777eede2018-11-09 16:04:58 -05001254Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001255
1256### Return Value
1257
Cary Clark777eede2018-11-09 16:04:58 -05001258<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001259
1260### Example
1261
1262<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1263
1264#### Example Output
1265
1266~~~~
1267paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1268paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1269~~~~
1270
1271</fiddle-embed></div>
1272
Cary Clark682c58d2018-05-16 07:07:07 -04001273<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001274
1275---
Cary Clark12799e12017-07-28 15:18:29 -04001276
Cary Clark682c58d2018-05-16 07:07:07 -04001277<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001278void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001279</pre>
1280
Cary Clark777eede2018-11-09 16:04:58 -05001281Requests, 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 -04001282
Cary Clark777eede2018-11-09 16:04:58 -05001283Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1284Clears <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 -04001285
1286### Parameters
1287
Cary Clark682c58d2018-05-16 07:07:07 -04001288<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001289 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001290 </tr>
1291</table>
1292
1293### Example
1294
1295<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1296
1297#### Example Output
1298
1299~~~~
1300paint1 == paint2
1301~~~~
1302
1303</fiddle-embed></div>
1304
Cary Clarka90ea222018-10-16 10:30:28 -04001305<a name='Automatic_Hinting'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001306
Cary Clarkabaffd82018-11-15 08:25:12 -05001307If Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, <a href='#Paint_Automatic_Hinting'>Automatic_Hinting</a>
Cary Clark777eede2018-11-09 16:04:58 -05001308instructs the <a href='#Font_Manager'>Font_Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001309<a href='#Paint_Automatic_Hinting'>Automatic_Hinting</a> has no effect if Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001310<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001311
Cary Clark777eede2018-11-09 16:04:58 -05001312<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 -04001313
Cary Clark682c58d2018-05-16 07:07:07 -04001314<a name='SkPaint_isAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001315
1316---
Cary Clark12799e12017-07-28 15:18:29 -04001317
Cary Clark682c58d2018-05-16 07:07:07 -04001318<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001319bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001320</pre>
1321
Cary Clarkabaffd82018-11-15 08:25:12 -05001322Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or
Cary Clarkcb6bef02018-11-29 12:05:25 -05001323<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, and if platform uses FreeType as the <a href='SkFont_Reference#Font'>font</a> manager.
1324If true, instructs the <a href='SkFont_Reference#Font'>font</a> manager to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001325
Cary Clark777eede2018-11-09 16:04:58 -05001326Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001327
1328### Return Value
1329
Cary Clark777eede2018-11-09 16:04:58 -05001330<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001331
1332### Example
1333
1334<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1335
1336#### Example Output
1337
1338~~~~
1339paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1340paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1341~~~~
1342
1343</fiddle-embed></div>
1344
1345### See Also
1346
Cary Clarkabaffd82018-11-15 08:25:12 -05001347<a href='#SkPaint_setAutohinted'>setAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001348
Cary Clark682c58d2018-05-16 07:07:07 -04001349<a name='SkPaint_setAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001350
1351---
Cary Clark12799e12017-07-28 15:18:29 -04001352
Cary Clark682c58d2018-05-16 07:07:07 -04001353<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001354void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001355</pre>
1356
Cary Clark09d80c02018-10-31 12:14:03 -04001357Sets whether to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001358If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
Cary Clark777eede2018-11-09 16:04:58 -05001359and <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is set, instructs the <a href='undocumented#Font_Manager'>font manager</a> to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001360<a href='SkPaint_Reference#Automatic_Hinting'>auto-hinting</a> has no effect if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001361<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001362
Cary Clark09d80c02018-10-31 12:14:03 -04001363Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>font manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001364
Cary Clark777eede2018-11-09 16:04:58 -05001365Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1366Clears <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 -04001367
1368### Parameters
1369
Cary Clark682c58d2018-05-16 07:07:07 -04001370<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001371 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001372 </tr>
1373</table>
1374
1375### Example
1376
1377<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1378
1379### See Also
1380
Cary Clarkabaffd82018-11-15 08:25:12 -05001381<a href='#SkPaint_isAutohinted'>isAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001382
Cary Clarka90ea222018-10-16 10:30:28 -04001383<a name='Fake_Bold'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001384
Cary Clarka90ea222018-10-16 10:30:28 -04001385---
Cary Clark08895c42018-02-01 09:37:32 -05001386
Cary Clarkcb6bef02018-11-29 12:05:25 -05001387<a href='#Paint_Fake_Bold'>Fake_Bold</a> approximates the bold <a href='SkFont_Reference#Font'>font</a> style accompanying a normal <a href='SkFont_Reference#Font'>font</a> when a bold <a href='SkFont_Reference#Font'>font</a> face
1388is not available. Skia does not provide <a href='SkFont_Reference#Font'>font</a> substitution; it is up to the client to find the
1389bold <a href='SkFont_Reference#Font'>font</a> face using the platform <a href='#Font_Manager'>Font_Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001390
Cary Clarkcb6bef02018-11-29 12:05:25 -05001391Use <a href='#Paint_Text_Skew_X'>Text_Skew_X</a> to approximate an italic <a href='SkFont_Reference#Font'>font</a> style when the italic <a href='SkFont_Reference#Font'>font</a> face
Cary Clark777eede2018-11-09 16:04:58 -05001392is not available.
Cary Clark12799e12017-07-28 15:18:29 -04001393
Cary Clark777eede2018-11-09 16:04:58 -05001394A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clarkcb6bef02018-11-29 12:05:25 -05001395the <a href='SkFont_Reference#Font_Engine'>font engine</a> to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark777eede2018-11-09 16:04:58 -05001396by 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 -04001397
Cary Clark777eede2018-11-09 16:04:58 -05001398<a href='#Paint_Fake_Bold'>Fake_Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001399
1400### Example
1401
1402<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1403
Cary Clark682c58d2018-05-16 07:07:07 -04001404<a name='SkPaint_isFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001405
1406---
Cary Clark12799e12017-07-28 15:18:29 -04001407
Cary Clark682c58d2018-05-16 07:07:07 -04001408<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001409bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001410</pre>
1411
Cary Clark77b3f3a2018-11-07 14:59:03 -05001412Returns 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 -04001413from outlines.
1414
Cary Clark777eede2018-11-09 16:04:58 -05001415Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001416
1417### Return Value
1418
Cary Clark777eede2018-11-09 16:04:58 -05001419<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001420
1421### Example
1422
1423<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1424
1425#### Example Output
1426
1427~~~~
1428paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1429paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1430~~~~
1431
1432</fiddle-embed></div>
1433
Cary Clark682c58d2018-05-16 07:07:07 -04001434<a name='SkPaint_setFakeBoldText'></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 -05001439void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001440</pre>
1441
Cary Clark777eede2018-11-09 16:04:58 -05001442Increases <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 -04001443
Cary Clark777eede2018-11-09 16:04:58 -05001444Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1445Clears <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 -04001446
1447### Parameters
1448
Cary Clark682c58d2018-05-16 07:07:07 -04001449<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001450 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001451 </tr>
1452</table>
1453
1454### Example
1455
1456<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1457
1458#### Example Output
1459
1460~~~~
1461paint1 == paint2
1462~~~~
1463
1464</fiddle-embed></div>
1465
Cary Clarka90ea222018-10-16 10:30:28 -04001466<a name='Full_Hinting_Spacing'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001467
Cary Clarkabaffd82018-11-15 08:25:12 -05001468if Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, <a href='#Paint_Full_Hinting_Spacing'>Full_Hinting_Spacing</a> adjusts the character
Cary Clark777eede2018-11-09 16:04:58 -05001469spacing by the difference of the hinted and unhinted <a href='#Left_Side_Bearing'>Left_Side_Bearing</a> and
1470<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
1471FreeType as their <a href='#Font_Engine'>Font_Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001472
Cary Clark777eede2018-11-09 16:04:58 -05001473<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
Cary Clarkcb6bef02018-11-29 12:05:25 -05001474a specific pair of characters is adjusted using <a href='undocumented#Data'>data</a> in the <a href='SkFont_Reference#Font'>font</a> kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001475
Cary Clarka90ea222018-10-16 10:30:28 -04001476<a name='Filter_Quality_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001477
Cary Clarka90ea222018-10-16 10:30:28 -04001478---
Cary Clark08895c42018-02-01 09:37:32 -05001479
Cary Clark777eede2018-11-09 16:04:58 -05001480<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.
1481A lower <a href='#Filter_Quality'>Filter_Quality</a> draws faster, but has less fidelity.
1482A higher <a href='#Filter_Quality'>Filter_Quality</a> draws slower, but looks better.
1483If the <a href='SkImage_Reference#Image'>image</a> is drawn without scaling, the <a href='#Filter_Quality'>Filter_Quality</a> choice will not result
1484in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001485
Cary Clark777eede2018-11-09 16:04:58 -05001486<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 -04001487
1488<table> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001489 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmap'>drawBitmap</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001490 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001491 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmapRect'>drawBitmapRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001492 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001493 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImage'>drawImage</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001494 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001495 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImageRect'>drawImageRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001496 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001497</table>
1498
Cary Clark777eede2018-11-09 16:04:58 -05001499and 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 -04001500
Cary Clark777eede2018-11-09 16:04:58 -05001501<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 -04001502
1503### Example
1504
skia-bookmaker525f9a92018-05-03 06:27:39 +00001505<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001506
Cary Clark682c58d2018-05-16 07:07:07 -04001507<a name='SkPaint_getFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001508
1509---
Cary Clark12799e12017-07-28 15:18:29 -04001510
Cary Clark682c58d2018-05-16 07:07:07 -04001511<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001512<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001513</pre>
1514
Cary Clark777eede2018-11-09 16:04:58 -05001515Returns <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1516draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
Cary Clark12799e12017-07-28 15:18:29 -04001517
1518### Return Value
1519
Cary Clark682c58d2018-05-16 07:07:07 -04001520one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
Cary Clark09d80c02018-10-31 12:14:03 -04001521
Cary Clark682c58d2018-05-16 07:07:07 -04001522<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001523
1524### Example
1525
1526<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1527
1528#### Example Output
1529
1530~~~~
1531kNone_SkFilterQuality == paint.getFilterQuality()
1532~~~~
1533
1534</fiddle-embed></div>
1535
Cary Clark682c58d2018-05-16 07:07:07 -04001536<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001537
1538---
Cary Clark12799e12017-07-28 15:18:29 -04001539
Cary Clark682c58d2018-05-16 07:07:07 -04001540<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001541void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001542</pre>
1543
Cary Clark777eede2018-11-09 16:04:58 -05001544Sets <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1545draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
1546Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001547
1548### Parameters
1549
Cary Clark682c58d2018-05-16 07:07:07 -04001550<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001551 <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 -04001552 </tr>
1553</table>
1554
Cary Clark09d80c02018-10-31 12:14:03 -04001555<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
1556
Cary Clark12799e12017-07-28 15:18:29 -04001557### Example
1558
1559<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1560
1561#### Example Output
1562
1563~~~~
1564kHigh_SkFilterQuality == paint.getFilterQuality()
1565~~~~
1566
1567</fiddle-embed></div>
1568
1569### See Also
1570
Cary Clark77b3f3a2018-11-07 14:59:03 -05001571<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#Image_Scaling'>Image_Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001572
Cary Clarka90ea222018-10-16 10:30:28 -04001573<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001574
Cary Clarka90ea222018-10-16 10:30:28 -04001575---
Cary Clark12799e12017-07-28 15:18:29 -04001576
Cary Clarkab2621d2018-01-30 10:08:57 -05001577| name | description |
1578| --- | --- |
Cary Clark777eede2018-11-09 16:04:58 -05001579| <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> |
1580| <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 -04001581
Cary Clark777eede2018-11-09 16:04:58 -05001582<a href='SkColor_Reference#Color'>Color</a> specifies the red, blue, green, and <a href='#Color_Alpha'>Color_Alpha</a>
1583values used to draw a filled or stroked shape in a 32-bit value. Each component
1584occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1585All values in any combination are valid.
Cary Clarkab2621d2018-01-30 10:08:57 -05001586
Cary Clark777eede2018-11-09 16:04:58 -05001587<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
1588RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001589
Cary Clark777eede2018-11-09 16:04:58 -05001590The bit positions of <a href='#Color_Alpha'>Color_Alpha</a> and RGB are independent of the bit
1591positions on the output <a href='undocumented#Device'>device</a>, which may have more or fewer bits, and may have
1592a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001593
Cary Clark77b3f3a2018-11-07 14:59:03 -05001594| bit positions | <a href='#Color_Alpha'>Color_Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001595| --- | --- | --- | --- | --- |
1596| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1597
1598### Example
1599
Ravi Mistry874e22b2018-07-19 03:49:13 +00001600<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001601
Cary Clark682c58d2018-05-16 07:07:07 -04001602<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001603
1604---
Cary Clark12799e12017-07-28 15:18:29 -04001605
Cary Clark682c58d2018-05-16 07:07:07 -04001606<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001607<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001608</pre>
1609
Cary Clark777eede2018-11-09 16:04:58 -05001610Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, packed into 32 bits.
1611Use 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
1612a <a href='SkColor_Reference#Color'>color</a> component.
Cary Clark12799e12017-07-28 15:18:29 -04001613
1614### Return Value
1615
Cary Clark777eede2018-11-09 16:04:58 -05001616<a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001617
1618### Example
1619
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001620<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001621
1622#### Example Output
1623
1624~~~~
1625Yellow is 100% red, 100% green, and 0% blue.
1626~~~~
1627
1628</fiddle-embed></div>
1629
1630### See Also
1631
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001632<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1633
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001634<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001635
1636---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001637
1638<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001639<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>()const
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001640</pre>
1641
Cary Clark777eede2018-11-09 16:04:58 -05001642Retrieves <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 -04001643are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1644
1645### Return Value
1646
Cary Clark777eede2018-11-09 16:04:58 -05001647<a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001648
1649### Example
1650
1651<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1652
1653#### Example Output
1654
1655~~~~
1656Yellow is 100% red, 100% green, and 0% blue.
1657~~~~
1658
1659</fiddle-embed></div>
1660
1661### See Also
1662
1663<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001664
Cary Clark682c58d2018-05-16 07:07:07 -04001665<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001666
1667---
Cary Clark12799e12017-07-28 15:18:29 -04001668
Cary Clark682c58d2018-05-16 07:07:07 -04001669<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -05001670void <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 -04001671</pre>
1672
Cary Clark777eede2018-11-09 16:04:58 -05001673Sets <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,
1674<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 -04001675
1676### Parameters
1677
Cary Clark682c58d2018-05-16 07:07:07 -04001678<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001679 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001680 </tr>
1681</table>
1682
1683### Example
1684
skia-bookmaker233c6522018-07-04 05:33:26 +00001685<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001686
1687#### Example Output
1688
1689~~~~
1690green1 == green2
1691~~~~
1692
1693</fiddle-embed></div>
1694
1695### See Also
1696
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001697<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>
1698
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001699<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001700
1701---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001702
1703<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001704void <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 -04001705</pre>
1706
Cary Clark777eede2018-11-09 16:04:58 -05001707Sets <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
1708<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
1709the <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 -04001710sRGB <a href='undocumented#Color_Space'>color space</a>.
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001711
1712### Parameters
1713
1714<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001715 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA</td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001716 </tr>
1717 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001718 <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 -04001719 </tr>
1720</table>
1721
1722### Example
1723
1724<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
1725
1726#### Example Output
1727
1728~~~~
1729green1 == green2
1730~~~~
1731
1732</fiddle-embed></div>
1733
1734### See Also
1735
1736<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 -04001737
Cary Clarka90ea222018-10-16 10:30:28 -04001738<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001739
Cary Clark777eede2018-11-09 16:04:58 -05001740<a href='#Color_Alpha'>Color_Alpha</a> sets the transparency independent of RGB: red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04001741
Cary Clark682c58d2018-05-16 07:07:07 -04001742<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001743
1744---
Cary Clark12799e12017-07-28 15:18:29 -04001745
Cary Clark682c58d2018-05-16 07:07:07 -04001746<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001747uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001748</pre>
1749
Cary Clark777eede2018-11-09 16:04:58 -05001750Retrieves <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 -04001751
1752### Return Value
1753
Cary Clark777eede2018-11-09 16:04:58 -05001754<a href='SkColor_Reference#Alpha'>alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001755
1756### Example
1757
Cary Clark83647062018-07-18 16:21:51 -04001758<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04001759
1760#### Example Output
1761
1762~~~~
1763255 == paint.getAlpha()
1764~~~~
1765
1766</fiddle-embed></div>
1767
Cary Clark682c58d2018-05-16 07:07:07 -04001768<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001769
1770---
Cary Clark12799e12017-07-28 15:18:29 -04001771
Cary Clark682c58d2018-05-16 07:07:07 -04001772<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001773void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04001774</pre>
1775
Cary Clark777eede2018-11-09 16:04:58 -05001776Replaces <a href='SkColor_Reference#Alpha'>alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04001777unchanged. An out of range value triggers an assert in the debug
Cary Clark777eede2018-11-09 16:04:58 -05001778build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
1779<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 -04001780fully opaque.
1781
1782### Parameters
1783
Cary Clark682c58d2018-05-16 07:07:07 -04001784<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001785 <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 -04001786 </tr>
1787</table>
1788
1789### Example
1790
Ravi Mistry874e22b2018-07-19 03:49:13 +00001791<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04001792
1793#### Example Output
1794
1795~~~~
17960x44112233 == paint.getColor()
1797~~~~
1798
1799</fiddle-embed></div>
1800
Cary Clark682c58d2018-05-16 07:07:07 -04001801<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001802
1803---
Cary Clark12799e12017-07-28 15:18:29 -04001804
Cary Clark682c58d2018-05-16 07:07:07 -04001805<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001806void <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 -04001807</pre>
1808
Cary Clark777eede2018-11-09 16:04:58 -05001809Sets <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.
1810The <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 -04001811
1812### Parameters
1813
Cary Clark682c58d2018-05-16 07:07:07 -04001814<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001815 <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 -04001816 </tr>
1817 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001818 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001819 </tr>
1820 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001821 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001822 </tr>
1823 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001824 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04001825 </tr>
1826</table>
1827
1828### Example
1829
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001830<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04001831
1832#### Example Output
1833
1834~~~~
1835transRed1 == transRed2
1836~~~~
1837
1838</fiddle-embed></div>
1839
1840### See Also
1841
Cary Clark682c58d2018-05-16 07:07:07 -04001842<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001843
Cary Clarka90ea222018-10-16 10:30:28 -04001844<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001845
Cary Clarka90ea222018-10-16 10:30:28 -04001846---
Cary Clark08895c42018-02-01 09:37:32 -05001847
Cary Clark777eede2018-11-09 16:04:58 -05001848<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
1849Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001850
Cary Clarka90ea222018-10-16 10:30:28 -04001851<a name='Style_Fill'></a>
1852
Cary Clark777eede2018-11-09 16:04:58 -05001853Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kFill_Style'>kFill_Style</a> to fill the shape.
1854The fill covers the area inside the geometry for most shapes.
Cary Clark12799e12017-07-28 15:18:29 -04001855
Cary Clarka90ea222018-10-16 10:30:28 -04001856<a name='Style_Stroke'></a>
1857
Cary Clark777eede2018-11-09 16:04:58 -05001858Set <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 -04001859
Cary Clark777eede2018-11-09 16:04:58 -05001860The stroke covers the area described by following the shape edge with a pen or brush of
1861<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>.
1862The area covered where the shape turns a corner is described by <a href='#Paint_Stroke_Join'>Stroke_Join</a>.
1863The 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
1864may 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 -04001865
Cary Clarka90ea222018-10-16 10:30:28 -04001866### See Also
Cary Clark12799e12017-07-28 15:18:29 -04001867
Cary Clark77b3f3a2018-11-07 14:59:03 -05001868<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 -04001869
1870<a name='Hairline'></a>
1871
1872---
1873
Cary Clark777eede2018-11-09 16:04:58 -05001874<a href='#Paint_Stroke_Width'>Stroke_Width</a> of zero has a special meaning and switches drawing to use Hairline.
1875Hairline draws the thinnest continuous frame. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is clear, adjacent pixels
1876flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04001877
Cary Clark777eede2018-11-09 16:04:58 -05001878<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
1879two <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
1880<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
1881GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
1882while stroking.
Cary Clark12799e12017-07-28 15:18:29 -04001883
Cary Clarka90ea222018-10-16 10:30:28 -04001884### See Also
1885
Cary Clark77b3f3a2018-11-07 14:59:03 -05001886<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 -04001887
1888<a name='SkPaint_Style'></a>
1889
1890---
Cary Clark12799e12017-07-28 15:18:29 -04001891
Cary Clarka560c472017-11-27 10:44:06 -05001892<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001893 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04001894 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
1895 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
1896 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04001897 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05001898
Cary Clarka90ea222018-10-16 10:30:28 -04001899</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04001900
Cary Clarka90ea222018-10-16 10:30:28 -04001901<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04001902 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 -05001903</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001904
Cary Clark777eede2018-11-09 16:04:58 -05001905Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
1906The stroke and fill
1907share 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 -04001908
Cary Clark777eede2018-11-09 16:04:58 -05001909Use <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> to avoid hitting the same pixels twice with a stroke draw and
1910a fill draw.
Cary Clark12799e12017-07-28 15:18:29 -04001911
1912### Constants
1913
Cary Clark682c58d2018-05-16 07:07:07 -04001914<table style='border-collapse: collapse; width: 62.5em'>
1915 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1916<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1917<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1918 <tr style='background-color: #f0f0f0; '>
1919 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
1920 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1921 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001922Applies 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>.
1923<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
1924<a href='#SkPaint_kFill_Style'>kFill_Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
1925The <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,
1926and to create an unfilled hole inside the shape.
1927<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 -05001928</td>
Cary Clark12799e12017-07-28 15:18:29 -04001929 </tr>
1930 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001931 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
1932 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1933 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001934Applies 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>.
1935<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,
1936and ignore the set <a href='#SkPaint_Style'>Style</a>.
1937The stroke construction is unaffected by the <a href='#Path_Fill_Type'>Path_Fill_Type</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001938</td>
1939 </tr>
1940 <tr style='background-color: #f0f0f0; '>
1941 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
1942 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1943 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001944Applies 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>.
1945<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>,
1946and the set <a href='#Path_Fill_Type'>Path_Fill_Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05001947</td>
Cary Clark12799e12017-07-28 15:18:29 -04001948 </tr>
1949 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001950 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
1951 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1952 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001953May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05001954</td>
Cary Clark12799e12017-07-28 15:18:29 -04001955 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001956</table>
Cary Clark12799e12017-07-28 15:18:29 -04001957
Cary Clark682c58d2018-05-16 07:07:07 -04001958<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001959
1960---
Cary Clark12799e12017-07-28 15:18:29 -04001961
Cary Clark682c58d2018-05-16 07:07:07 -04001962<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001963<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001964</pre>
1965
Cary Clark80247e52018-07-11 16:18:41 -04001966Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001967
1968### Return Value
1969
Cary Clark09d80c02018-10-31 12:14:03 -04001970one 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 -04001971
1972### Example
1973
1974<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
1975
1976#### Example Output
1977
1978~~~~
1979SkPaint::kFill_Style == paint.getStyle()
1980~~~~
1981
1982</fiddle-embed></div>
1983
1984### See Also
1985
Cary Clark682c58d2018-05-16 07:07:07 -04001986<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04001987
Cary Clark682c58d2018-05-16 07:07:07 -04001988<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001989
1990---
Cary Clark12799e12017-07-28 15:18:29 -04001991
Cary Clark682c58d2018-05-16 07:07:07 -04001992<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001993void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04001994</pre>
1995
1996Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark777eede2018-11-09 16:04:58 -05001997Has 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 -04001998
1999### Parameters
2000
Cary Clark682c58d2018-05-16 07:07:07 -04002001<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002002 <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 -04002003 </tr>
2004</table>
2005
2006### Example
2007
2008<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2009
2010### See Also
2011
Cary Clark682c58d2018-05-16 07:07:07 -04002012<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002013
Cary Clarka90ea222018-10-16 10:30:28 -04002014<a name='Stroke_Width'></a>
2015
Cary Clark12799e12017-07-28 15:18:29 -04002016---
2017
Cary Clark777eede2018-11-09 16:04:58 -05002018<a href='#Paint_Stroke_Width'>Stroke_Width</a> sets the width for stroking. The width is the thickness
2019of 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
2020set 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 -04002021
Cary Clark777eede2018-11-09 16:04:58 -05002022When width is greater than zero, the stroke encompasses as many pixels partially
2023or fully as needed. When the width equals zero, the <a href='SkPaint_Reference#Paint'>paint</a> enables hairlines;
2024the stroke is always one <a href='undocumented#Pixel'>pixel</a> wide.
Cary Clark12799e12017-07-28 15:18:29 -04002025
Cary Clark777eede2018-11-09 16:04:58 -05002026The stroke dimensions are scaled by the <a href='SkCanvas_Reference#Canvas_Matrix'>canvas matrix</a>, but Hairline stroke
2027remains one <a href='undocumented#Pixel'>pixel</a> wide regardless of scaling.
Cary Clark12799e12017-07-28 15:18:29 -04002028
Cary Clark777eede2018-11-09 16:04:58 -05002029The default width for the <a href='SkPaint_Reference#Paint'>paint</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04002030
2031### Example
2032
Cary Clark777eede2018-11-09 16:04:58 -05002033<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
2034<a href='undocumented#Line'>line</a> and the platform implementation.
Cary Clark1a8d7622018-03-05 13:26:16 -05002035</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002036
Cary Clark682c58d2018-05-16 07:07:07 -04002037<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002038
2039---
Cary Clark12799e12017-07-28 15:18:29 -04002040
Cary Clark682c58d2018-05-16 07:07:07 -04002041<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002042<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002043</pre>
2044
Cary Clark777eede2018-11-09 16:04:58 -05002045Returns the thickness of the pen used by <a href='SkPaint_Reference#SkPaint'>SkPaint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002046outline the shape.
2047
2048### Return Value
2049
Cary Clark09d80c02018-10-31 12:14:03 -04002050zero for hairline, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002051
2052### Example
2053
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002054<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002055
2056#### Example Output
2057
2058~~~~
20590 == paint.getStrokeWidth()
2060~~~~
2061
2062</fiddle-embed></div>
2063
Cary Clark682c58d2018-05-16 07:07:07 -04002064<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002065
2066---
Cary Clark12799e12017-07-28 15:18:29 -04002067
Cary Clark682c58d2018-05-16 07:07:07 -04002068<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002069void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002070</pre>
2071
Cary Clark777eede2018-11-09 16:04:58 -05002072Sets the thickness of the pen used by the <a href='SkPaint_Reference#Paint'>paint</a> to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002073outline the shape.
Cary Clark777eede2018-11-09 16:04:58 -05002074Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002075
2076### Parameters
2077
Cary Clark682c58d2018-05-16 07:07:07 -04002078<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002079 <td>zero thickness for hairline; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002080 </tr>
2081</table>
2082
2083### Example
2084
2085<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2086
2087#### Example Output
2088
2089~~~~
20905 == paint.getStrokeWidth()
2091~~~~
2092
2093</fiddle-embed></div>
2094
Cary Clarka90ea222018-10-16 10:30:28 -04002095<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002096
Cary Clarka90ea222018-10-16 10:30:28 -04002097---
Cary Clark08895c42018-02-01 09:37:32 -05002098
Cary Clark777eede2018-11-09 16:04:58 -05002099<a href='#Paint_Miter_Limit'>Miter_Limit</a> specifies the maximum miter length,
2100relative to the <a href='#Stroke_Width'>stroke width</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002101
Cary Clark777eede2018-11-09 16:04:58 -05002102<a href='#Paint_Miter_Limit'>Miter_Limit</a> is used when the <a href='#Paint_Stroke_Join'>Stroke_Join</a>
2103is 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>
2104or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002105
Cary Clark777eede2018-11-09 16:04:58 -05002106If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>
2107is replaced with <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002108
Cary Clark777eede2018-11-09 16:04:58 -05002109<a href='#Paint_Miter_Limit'>Miter_Limit</a> can be computed from the corner angle using:
Cary Clark77b3f3a2018-11-07 14:59:03 -05002110<code><a href='#Miter_Limit'>miter limit</a> = 1 / sin ( angle / 2 )</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002111
Cary Clark777eede2018-11-09 16:04:58 -05002112<a href='#Paint_Miter_Limit'>Miter_Limit</a> default value is 4.
2113The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults_MiterLimit</a>
2114in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002115
Cary Clark777eede2018-11-09 16:04:58 -05002116Here are some miter limits and the angles that triggers them.
Cary Clark12799e12017-07-28 15:18:29 -04002117
Cary Clark77b3f3a2018-11-07 14:59:03 -05002118| <a href='#Miter_Limit'>miter limit</a> | angle in degrees |
Cary Clark12799e12017-07-28 15:18:29 -04002119| --- | --- |
2120| 10 | 11.48 |
2121| 9 | 12.76 |
2122| 8 | 14.36 |
2123| 7 | 16.43 |
2124| 6 | 19.19 |
2125| 5 | 23.07 |
2126| 4 | 28.96 |
2127| 3 | 38.94 |
2128| 2 | 60 |
2129| 1 | 180 |
2130
2131### Example
2132
Cary Clarka619d452018-07-16 08:12:01 -04002133<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark77b3f3a2018-11-07 14:59:03 -05002134When the <a href='#Miter_Limit'>miter limit</a> is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002135by a bevel join.
2136</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002137
Cary Clark682c58d2018-05-16 07:07:07 -04002138<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002139
2140---
Cary Clark12799e12017-07-28 15:18:29 -04002141
Cary Clark682c58d2018-05-16 07:07:07 -04002142<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002143<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002144</pre>
2145
Cary Clark80247e52018-07-11 16:18:41 -04002146Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002147
2148### Return Value
2149
Cary Clark77b3f3a2018-11-07 14:59:03 -05002150zero and greater miter limit
Cary Clark12799e12017-07-28 15:18:29 -04002151
2152### Example
2153
2154<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2155
2156#### Example Output
2157
2158~~~~
2159default miter limit == 4
2160~~~~
2161
2162</fiddle-embed></div>
2163
2164### See Also
2165
Cary Clark77b3f3a2018-11-07 14:59:03 -05002166<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 -04002167
Cary Clark682c58d2018-05-16 07:07:07 -04002168<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002169
2170---
Cary Clark12799e12017-07-28 15:18:29 -04002171
Cary Clark682c58d2018-05-16 07:07:07 -04002172<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002173void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002174</pre>
2175
Cary Clark80247e52018-07-11 16:18:41 -04002176Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002177Valid values are zero and greater.
Cary Clark777eede2018-11-09 16:04:58 -05002178Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002179
2180### Parameters
2181
Cary Clark682c58d2018-05-16 07:07:07 -04002182<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002183 <td>zero and greater <a href='#Miter_Limit'>miter limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002184 </tr>
2185</table>
2186
2187### Example
2188
skia-bookmakera717ca92018-07-08 05:32:09 +00002189<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002190
2191#### Example Output
2192
2193~~~~
2194default miter limit == 8
2195~~~~
2196
2197</fiddle-embed></div>
2198
2199### See Also
2200
Cary Clark77b3f3a2018-11-07 14:59:03 -05002201<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 -04002202
Cary Clarka90ea222018-10-16 10:30:28 -04002203<a name='Stroke_Cap'></a>
2204
2205<a name='SkPaint_Cap'></a>
2206
Cary Clark12799e12017-07-28 15:18:29 -04002207---
2208
Cary Clarka560c472017-11-27 10:44:06 -05002209<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002210 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002211 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2212 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2213 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002214 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2215 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002216 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05002217
Cary Clarka90ea222018-10-16 10:30:28 -04002218</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002219
Cary Clarka90ea222018-10-16 10:30:28 -04002220<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002221 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 -05002222</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002223
Cary Clark777eede2018-11-09 16:04:58 -05002224<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 -04002225
2226### Constants
2227
Cary Clark682c58d2018-05-16 07:07:07 -04002228<table style='border-collapse: collapse; width: 62.5em'>
2229 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2230<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2231<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2232 <tr style='background-color: #f0f0f0; '>
2233 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2234 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2235 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2236Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002237</td>
Cary Clark12799e12017-07-28 15:18:29 -04002238 </tr>
2239 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002240 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2241 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2242 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002243Adds a <a href='undocumented#Circle'>circle</a> with a diameter equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2244and end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002245</td>
Cary Clark12799e12017-07-28 15:18:29 -04002246 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002247 <tr style='background-color: #f0f0f0; '>
2248 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2249 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2250 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002251Adds a square with sides equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2252and end. The square sides are parallel to the initial and final direction
2253of the stroke.
Cary Clark1a8d7622018-03-05 13:26:16 -05002254</td>
Cary Clark12799e12017-07-28 15:18:29 -04002255 </tr>
2256 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002257 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2258 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2259 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002260Equivalent to the largest value for <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002261</td>
2262 </tr>
2263 <tr style='background-color: #f0f0f0; '>
2264 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2265 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2266 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002267<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 -05002268</td>
Cary Clark12799e12017-07-28 15:18:29 -04002269 </tr>
2270 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002271 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2272 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2273 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002274May be used to verify that <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002275</td>
Cary Clark12799e12017-07-28 15:18:29 -04002276 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002277</table>
Cary Clark12799e12017-07-28 15:18:29 -04002278
Cary Clark777eede2018-11-09 16:04:58 -05002279Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2280follows 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 -04002281
Cary Clark777eede2018-11-09 16:04:58 -05002282If 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
2283visible beginning and end.
Cary Clark12799e12017-07-28 15:18:29 -04002284
Cary Clark777eede2018-11-09 16:04:58 -05002285<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 -04002286
Cary Clark777eede2018-11-09 16:04:58 -05002287<a href='#SkPaint_kButt_Cap'>kButt_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> is not drawn.
2288<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>
2289at the <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPoint_Reference#Point'>point</a>.
2290<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
2291<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 -04002292
Cary Clark777eede2018-11-09 16:04:58 -05002293<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 -04002294
Cary Clark12799e12017-07-28 15:18:29 -04002295### Example
2296
Cary Clark2ade9972017-11-02 17:49:34 -04002297<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002298
Cary Clark682c58d2018-05-16 07:07:07 -04002299<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002300
2301---
Cary Clark12799e12017-07-28 15:18:29 -04002302
Cary Clark682c58d2018-05-16 07:07:07 -04002303<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002304<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002305</pre>
2306
Cary Clark80247e52018-07-11 16:18:41 -04002307Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002308
2309### Return Value
2310
Cary Clark09d80c02018-10-31 12:14:03 -04002311one 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 -04002312
2313### Example
2314
2315<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2316
2317#### Example Output
2318
2319~~~~
2320kButt_Cap == default stroke cap
2321~~~~
2322
2323</fiddle-embed></div>
2324
2325### See Also
2326
Cary Clark77b3f3a2018-11-07 14:59:03 -05002327<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002328
Cary Clark682c58d2018-05-16 07:07:07 -04002329<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002330
2331---
Cary Clark12799e12017-07-28 15:18:29 -04002332
Cary Clark682c58d2018-05-16 07:07:07 -04002333<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002334void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002335</pre>
2336
Cary Clark80247e52018-07-11 16:18:41 -04002337Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002338
2339### Parameters
2340
Cary Clark682c58d2018-05-16 07:07:07 -04002341<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002342 <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 -04002343 </tr>
2344</table>
2345
Cary Clark777eede2018-11-09 16:04:58 -05002346has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid
Cary Clark09d80c02018-10-31 12:14:03 -04002347
Cary Clark12799e12017-07-28 15:18:29 -04002348### Example
2349
2350<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2351
2352#### Example Output
2353
2354~~~~
2355kRound_Cap == paint.getStrokeCap()
2356~~~~
2357
2358</fiddle-embed></div>
2359
2360### See Also
2361
Cary Clark77b3f3a2018-11-07 14:59:03 -05002362<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002363
Cary Clarka90ea222018-10-16 10:30:28 -04002364<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002365
Cary Clark777eede2018-11-09 16:04:58 -05002366<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 -04002367
Cary Clark777eede2018-11-09 16:04:58 -05002368Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2369follows 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 -04002370
Cary Clark777eede2018-11-09 16:04:58 -05002371If the <a href='SkPath_Overview#Contour'>contour</a> direction changes abruptly, because the tangent direction leading
2372to 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
2373the 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 -04002374
2375### Example
2376
Cary Clark2ade9972017-11-02 17:49:34 -04002377<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002378
Cary Clarka90ea222018-10-16 10:30:28 -04002379<a name='SkPaint_Join'></a>
2380
2381---
Cary Clark12799e12017-07-28 15:18:29 -04002382
Cary Clarka560c472017-11-27 10:44:06 -05002383<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002384 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04002385 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2386 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2387 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002388 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2389 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002390 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05002391
Cary Clarka90ea222018-10-16 10:30:28 -04002392</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002393
Cary Clarka90ea222018-10-16 10:30:28 -04002394<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002395 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 -05002396</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002397
Cary Clark777eede2018-11-09 16:04:58 -05002398<a href='#SkPaint_Join'>Join</a> specifies how corners are drawn when a shape is stroked. <a href='#SkPaint_Join'>Join</a>
2399affects the four corners of a stroked rectangle, and the connected segments in a
2400stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002401
Cary Clark777eede2018-11-09 16:04:58 -05002402Choose miter join to draw sharp corners. Choose round join to draw a <a href='undocumented#Circle'>circle</a> with a
2403radius equal to the <a href='#Stroke_Width'>stroke width</a> on top of the corner. Choose bevel join to minimally
2404connect the thick strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002405
Cary Clark777eede2018-11-09 16:04:58 -05002406The <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
2407not contain the actual join. For instance, a <a href='#Fill_Path'>fill path</a> constructed with round joins does
2408not necessarily include <a href='undocumented#Circle'>circles</a> at each connected segment.
Cary Clark12799e12017-07-28 15:18:29 -04002409
2410### Constants
2411
Cary Clark682c58d2018-05-16 07:07:07 -04002412<table style='border-collapse: collapse; width: 62.5em'>
2413 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2414<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2415<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2416 <tr style='background-color: #f0f0f0; '>
2417 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2418 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2419 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002420Extends the outside corner to the extent allowed by <a href='#Paint_Miter_Limit'>Miter_Limit</a>.
Cary Clark777eede2018-11-09 16:04:58 -05002421If 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 -05002422</td>
Cary Clark12799e12017-07-28 15:18:29 -04002423 </tr>
2424 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002425 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2426 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2427 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002428Adds 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 -04002429</td>
2430 </tr>
2431 <tr style='background-color: #f0f0f0; '>
2432 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2433 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2434 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2435Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002436</td>
Cary Clark12799e12017-07-28 15:18:29 -04002437 </tr>
2438 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002439 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2440 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2441 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2442equivalent to the largest value for Stroke_Join</td>
2443 </tr>
2444 <tr style='background-color: #f0f0f0; '>
2445 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2446 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2447 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002448<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 -05002449</td>
Cary Clark12799e12017-07-28 15:18:29 -04002450 </tr>
2451 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002452 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2453 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2454 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002455May be used to verify that <a href='#Paint_Stroke_Join'>Stroke_Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002456</td>
Cary Clark12799e12017-07-28 15:18:29 -04002457 </tr>
2458</table>
2459
2460### Example
2461
2462<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2463
2464### See Also
2465
Cary Clark682c58d2018-05-16 07:07:07 -04002466<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 -04002467
Cary Clark682c58d2018-05-16 07:07:07 -04002468<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002469
2470---
Cary Clark12799e12017-07-28 15:18:29 -04002471
Cary Clark682c58d2018-05-16 07:07:07 -04002472<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002473<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002474</pre>
2475
Cary Clark80247e52018-07-11 16:18:41 -04002476Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002477
2478### Return Value
2479
Cary Clark09d80c02018-10-31 12:14:03 -04002480one 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 -04002481
2482### Example
2483
Cary Clark7f644ec2018-07-19 10:50:44 -04002484<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002485
2486#### Example Output
2487
2488~~~~
2489kMiter_Join == default stroke join
2490~~~~
2491
2492</fiddle-embed></div>
2493
2494### See Also
2495
Cary Clark77b3f3a2018-11-07 14:59:03 -05002496<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002497
Cary Clark682c58d2018-05-16 07:07:07 -04002498<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002499
2500---
Cary Clark12799e12017-07-28 15:18:29 -04002501
Cary Clark682c58d2018-05-16 07:07:07 -04002502<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002503void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002504</pre>
2505
Cary Clark80247e52018-07-11 16:18:41 -04002506Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002507
2508### Parameters
2509
Cary Clark682c58d2018-05-16 07:07:07 -04002510<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002511 <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 -04002512 </tr>
2513</table>
2514
Cary Clark09d80c02018-10-31 12:14:03 -04002515otherwise, has no effect
2516
Cary Clark12799e12017-07-28 15:18:29 -04002517### Example
2518
2519<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2520
2521#### Example Output
2522
2523~~~~
2524kMiter_Join == paint.getStrokeJoin()
2525~~~~
2526
2527</fiddle-embed></div>
2528
2529### See Also
2530
Cary Clark77b3f3a2018-11-07 14:59:03 -05002531<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002532
Cary Clark12799e12017-07-28 15:18:29 -04002533### See Also
2534
Cary Clark77b3f3a2018-11-07 14:59:03 -05002535<a href='#Paint_Miter_Limit'>Miter_Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002536
Cary Clarka90ea222018-10-16 10:30:28 -04002537<a name='Fill_Path'></a>
2538
2539---
Cary Clark08895c42018-02-01 09:37:32 -05002540
Cary Clark777eede2018-11-09 16:04:58 -05002541<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 -04002542
Cary Clark777eede2018-11-09 16:04:58 -05002543If <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
2544replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2545destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002546
Cary Clark777eede2018-11-09 16:04:58 -05002547Fill <a href='SkPath_Reference#Path'>Path</a> can request the <a href='#Path_Effect'>Path_Effect</a> to restrict to a culling rectangle, but
2548the <a href='#Path_Effect'>Path_Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002549
Cary Clark777eede2018-11-09 16:04:58 -05002550If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
2551and <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>,
2552and <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 -04002553
Cary Clark777eede2018-11-09 16:04:58 -05002554Fill <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 -04002555
Cary Clark777eede2018-11-09 16:04:58 -05002556If 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>
2557returns false since Hairline has no filled equivalent.
Cary Clarka90ea222018-10-16 10:30:28 -04002558
2559### See Also
2560
Cary Clark77b3f3a2018-11-07 14:59:03 -05002561<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 -04002562
Cary Clark682c58d2018-05-16 07:07:07 -04002563<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002564
2565---
Cary Clark12799e12017-07-28 15:18:29 -04002566
Cary Clark682c58d2018-05-16 07:07:07 -04002567<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002568bool <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 -04002569</pre>
2570
Cary Clark09d80c02018-10-31 12:14:03 -04002571Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002572
2573### Parameters
2574
Cary Clark682c58d2018-05-16 07:07:07 -04002575<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002576 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002577 </tr>
2578 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002579 <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 -04002580 </tr>
2581 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002582 <td>optional limit passed to <a href='undocumented#SkPathEffect'>SkPathEffect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04002583 </tr>
2584 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002585 <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 -04002586 </tr>
2587</table>
2588
Cary Clark09d80c02018-10-31 12:14:03 -04002589to favor speed and <a href='undocumented#Size'>size</a>
2590
Cary Clark12799e12017-07-28 15:18:29 -04002591### Return Value
2592
Cary Clark777eede2018-11-09 16:04:58 -05002593true 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 -04002594
2595### Example
2596
Cary Clark777eede2018-11-09 16:04:58 -05002597<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.
2598At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
2599At 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 -05002600</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002601
Cary Clark682c58d2018-05-16 07:07:07 -04002602<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002603
Cary Clarka90ea222018-10-16 10:30:28 -04002604---
2605
Cary Clark682c58d2018-05-16 07:07:07 -04002606<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002607bool <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 -04002608</pre>
2609
Cary Clark09d80c02018-10-31 12:14:03 -04002610Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002611
Cary Clark777eede2018-11-09 16:04:58 -05002612Replaces <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>.
2613<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 -04002614
2615### Parameters
2616
Cary Clark682c58d2018-05-16 07:07:07 -04002617<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002618 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002619 </tr>
2620 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002621 <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 -04002622 </tr>
2623</table>
2624
2625### Return Value
2626
Cary Clark777eede2018-11-09 16:04:58 -05002627true 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 -04002628
2629### Example
2630
2631<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2632
Cary Clarka90ea222018-10-16 10:30:28 -04002633<a name='Shader_Methods'></a>
2634
Cary Clark12799e12017-07-28 15:18:29 -04002635---
2636
Cary Clark777eede2018-11-09 16:04:58 -05002637<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2638<a href='undocumented#Shader'>Shader</a> may be an <a href='SkImage_Reference#Image'>image</a>, a gradient, or a computed fill.
2639If <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 -04002640
Cary Clark777eede2018-11-09 16:04:58 -05002641<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>.
2642If <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
2643the fill.
Cary Clark12799e12017-07-28 15:18:29 -04002644
Cary Clark777eede2018-11-09 16:04:58 -05002645The 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 -04002646
2647### Example
2648
2649<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2650
Cary Clark777eede2018-11-09 16:04:58 -05002651If <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 -04002652
2653### Example
2654
skia-bookmaker525f9a92018-05-03 06:27:39 +00002655<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002656
Cary Clark682c58d2018-05-16 07:07:07 -04002657<a name='SkPaint_getShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002658
2659---
Cary Clark12799e12017-07-28 15:18:29 -04002660
Cary Clark682c58d2018-05-16 07:07:07 -04002661<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002662<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002663</pre>
2664
Cary Clark777eede2018-11-09 16:04:58 -05002665Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002666
Cary Clark09d80c02018-10-31 12:14:03 -04002667Does not alter <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002668
2669### Return Value
2670
Cary Clark777eede2018-11-09 16:04:58 -05002671<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002672
2673### Example
2674
2675<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2676
2677#### Example Output
2678
2679~~~~
2680nullptr == shader
2681nullptr != shader
2682~~~~
2683
2684</fiddle-embed></div>
2685
Cary Clark682c58d2018-05-16 07:07:07 -04002686<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002687
2688---
Cary Clark12799e12017-07-28 15:18:29 -04002689
Cary Clark682c58d2018-05-16 07:07:07 -04002690<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002691<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 -04002692</pre>
2693
Cary Clark777eede2018-11-09 16:04:58 -05002694Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002695
Cary Clark777eede2018-11-09 16:04:58 -05002696Increases <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002697
2698### Return Value
2699
Cary Clark777eede2018-11-09 16:04:58 -05002700<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002701
2702### Example
2703
2704<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2705
2706#### Example Output
2707
2708~~~~
2709shader unique: true
2710shader unique: false
2711~~~~
2712
2713</fiddle-embed></div>
2714
Cary Clark682c58d2018-05-16 07:07:07 -04002715<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002716
2717---
Cary Clark12799e12017-07-28 15:18:29 -04002718
Cary Clark682c58d2018-05-16 07:07:07 -04002719<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002720void <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 -04002721</pre>
2722
Cary Clark777eede2018-11-09 16:04:58 -05002723Sets optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002724
Cary Clark777eede2018-11-09 16:04:58 -05002725Sets <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>.
2726Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002727
2728### Parameters
2729
Cary Clark682c58d2018-05-16 07:07:07 -04002730<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002731 <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 -04002732 </tr>
2733</table>
2734
2735### Example
2736
skia-bookmakere0a458f2018-07-16 05:29:00 +00002737<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002738
Cary Clarka90ea222018-10-16 10:30:28 -04002739<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002740
Cary Clarka90ea222018-10-16 10:30:28 -04002741---
Cary Clark08895c42018-02-01 09:37:32 -05002742
Cary Clark777eede2018-11-09 16:04:58 -05002743<a href='#Color_Filter'>Color_Filter</a> alters the <a href='SkColor_Reference#Color'>color</a> used when drawing a shape.
2744<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.
2745If <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 -04002746
Cary Clark777eede2018-11-09 16:04:58 -05002747The 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 -04002748
2749### Example
2750
2751<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2752
Cary Clark682c58d2018-05-16 07:07:07 -04002753<a name='SkPaint_getColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002754
2755---
Cary Clark12799e12017-07-28 15:18:29 -04002756
Cary Clark682c58d2018-05-16 07:07:07 -04002757<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002758<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002759</pre>
2760
Cary Clark777eede2018-11-09 16:04:58 -05002761Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002762Does not alter <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002763
2764### Return Value
2765
Cary Clark777eede2018-11-09 16:04:58 -05002766<a href='undocumented#SkColorFilter'>SkColorFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002767
2768### Example
2769
2770<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2771
2772#### Example Output
2773
2774~~~~
2775nullptr == color filter
2776nullptr != color filter
2777~~~~
2778
2779</fiddle-embed></div>
2780
Cary Clark682c58d2018-05-16 07:07:07 -04002781<a name='SkPaint_refColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002782
2783---
Cary Clark12799e12017-07-28 15:18:29 -04002784
Cary Clark682c58d2018-05-16 07:07:07 -04002785<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002786<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 -04002787</pre>
2788
Cary Clark777eede2018-11-09 16:04:58 -05002789Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
2790Increases <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002791
2792### Return Value
2793
Cary Clark777eede2018-11-09 16:04:58 -05002794<a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002795
2796### Example
2797
2798<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2799
2800#### Example Output
2801
2802~~~~
2803color filter unique: true
2804color filter unique: false
2805~~~~
2806
2807</fiddle-embed></div>
2808
Cary Clark682c58d2018-05-16 07:07:07 -04002809<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002810
2811---
Cary Clark12799e12017-07-28 15:18:29 -04002812
Cary Clark682c58d2018-05-16 07:07:07 -04002813<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002814void <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 -04002815</pre>
2816
Cary Clark777eede2018-11-09 16:04:58 -05002817Sets <a href='undocumented#SkColorFilter'>SkColorFilter</a> to filter, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
2818<a href='undocumented#SkColorFilter'>SkColorFilter</a>. Pass nullptr to clear <a href='undocumented#SkColorFilter'>SkColorFilter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04002819
Cary Clark777eede2018-11-09 16:04:58 -05002820Increments filter <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002821
2822### Parameters
2823
Cary Clark682c58d2018-05-16 07:07:07 -04002824<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002825 <td><a href='undocumented#SkColorFilter'>SkColorFilter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002826 </tr>
2827</table>
2828
2829### Example
2830
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002831<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002832
Cary Clarka90ea222018-10-16 10:30:28 -04002833<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002834
Cary Clarka90ea222018-10-16 10:30:28 -04002835---
Cary Clark08895c42018-02-01 09:37:32 -05002836
Cary Clark777eede2018-11-09 16:04:58 -05002837<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>.
2838The 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>
2839over the destination <a href='SkColor_Reference#Color'>color</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002840
2841### Example
2842
Cary Clark83647062018-07-18 16:21:51 -04002843<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002844
2845### See Also
2846
Cary Clark77b3f3a2018-11-07 14:59:03 -05002847<a href='#Blend_Mode'>Blend_Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002848
Cary Clark682c58d2018-05-16 07:07:07 -04002849<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002850
2851---
Cary Clark12799e12017-07-28 15:18:29 -04002852
Cary Clark682c58d2018-05-16 07:07:07 -04002853<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002854<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002855</pre>
2856
Cary Clark09d80c02018-10-31 12:14:03 -04002857Returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>.
2858By default, returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002859
2860### Return Value
2861
Cary Clark777eede2018-11-09 16:04:58 -05002862mode 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 -04002863
2864### Example
2865
skia-bookmaker525f9a92018-05-03 06:27:39 +00002866<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04002867
2868#### Example Output
2869
2870~~~~
2871kSrcOver == getBlendMode
2872kSrcOver != getBlendMode
2873~~~~
2874
2875</fiddle-embed></div>
2876
Cary Clark682c58d2018-05-16 07:07:07 -04002877<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002878
2879---
Cary Clark12799e12017-07-28 15:18:29 -04002880
Cary Clark682c58d2018-05-16 07:07:07 -04002881<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002882bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002883</pre>
2884
Cary Clark777eede2018-11-09 16:04:58 -05002885Returns 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 -04002886
2887### Return Value
2888
Cary Clark777eede2018-11-09 16:04:58 -05002889true 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 -04002890
2891### Example
2892
2893<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2894
2895#### Example Output
2896
2897~~~~
2898isSrcOver == true
2899isSrcOver != true
2900~~~~
2901
2902</fiddle-embed></div>
2903
Cary Clark682c58d2018-05-16 07:07:07 -04002904<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002905
2906---
Cary Clark12799e12017-07-28 15:18:29 -04002907
Cary Clark682c58d2018-05-16 07:07:07 -04002908<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002909void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04002910</pre>
2911
Cary Clark777eede2018-11-09 16:04:58 -05002912Sets <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002913Does not check for valid input.
2914
2915### Parameters
2916
Cary Clark682c58d2018-05-16 07:07:07 -04002917<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002918 <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 -04002919 </tr>
2920</table>
2921
2922### Example
2923
2924<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2925
2926#### Example Output
2927
2928~~~~
2929isSrcOver == true
2930isSrcOver != true
2931~~~~
2932
2933</fiddle-embed></div>
2934
Cary Clarka90ea222018-10-16 10:30:28 -04002935<a name='Path_Effect_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002936
Cary Clarka90ea222018-10-16 10:30:28 -04002937---
Cary Clark08895c42018-02-01 09:37:32 -05002938
Cary Clark777eede2018-11-09 16:04:58 -05002939<a href='#Path_Effect'>Path_Effect</a> modifies the <a href='SkPath_Reference#Path'>path</a> geometry before drawing it.
2940<a href='#Path_Effect'>Path_Effect</a> may implement dashing, custom fill effects and custom stroke effects.
2941If <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 -04002942
2943### Example
2944
2945<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
2946
2947### See Also
2948
Cary Clark77b3f3a2018-11-07 14:59:03 -05002949<a href='#Path_Effect'>Path_Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002950
Cary Clark682c58d2018-05-16 07:07:07 -04002951<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002952
2953---
Cary Clark12799e12017-07-28 15:18:29 -04002954
Cary Clark682c58d2018-05-16 07:07:07 -04002955<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002956<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002957</pre>
2958
Cary Clark777eede2018-11-09 16:04:58 -05002959Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002960Does not alter <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002961
2962### Return Value
2963
Cary Clark777eede2018-11-09 16:04:58 -05002964<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002965
2966### Example
2967
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002968<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04002969
2970#### Example Output
2971
2972~~~~
2973nullptr == path effect
2974nullptr != path effect
2975~~~~
2976
2977</fiddle-embed></div>
2978
Cary Clark682c58d2018-05-16 07:07:07 -04002979<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002980
2981---
Cary Clark12799e12017-07-28 15:18:29 -04002982
Cary Clark682c58d2018-05-16 07:07:07 -04002983<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002984<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 -04002985</pre>
2986
Cary Clark777eede2018-11-09 16:04:58 -05002987Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
2988Increases <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002989
2990### Return Value
2991
Cary Clark777eede2018-11-09 16:04:58 -05002992<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002993
2994### Example
2995
Cary Clark83647062018-07-18 16:21:51 -04002996<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04002997
2998#### Example Output
2999
3000~~~~
3001path effect unique: true
3002path effect unique: false
3003~~~~
3004
3005</fiddle-embed></div>
3006
Cary Clark682c58d2018-05-16 07:07:07 -04003007<a name='SkPaint_setPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003008
3009---
Cary Clark12799e12017-07-28 15:18:29 -04003010
Cary Clark682c58d2018-05-16 07:07:07 -04003011<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003012void <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 -04003013</pre>
3014
Cary Clark777eede2018-11-09 16:04:58 -05003015Sets <a href='undocumented#SkPathEffect'>SkPathEffect</a> to <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3016<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 -04003017
Cary Clark777eede2018-11-09 16:04:58 -05003018Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003019
3020### Parameters
3021
Cary Clark682c58d2018-05-16 07:07:07 -04003022<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003023 <td>replace <a href='SkPath_Reference#SkPath'>SkPath</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003024 </tr>
3025</table>
3026
3027### Example
3028
3029<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3030
Cary Clarka90ea222018-10-16 10:30:28 -04003031<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003032
Cary Clarka90ea222018-10-16 10:30:28 -04003033---
Cary Clark08895c42018-02-01 09:37:32 -05003034
Cary Clark777eede2018-11-09 16:04:58 -05003035<a href='#Mask_Filter'>Mask_Filter</a> uses coverage of the shape drawn to create <a href='#Mask_Alpha'>Mask_Alpha</a>.
3036<a href='#Mask_Filter'>Mask_Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003037
Cary Clark777eede2018-11-09 16:04:58 -05003038<a href='#Mask_Filter'>Mask_Filter</a> may change the geometry and transparency of the shape, such as
3039creating a blur effect. Set <a href='#Mask_Filter'>Mask_Filter</a> to nullptr to prevent <a href='#Mask_Filter'>Mask_Filter</a> from
3040modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003041
3042### Example
3043
Cary Clark681287e2018-03-16 11:34:15 -04003044<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003045
Cary Clark682c58d2018-05-16 07:07:07 -04003046<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003047
3048---
Cary Clark12799e12017-07-28 15:18:29 -04003049
Cary Clark682c58d2018-05-16 07:07:07 -04003050<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003051<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003052</pre>
3053
Cary Clark777eede2018-11-09 16:04:58 -05003054Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003055Does not alter <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003056
3057### Return Value
3058
Cary Clark777eede2018-11-09 16:04:58 -05003059<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003060
3061### Example
3062
Cary Clark681287e2018-03-16 11:34:15 -04003063<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003064
3065#### Example Output
3066
3067~~~~
3068nullptr == mask filter
3069nullptr != mask filter
3070~~~~
3071
3072</fiddle-embed></div>
3073
Cary Clark682c58d2018-05-16 07:07:07 -04003074<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003075
3076---
Cary Clark12799e12017-07-28 15:18:29 -04003077
Cary Clark682c58d2018-05-16 07:07:07 -04003078<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003079<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 -04003080</pre>
3081
Cary Clark777eede2018-11-09 16:04:58 -05003082Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003083
Cary Clark777eede2018-11-09 16:04:58 -05003084Increases <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003085
3086### Return Value
3087
Cary Clark777eede2018-11-09 16:04:58 -05003088<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003089
3090### Example
3091
Cary Clark83647062018-07-18 16:21:51 -04003092<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003093
3094#### Example Output
3095
3096~~~~
3097mask filter unique: true
3098mask filter unique: false
3099~~~~
3100
3101</fiddle-embed></div>
3102
Cary Clark682c58d2018-05-16 07:07:07 -04003103<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003104
3105---
Cary Clark12799e12017-07-28 15:18:29 -04003106
Cary Clark682c58d2018-05-16 07:07:07 -04003107<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003108void <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 -04003109</pre>
3110
Cary Clark777eede2018-11-09 16:04:58 -05003111Sets <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> to <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3112<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 -04003113<a href='undocumented#Mask_Alpha'>mask alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003114
Cary Clark777eede2018-11-09 16:04:58 -05003115Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003116
3117### Parameters
3118
Cary Clark682c58d2018-05-16 07:07:07 -04003119<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3120 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003121 </tr>
3122</table>
3123
3124### Example
3125
Cary Clark681287e2018-03-16 11:34:15 -04003126<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003127
Cary Clarka90ea222018-10-16 10:30:28 -04003128<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003129
Cary Clarka90ea222018-10-16 10:30:28 -04003130---
Cary Clark08895c42018-02-01 09:37:32 -05003131
Cary Clarkcb6bef02018-11-29 12:05:25 -05003132<a href='undocumented#Typeface'>Typeface</a> identifies the <a href='SkFont_Reference#Font'>font</a> used when drawing and measuring <a href='undocumented#Text'>text</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003133<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>.
Cary Clarkcb6bef02018-11-29 12:05:25 -05003134The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default <a href='SkFont_Reference#Font'>font</a>
Cary Clark777eede2018-11-09 16:04:58 -05003135implementation.
Cary Clark12799e12017-07-28 15:18:29 -04003136
3137### Example
3138
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003139<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003140
Cary Clark682c58d2018-05-16 07:07:07 -04003141<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003142
3143---
Cary Clark12799e12017-07-28 15:18:29 -04003144
Cary Clark682c58d2018-05-16 07:07:07 -04003145<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003146<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003147</pre>
3148
Cary Clark777eede2018-11-09 16:04:58 -05003149Returns <a href='undocumented#SkTypeface'>SkTypeface</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003150Does not alter <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003151
3152### Return Value
3153
Cary Clark777eede2018-11-09 16:04:58 -05003154<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003155
3156### Example
3157
Cary Clarkf9603982018-07-17 08:20:27 -04003158<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003159
3160#### Example Output
3161
3162~~~~
3163nullptr == typeface
3164nullptr != typeface
3165~~~~
3166
3167</fiddle-embed></div>
3168
Cary Clark682c58d2018-05-16 07:07:07 -04003169<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003170
3171---
Cary Clark12799e12017-07-28 15:18:29 -04003172
Cary Clark682c58d2018-05-16 07:07:07 -04003173<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003174<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 -04003175</pre>
3176
Cary Clark777eede2018-11-09 16:04:58 -05003177Increases <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003178
3179### Return Value
3180
Cary Clark777eede2018-11-09 16:04:58 -05003181<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003182
3183### Example
3184
Cary Clark83647062018-07-18 16:21:51 -04003185<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003186
3187#### Example Output
3188
3189~~~~
3190typeface1 != typeface2
3191typeface1 == typeface2
3192~~~~
3193
3194</fiddle-embed></div>
3195
Cary Clark682c58d2018-05-16 07:07:07 -04003196<a name='SkPaint_setTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003197
3198---
Cary Clark12799e12017-07-28 15:18:29 -04003199
Cary Clark682c58d2018-05-16 07:07:07 -04003200<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003201void <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 -04003202</pre>
3203
Cary Clark777eede2018-11-09 16:04:58 -05003204Sets <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>.
3205Pass nullptr to clear <a href='undocumented#SkTypeface'>SkTypeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3206<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003207
3208### Parameters
3209
Cary Clark682c58d2018-05-16 07:07:07 -04003210<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
Cary Clarkcb6bef02018-11-29 12:05:25 -05003211 <td><a href='SkFont_Reference#Font'>font</a> and style used to draw <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003212 </tr>
3213</table>
3214
3215### Example
3216
Cary Clark71961fb2018-01-05 14:21:59 -05003217<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003218
Cary Clarka90ea222018-10-16 10:30:28 -04003219<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003220
Cary Clarka90ea222018-10-16 10:30:28 -04003221---
Cary Clark08895c42018-02-01 09:37:32 -05003222
Cary Clark777eede2018-11-09 16:04:58 -05003223<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>
3224with <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>,
3225which 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 -04003226
Cary Clark777eede2018-11-09 16:04:58 -05003227<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>
3228can 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.
3229<a href='#Image_Filter'>Image_Filter</a> operates independently of and can be used in combination with
Cary Clark77b3f3a2018-11-07 14:59:03 -05003230<a href='#Mask_Filter'>Mask_Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003231
3232### Example
3233
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003234<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003235
Cary Clark682c58d2018-05-16 07:07:07 -04003236<a name='SkPaint_getImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003237
3238---
Cary Clark12799e12017-07-28 15:18:29 -04003239
Cary Clark682c58d2018-05-16 07:07:07 -04003240<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003241<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003242</pre>
3243
Cary Clark777eede2018-11-09 16:04:58 -05003244Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003245Does not alter <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003246
3247### Return Value
3248
Cary Clark777eede2018-11-09 16:04:58 -05003249<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003250
3251### Example
3252
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003253<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003254
3255#### Example Output
3256
3257~~~~
3258nullptr == image filter
3259nullptr != image filter
3260~~~~
3261
3262</fiddle-embed></div>
3263
Cary Clark682c58d2018-05-16 07:07:07 -04003264<a name='SkPaint_refImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003265
3266---
Cary Clark12799e12017-07-28 15:18:29 -04003267
Cary Clark682c58d2018-05-16 07:07:07 -04003268<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003269<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 -04003270</pre>
3271
Cary Clark777eede2018-11-09 16:04:58 -05003272Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
3273Increases <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003274
3275### Return Value
3276
Cary Clark777eede2018-11-09 16:04:58 -05003277<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003278
3279### Example
3280
3281<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3282
3283#### Example Output
3284
3285~~~~
3286image filter unique: true
3287image filter unique: false
3288~~~~
3289
3290</fiddle-embed></div>
3291
Cary Clark682c58d2018-05-16 07:07:07 -04003292<a name='SkPaint_setImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003293
3294---
Cary Clark12799e12017-07-28 15:18:29 -04003295
Cary Clark682c58d2018-05-16 07:07:07 -04003296<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003297void <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 -04003298</pre>
3299
Cary Clark777eede2018-11-09 16:04:58 -05003300Sets <a href='undocumented#SkImageFilter'>SkImageFilter</a> to <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3301<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 -04003302on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003303
Cary Clark777eede2018-11-09 16:04:58 -05003304Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003305
3306### Parameters
3307
Cary Clark682c58d2018-05-16 07:07:07 -04003308<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003309 <td>how <a href='SkImage_Reference#SkImage'>SkImage</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003310 </tr>
3311</table>
3312
3313### Example
3314
3315<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3316
Cary Clarka90ea222018-10-16 10:30:28 -04003317<a name='Draw_Looper_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003318
Cary Clarka90ea222018-10-16 10:30:28 -04003319---
Cary Clark08895c42018-02-01 09:37:32 -05003320
Cary Clark777eede2018-11-09 16:04:58 -05003321<a href='#Draw_Looper'>Draw_Looper</a> sets a modifier that communicates state from one <a href='#Draw_Layer'>Draw_Layer</a>
3322to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003323
Cary Clark777eede2018-11-09 16:04:58 -05003324<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.
3325<a href='#Draw_Looper'>Draw_Looper</a> may be used to draw multiple colors or create a colored shadow.
3326Set <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 -04003327
3328### Example
3329
3330<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3331
Cary Clark682c58d2018-05-16 07:07:07 -04003332<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003333
3334---
Cary Clark12799e12017-07-28 15:18:29 -04003335
Cary Clark682c58d2018-05-16 07:07:07 -04003336<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003337<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003338</pre>
3339
Cary Clark777eede2018-11-09 16:04:58 -05003340Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003341Does not alter <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003342
3343### Return Value
3344
Cary Clark777eede2018-11-09 16:04:58 -05003345<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003346
3347### Example
3348
3349<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3350
3351#### Example Output
3352
3353~~~~
3354nullptr == draw looper
3355nullptr != draw looper
3356~~~~
3357
3358</fiddle-embed></div>
3359
Cary Clark682c58d2018-05-16 07:07:07 -04003360<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003361
3362---
Cary Clark12799e12017-07-28 15:18:29 -04003363
Cary Clark682c58d2018-05-16 07:07:07 -04003364<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003365<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 -04003366</pre>
3367
Cary Clark777eede2018-11-09 16:04:58 -05003368Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
3369Increases <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003370
3371### Return Value
3372
Cary Clark777eede2018-11-09 16:04:58 -05003373<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003374
3375### Example
3376
3377<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3378
3379#### Example Output
3380
3381~~~~
3382draw looper unique: true
3383draw looper unique: false
3384~~~~
3385
3386</fiddle-embed></div>
3387
Cary Clark682c58d2018-05-16 07:07:07 -04003388<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003389
3390---
Cary Clark12799e12017-07-28 15:18:29 -04003391
Cary Clark682c58d2018-05-16 07:07:07 -04003392<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkabaffd82018-11-15 08:25:12 -05003393void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003394</pre>
3395
Cary Clark777eede2018-11-09 16:04:58 -05003396Sets <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> to <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3397<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 -04003398drawing unaltered.
3399
Cary Clark777eede2018-11-09 16:04:58 -05003400Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003401
3402### Parameters
3403
Cary Clark682c58d2018-05-16 07:07:07 -04003404<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003405 <td>iterates through drawing one or more time, altering <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003406 </tr>
3407</table>
3408
3409### Example
3410
3411<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3412
Cary Clarka90ea222018-10-16 10:30:28 -04003413<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003414
Cary Clarka90ea222018-10-16 10:30:28 -04003415---
Cary Clark08895c42018-02-01 09:37:32 -05003416
Cary Clark777eede2018-11-09 16:04:58 -05003417<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>.
3418<a href='#Paint_Text_Size'>Text_Size</a> can be set to any positive value or zero.
3419<a href='#Paint_Text_Size'>Text_Size</a> defaults to 12.
3420Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults_TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003421
3422### Example
3423
3424<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3425
Cary Clark682c58d2018-05-16 07:07:07 -04003426<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003427
3428---
Cary Clark12799e12017-07-28 15:18:29 -04003429
Cary Clark682c58d2018-05-16 07:07:07 -04003430<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003431<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003432</pre>
3433
Cary Clark777eede2018-11-09 16:04:58 -05003434Returns <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 -04003435
3436### Return Value
3437
Cary Clark09d80c02018-10-31 12:14:03 -04003438typographic height of <a href='undocumented#Text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04003439
3440### Example
3441
skia-bookmaker233c6522018-07-04 05:33:26 +00003442<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003443
Cary Clark682c58d2018-05-16 07:07:07 -04003444<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003445
3446---
Cary Clark12799e12017-07-28 15:18:29 -04003447
Cary Clark682c58d2018-05-16 07:07:07 -04003448<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003449void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003450</pre>
3451
Cary Clark777eede2018-11-09 16:04:58 -05003452Sets <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
3453Has 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 -04003454
3455### Parameters
3456
Cary Clark682c58d2018-05-16 07:07:07 -04003457<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003458 <td>typographic height of <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003459 </tr>
3460</table>
3461
3462### Example
3463
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003464<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003465
Cary Clarka90ea222018-10-16 10:30:28 -04003466<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003467
Cary Clarka90ea222018-10-16 10:30:28 -04003468---
Cary Clark08895c42018-02-01 09:37:32 -05003469
Cary Clark777eede2018-11-09 16:04:58 -05003470<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal scale.
3471<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
3472is not available.
3473<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> can be set to any value.
3474<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003475
3476### Example
3477
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003478<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003479
Cary Clark682c58d2018-05-16 07:07:07 -04003480<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003481
3482---
Cary Clark12799e12017-07-28 15:18:29 -04003483
Cary Clark682c58d2018-05-16 07:07:07 -04003484<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003485<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003486</pre>
3487
Cary Clark777eede2018-11-09 16:04:58 -05003488Returns <a href='undocumented#Text'>text</a> scale on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003489Default value is 1.
3490
3491### Return Value
3492
Cary Clark777eede2018-11-09 16:04:58 -05003493<a href='undocumented#Text'>text</a> horizontal scale
Cary Clark12799e12017-07-28 15:18:29 -04003494
3495### Example
3496
3497<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3498
Cary Clark682c58d2018-05-16 07:07:07 -04003499<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003500
3501---
Cary Clark12799e12017-07-28 15:18:29 -04003502
Cary Clark682c58d2018-05-16 07:07:07 -04003503<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003504void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003505</pre>
3506
Cary Clark777eede2018-11-09 16:04:58 -05003507Sets <a href='undocumented#Text'>text scale</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003508Default value is 1.
3509
3510### Parameters
3511
Cary Clark682c58d2018-05-16 07:07:07 -04003512<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003513 <td><a href='undocumented#Text'>text</a> horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003514 </tr>
3515</table>
3516
3517### Example
3518
3519<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3520
Cary Clarka90ea222018-10-16 10:30:28 -04003521<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003522
Cary Clarka90ea222018-10-16 10:30:28 -04003523---
Cary Clark08895c42018-02-01 09:37:32 -05003524
Cary Clark777eede2018-11-09 16:04:58 -05003525<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal slant.
3526<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
3527is not available.
3528<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> can be set to any value.
3529<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003530
3531### Example
3532
3533<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3534
Cary Clark682c58d2018-05-16 07:07:07 -04003535<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003536
3537---
Cary Clark12799e12017-07-28 15:18:29 -04003538
Cary Clark682c58d2018-05-16 07:07:07 -04003539<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003540<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003541</pre>
3542
Cary Clark777eede2018-11-09 16:04:58 -05003543Returns <a href='undocumented#Text'>text</a> skew on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003544Default value is zero.
3545
3546### Return Value
3547
Cary Clark09d80c02018-10-31 12:14:03 -04003548additional shear on x-axis relative to y-axis
Cary Clark12799e12017-07-28 15:18:29 -04003549
3550### Example
3551
Cary Clark7f644ec2018-07-19 10:50:44 -04003552<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003553
Cary Clark682c58d2018-05-16 07:07:07 -04003554<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003555
3556---
Cary Clark12799e12017-07-28 15:18:29 -04003557
Cary Clark682c58d2018-05-16 07:07:07 -04003558<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003559void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003560</pre>
3561
Cary Clark777eede2018-11-09 16:04:58 -05003562Sets <a href='undocumented#Text'>text skew</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003563Default value is zero.
3564
3565### Parameters
3566
Cary Clark682c58d2018-05-16 07:07:07 -04003567<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003568 <td>additional shear on x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003569 </tr>
3570</table>
3571
3572### Example
3573
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003574<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003575
Cary Clarka90ea222018-10-16 10:30:28 -04003576<a name='Text_Encoding'></a>
3577
Cary Clark12799e12017-07-28 15:18:29 -04003578---
3579
Cary Clarka90ea222018-10-16 10:30:28 -04003580<a name='SkPaint_TextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003581
Cary Clarka90ea222018-10-16 10:30:28 -04003582---
Cary Clark12799e12017-07-28 15:18:29 -04003583
Cary Clarka560c472017-11-27 10:44:06 -05003584<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003585 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04003586 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
3587 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
3588 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
3589 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003590 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05003591
Cary Clark1a8d7622018-03-05 13:26:16 -05003592</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003593
Cary Clark777eede2018-11-09 16:04:58 -05003594<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether <a href='undocumented#Text'>text</a> specifies character codes and their encoded
3595<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 -05003596<a href='https://unicode.org/standard/standard.html'>Unicode standard</a></a> .
Cary Clark6fc50412017-09-21 12:31:06 -04003597
Cary Clark777eede2018-11-09 16:04:58 -05003598Character codes encoded <a href='undocumented#Size'>size</a> are specified by UTF-8, UTF-16, or UTF-32.
3599All character code formats are able to represent all of Unicode, differing only
3600in the total storage required.
Cary Clark12799e12017-07-28 15:18:29 -04003601
Cary Clark682c58d2018-05-16 07:07:07 -04003602<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 -04003603
Cary Clark682c58d2018-05-16 07:07:07 -04003604<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 -04003605
Cary Clark682c58d2018-05-16 07:07:07 -04003606<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 -04003607
Cary Clarkcb6bef02018-11-29 12:05:25 -05003608<a href='#Font_Manager'>Font_Manager</a> uses <a href='SkFont_Reference#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.
Cary Clark777eede2018-11-09 16:04:58 -05003609A <a href='undocumented#Glyph'>glyph</a> index is a 16-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003610
Cary Clark777eede2018-11-09 16:04:58 -05003611<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 -04003612
3613### Constants
3614
Cary Clark682c58d2018-05-16 07:07:07 -04003615<table style='border-collapse: collapse; width: 62.5em'>
3616 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3617<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3618<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3619 <tr style='background-color: #f0f0f0; '>
3620 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
3621 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3622 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3623uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04003624 </tr>
3625 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003626 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
3627 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3628 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3629uses two byte words to represent most of Unicode</td>
3630 </tr>
3631 <tr style='background-color: #f0f0f0; '>
3632 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
3633 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3634 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3635uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04003636 </tr>
3637 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003638 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
3639 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3640 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3641uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04003642 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003643</table>
Cary Clark12799e12017-07-28 15:18:29 -04003644
3645### Example
3646
Cary Clark777eede2018-11-09 16:04:58 -05003647<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First <a href='undocumented#Line'>line</a> is encoded in UTF-8.
3648Second <a href='undocumented#Line'>line</a> is encoded in UTF-16.
3649Third <a href='undocumented#Line'>line</a> is encoded in UTF-32.
3650Fourth <a href='undocumented#Line'>line</a> has 16-bit <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003651</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003652
Cary Clark682c58d2018-05-16 07:07:07 -04003653<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003654
3655---
Cary Clark12799e12017-07-28 15:18:29 -04003656
Cary Clark682c58d2018-05-16 07:07:07 -04003657<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003658<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003659</pre>
3660
Cary Clark09d80c02018-10-31 12:14:03 -04003661Returns <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a>.
Cary Clarkcb6bef02018-11-29 12:05:25 -05003662<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='SkFont_Reference#Font'>font</a> <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark12799e12017-07-28 15:18:29 -04003663
3664### Return Value
3665
Cary Clark777eede2018-11-09 16:04:58 -05003666one 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 -04003667
3668<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003669
3670### Example
3671
skia-bookmaker525f9a92018-05-03 06:27:39 +00003672<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04003673
3674#### Example Output
3675
3676~~~~
3677kUTF8_TextEncoding == text encoding
3678kGlyphID_TextEncoding == text encoding
3679~~~~
3680
3681</fiddle-embed></div>
3682
Cary Clark682c58d2018-05-16 07:07:07 -04003683<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003684
3685---
Cary Clark12799e12017-07-28 15:18:29 -04003686
Cary Clark682c58d2018-05-16 07:07:07 -04003687<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003688void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04003689</pre>
3690
Cary Clark777eede2018-11-09 16:04:58 -05003691Sets <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
Cary Clarkcb6bef02018-11-29 12:05:25 -05003692<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='SkFont_Reference#Font'>font</a> <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark777eede2018-11-09 16:04:58 -05003693Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003694
3695### Parameters
3696
Cary Clark682c58d2018-05-16 07:07:07 -04003697<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003698 <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 -04003699 </tr>
3700</table>
3701
Cary Clark09d80c02018-10-31 12:14:03 -04003702<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
3703
Cary Clark12799e12017-07-28 15:18:29 -04003704### Example
3705
Cary Clark75fd4492018-06-20 12:45:16 -04003706<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04003707
3708#### Example Output
3709
3710~~~~
37114 != text encoding
3712~~~~
3713
3714</fiddle-embed></div>
3715
Cary Clark61313f32018-10-08 14:57:48 -04003716<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04003717
Cary Clarka90ea222018-10-16 10:30:28 -04003718---
3719
Cary Clark7e69c8f2018-11-06 20:40:45 -05003720<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003721
Cary Clark682c58d2018-05-16 07:07:07 -04003722<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003723
3724---
Cary Clark12799e12017-07-28 15:18:29 -04003725
Cary Clark682c58d2018-05-16 07:07:07 -04003726<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003727<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 -04003728</pre>
3729
Cary Clark777eede2018-11-09 16:04:58 -05003730Returns <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> associated with <a href='undocumented#SkTypeface'>SkTypeface</a>.
3731The 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 -04003732descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003733If <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>.
3734Results are scaled by <a href='#Text_Size'>text size</a> but does not take into account
Cary Clark09d80c02018-10-31 12:14:03 -04003735dimensions 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>,
3736<a href='#Style_Stroke'>style stroke</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003737
3738### Parameters
3739
Cary Clark682c58d2018-05-16 07:07:07 -04003740<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003741 <td>storage for <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003742 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04003743</table>
3744
3745### Return Value
3746
Cary Clark09d80c02018-10-31 12:14:03 -04003747recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003748
3749### Example
3750
skia-bookmaker2dc1e342018-11-02 05:33:11 +00003751<div><fiddle-embed name="59d9b8249afa1c2af6186711250ce240"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003752
3753### See Also
3754
Cary Clark77b3f3a2018-11-07 14:59:03 -05003755<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 -04003756
Cary Clark682c58d2018-05-16 07:07:07 -04003757<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003758
3759---
Cary Clark12799e12017-07-28 15:18:29 -04003760
Cary Clark682c58d2018-05-16 07:07:07 -04003761<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003762<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003763</pre>
3764
Cary Clark777eede2018-11-09 16:04:58 -05003765Returns the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of metrics
Cary Clark12799e12017-07-28 15:18:29 -04003766descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003767Result 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 -04003768dimensions required by stroking and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
3769Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003770
3771### Return Value
3772
Cary Clark09d80c02018-10-31 12:14:03 -04003773recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003774
3775### Example
3776
3777<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
3778
3779#### Example Output
3780
3781~~~~
3782textSize: 12 fontSpacing: 13.9688
3783textSize: 18 fontSpacing: 20.9531
3784textSize: 24 fontSpacing: 27.9375
3785textSize: 32 fontSpacing: 37.25
3786~~~~
3787
3788</fiddle-embed></div>
3789
Cary Clark682c58d2018-05-16 07:07:07 -04003790<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003791
3792---
Cary Clark12799e12017-07-28 15:18:29 -04003793
Cary Clark682c58d2018-05-16 07:07:07 -04003794<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003795int <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 -04003796</pre>
3797
Cary Clark777eede2018-11-09 16:04:58 -05003798Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into <a href='undocumented#Glyph'>glyph</a> indices.
3799Returns the number of <a href='undocumented#Glyph'>glyph</a> indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003800<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> specifies how <a href='#SkPaint_textToGlyphs_text'>text</a> represents characters or <a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003801<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 -04003802
Cary Clark777eede2018-11-09 16:04:58 -05003803Does 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 -04003804
Cary Clark777eede2018-11-09 16:04:58 -05003805If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
3806If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003807
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003808If <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> is <a href='undocumented#kUTF8_SkTextEncoding'>kUTF8_SkTextEncoding</a> and
Cary Clark777eede2018-11-09 16:04:58 -05003809<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04003810
3811### Parameters
3812
Cary Clark682c58d2018-05-16 07:07:07 -04003813<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003814 <td>character storage encoded with <a href='undocumented#SkTextEncoding'>SkTextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003815 </tr>
3816 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
3817 <td>length of character storage in bytes</td>
3818 </tr>
3819 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003820 <td>storage for <a href='undocumented#Glyph'>glyph</a> indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003821 </tr>
3822</table>
3823
3824### Return Value
3825
Cary Clark777eede2018-11-09 16:04:58 -05003826number 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 -04003827
3828### Example
3829
3830<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
3831
Cary Clark682c58d2018-05-16 07:07:07 -04003832<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003833
3834---
Cary Clark12799e12017-07-28 15:18:29 -04003835
Cary Clark682c58d2018-05-16 07:07:07 -04003836<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003837int <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 -04003838</pre>
3839
Cary Clark777eede2018-11-09 16:04:58 -05003840Returns the number of <a href='undocumented#Glyph'>glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003841Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to count the <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04003842Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003843
3844### Parameters
3845
Cary Clark682c58d2018-05-16 07:07:07 -04003846<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003847 <td>character storage encoded with <a href='undocumented#SkTextEncoding'>SkTextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003848 </tr>
3849 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
3850 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04003851 </tr>
3852</table>
3853
3854### Return Value
3855
Cary Clark777eede2018-11-09 16:04:58 -05003856number 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 -04003857
3858### Example
3859
Cary Clarkf9603982018-07-17 08:20:27 -04003860<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04003861
3862#### Example Output
3863
3864~~~~
3865count = 5
3866~~~~
3867
3868</fiddle-embed></div>
3869
Cary Clark682c58d2018-05-16 07:07:07 -04003870<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003871
3872---
Cary Clark12799e12017-07-28 15:18:29 -04003873
Cary Clark682c58d2018-05-16 07:07:07 -04003874<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003875bool <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 -04003876</pre>
3877
Cary Clark777eede2018-11-09 16:04:58 -05003878Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index.
3879Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
Cary Clark09d80c02018-10-31 12:14:03 -04003880<a href='undocumented#SkTypeface'>SkTypeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003881
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003882If <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> is <a href='undocumented#kGlyphID_SkTextEncoding'>kGlyphID_SkTextEncoding</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003883returns true if all <a href='undocumented#Glyph'>glyph</a> indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
3884does 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 -04003885
Cary Clark777eede2018-11-09 16:04:58 -05003886Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04003887
3888### Parameters
3889
Cary Clark682c58d2018-05-16 07:07:07 -04003890<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003891 <td>array of characters or <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003892 </tr>
3893 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003894 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04003895 </tr>
3896</table>
3897
3898### Return Value
3899
Cary Clark777eede2018-11-09 16:04:58 -05003900true 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 -04003901
Cary Clark777eede2018-11-09 16:04:58 -05003902<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a <a href='undocumented#Glyph'>glyph</a> index
3903corresponding to the Unicode surrogate code <a href='SkPoint_Reference#Point'>point</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003904</div>
Cary Clark12799e12017-07-28 15:18:29 -04003905
3906#### Example Output
3907
3908~~~~
39090x00b0 == has char
39100xd800 != has char
3911~~~~
3912
Cary Clark12799e12017-07-28 15:18:29 -04003913### Example
3914
Cary Clark777eede2018-11-09 16:04:58 -05003915<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
3916that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003917</div>
Cary Clark12799e12017-07-28 15:18:29 -04003918
3919#### Example Output
3920
3921~~~~
39220x01ff == has glyph
39230x0000 != has glyph
39240xffff == has glyph
3925~~~~
3926
3927</fiddle-embed></div>
3928
3929### See Also
3930
Cary Clark682c58d2018-05-16 07:07:07 -04003931<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04003932
Cary Clark682c58d2018-05-16 07:07:07 -04003933<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003934
3935---
Cary Clark12799e12017-07-28 15:18:29 -04003936
Cary Clark682c58d2018-05-16 07:07:07 -04003937<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003938void <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 -04003939</pre>
3940
Cary Clark777eede2018-11-09 16:04:58 -05003941Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
3942<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
3943Uses the <a href='undocumented#SkTypeface'>SkTypeface</a>, but is unaffected
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003944by <a href='undocumented#SkTextEncoding'>SkTextEncoding</a>; the <a href='#SkPaint_glyphsToUnichars_text'>text</a> values returned are equivalent to <a href='undocumented#kUTF32_SkTextEncoding'>kUTF32_SkTextEncoding</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003945
Cary Clarkcb6bef02018-11-29 12:05:25 -05003946Only supported on platforms that use FreeType as the <a href='SkFont_Reference#Font_Engine'>font engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003947
3948### Parameters
3949
Cary Clark682c58d2018-05-16 07:07:07 -04003950<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clarkcb6bef02018-11-29 12:05:25 -05003951 <td>array of indices into <a href='SkFont_Reference#Font'>font</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003952 </tr>
3953 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003954 <td>length of <a href='undocumented#Glyph'>glyph</a> array</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003955 </tr>
3956 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003957 <td>storage for character codes, one per <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003958 </tr>
3959</table>
3960
3961### Example
3962
Cary Clark777eede2018-11-09 16:04:58 -05003963<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 -05003964</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003965
Cary Clarka90ea222018-10-16 10:30:28 -04003966<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003967
Cary Clark682c58d2018-05-16 07:07:07 -04003968<a name='SkPaint_measureText'></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 Clarkcb6bef02018-11-29 12:05:25 -05003973<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 -04003974</pre>
3975
Cary Clark3aca39d2018-10-23 14:44:05 -04003976Returns the advance width of <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04003977The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003978Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</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>,
Cary Clark777eede2018-11-09 16:04:58 -05003979and <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
3980<a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
3981Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
3982The 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 -04003983
3984### Parameters
3985
Cary Clark682c58d2018-05-16 07:07:07 -04003986<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003987 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003988 </tr>
3989 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003990 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003991 </tr>
3992 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
3993 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003994 </tr>
3995</table>
3996
3997### Return Value
3998
3999advance width or height
4000
4001### Example
4002
Cary Clark83647062018-07-18 16:21:51 -04004003<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004004
Cary Clark682c58d2018-05-16 07:07:07 -04004005<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05004006
Cary Clarka90ea222018-10-16 10:30:28 -04004007---
4008
Cary Clark682c58d2018-05-16 07:07:07 -04004009<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004010<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 -04004011</pre>
4012
Cary Clark3aca39d2018-10-23 14:44:05 -04004013Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004014The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004015Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</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>,
Cary Clark777eede2018-11-09 16:04:58 -05004016and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04004017Does 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 -04004018
4019### Parameters
4020
Cary Clark682c58d2018-05-16 07:07:07 -04004021<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004022 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004023 </tr>
4024 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004025 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004026 </tr>
4027</table>
4028
4029### Return Value
4030
4031advance width or height
4032
4033### Example
4034
4035<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4036
4037#### Example Output
4038
4039~~~~
4040default width = 5
4041double width = 10
4042~~~~
4043
4044</fiddle-embed></div>
4045
Cary Clark682c58d2018-05-16 07:07:07 -04004046<a name='SkPaint_breakText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004047
4048---
Cary Clark12799e12017-07-28 15:18:29 -04004049
Cary Clark682c58d2018-05-16 07:07:07 -04004050<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004051size_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,
Cary Clarkcb6bef02018-11-29 12:05:25 -05004052 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr)const
Cary Clark12799e12017-07-28 15:18:29 -04004053</pre>
4054
Cary Clark777eede2018-11-09 16:04:58 -05004055Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4056The <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 -04004057Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004058Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004059Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</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>,
Cary Clark777eede2018-11-09 16:04:58 -05004060and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04004061Does 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 -04004062
4063### Parameters
4064
Cary Clark682c58d2018-05-16 07:07:07 -04004065<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004066 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004067 </tr>
4068 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004069 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004070 </tr>
4071 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004072 <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 -04004073 </tr>
4074 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004075 <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 -04004076 </tr>
4077</table>
4078
4079### Return Value
4080
Cary Clark777eede2018-11-09 16:04:58 -05004081bytes 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 -04004082
4083### Example
4084
Cary Clark777eede2018-11-09 16:04:58 -05004085<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "Breakfast" shows desired width, shorter than available characters.
4086<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 -05004087</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004088
Cary Clark682c58d2018-05-16 07:07:07 -04004089<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004090
4091---
Cary Clark12799e12017-07-28 15:18:29 -04004092
Cary Clark682c58d2018-05-16 07:07:07 -04004093<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004094int <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 -04004095</pre>
4096
Cary Clark777eede2018-11-09 16:04:58 -05004097Retrieves 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
4098the <a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4099Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4100If <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.
4101if <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.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004102Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</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>,
Cary Clark777eede2018-11-09 16:04:58 -05004103and <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 -04004104Does 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 -05004105Does 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 -04004106
4107### Parameters
4108
Cary Clark682c58d2018-05-16 07:07:07 -04004109<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004110 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004111 </tr>
4112 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004113 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004114 </tr>
4115 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004116 <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 -04004117 </tr>
4118 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004119 <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 -04004120 </tr>
4121</table>
4122
4123### Return Value
4124
Cary Clark777eede2018-11-09 16:04:58 -05004125<a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004126
4127### Example
4128
Cary Clark777eede2018-11-09 16:04:58 -05004129<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.
4130The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004131</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004132
Cary Clarka90ea222018-10-16 10:30:28 -04004133<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004134
Cary Clark777eede2018-11-09 16:04:58 -05004135<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 -04004136
Cary Clark682c58d2018-05-16 07:07:07 -04004137<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004138
4139---
Cary Clark12799e12017-07-28 15:18:29 -04004140
Cary Clark682c58d2018-05-16 07:07:07 -04004141<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004142void <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 -04004143</pre>
4144
Cary Clark777eede2018-11-09 16:04:58 -05004145Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004146Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</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>,
Cary Clark777eede2018-11-09 16:04:58 -05004147and <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>.
4148All 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>.
4149Uses <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 -04004150
4151### Parameters
4152
Cary Clark682c58d2018-05-16 07:07:07 -04004153<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004154 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004155 </tr>
4156 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4157 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4158 </tr>
4159 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004160 <td>x-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004161 </tr>
4162 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004163 <td>y-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004164 </tr>
4165 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004166 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004167 </tr>
4168</table>
4169
4170### Example
4171
Cary Clark777eede2018-11-09 16:04:58 -05004172<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
4173the offset location. The result is rendered with one draw call.
Cary Clark1a8d7622018-03-05 13:26:16 -05004174</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004175
Cary Clark682c58d2018-05-16 07:07:07 -04004176<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004177
4178---
Cary Clark12799e12017-07-28 15:18:29 -04004179
Cary Clark682c58d2018-05-16 07:07:07 -04004180<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004181void <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 -04004182</pre>
4183
Cary Clark777eede2018-11-09 16:04:58 -05004184Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004185Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</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>,
Cary Clark777eede2018-11-09 16:04:58 -05004186and <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>.
4187All 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>.
4188Uses <a href='#SkPaint_getPosTextPath_pos'>pos</a> array to position <a href='#SkPaint_getPosTextPath_path'>path</a>.
4189<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 -04004190
4191### Parameters
4192
Cary Clark682c58d2018-05-16 07:07:07 -04004193<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004194 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004195 </tr>
4196 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4197 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4198 </tr>
4199 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004200 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004201 </tr>
4202 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004203 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004204 </tr>
4205</table>
4206
4207### Example
4208
Cary Clark777eede2018-11-09 16:04:58 -05004209<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 -05004210</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004211
Cary Clarka90ea222018-10-16 10:30:28 -04004212<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004213
Cary Clark777eede2018-11-09 16:04:58 -05004214<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
4215of <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
4216underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004217
Cary Clark682c58d2018-05-16 07:07:07 -04004218<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004219
4220---
Cary Clark12799e12017-07-28 15:18:29 -04004221
Cary Clark682c58d2018-05-16 07:07:07 -04004222<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004223int <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,
Cary Clarkcb6bef02018-11-29 12:05:25 -05004224 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004225</pre>
4226
Cary Clark777eede2018-11-09 16:04:58 -05004227Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
4228<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.
4229The 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 -04004230the <a href='undocumented#String'>string</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004231Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</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>,
Cary Clark777eede2018-11-09 16:04:58 -05004232and <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>.
4233Uses <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 +00004234
Cary Clark777eede2018-11-09 16:04:58 -05004235Pass 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 +00004236
Cary Clark777eede2018-11-09 16:04:58 -05004237<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004238
4239### Parameters
4240
Cary Clark682c58d2018-05-16 07:07:07 -04004241<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004242 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004243 </tr>
4244 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
4245 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
4246 </tr>
4247 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004248 <td>x-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004249 </tr>
4250 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004251 <td>y-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004252 </tr>
4253 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004254 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004255 </tr>
4256 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4257 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004258 </tr>
4259</table>
4260
4261### Return Value
4262
4263number of intersections; may be zero
4264
Cary Clarke9c5a152018-11-21 11:45:57 -05004265<div>Underline uses intercepts to draw on either side of the <a href='undocumented#Glyph'>glyph</a> Descender.
4266</div>
Cary Clark12799e12017-07-28 15:18:29 -04004267
Cary Clark682c58d2018-05-16 07:07:07 -04004268<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004269
4270---
Cary Clark12799e12017-07-28 15:18:29 -04004271
Cary Clark682c58d2018-05-16 07:07:07 -04004272<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004273int <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[],
Cary Clarkcb6bef02018-11-29 12:05:25 -05004274 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004275</pre>
4276
Cary Clark777eede2018-11-09 16:04:58 -05004277Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
4278<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.
4279The 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 -04004280the <a href='undocumented#String'>string</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004281Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</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>,
Cary Clark777eede2018-11-09 16:04:58 -05004282and <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>.
4283Uses <a href='#SkPaint_getPosTextIntercepts_pos'>pos</a> array to position <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004284
Cary Clark777eede2018-11-09 16:04:58 -05004285Pass 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 +00004286
Cary Clark777eede2018-11-09 16:04:58 -05004287<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004288
4289### Parameters
4290
Cary Clark682c58d2018-05-16 07:07:07 -04004291<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004292 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004293 </tr>
4294 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
4295 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
4296 </tr>
4297 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004298 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004299 </tr>
4300 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004301 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004302 </tr>
4303 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4304 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004305 </tr>
4306</table>
4307
4308### Return Value
4309
Cary Clarka523d2d2017-08-30 08:58:10 -04004310number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004311
Cary Clarke9c5a152018-11-21 11:45:57 -05004312<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.
4313</div>
Cary Clark12799e12017-07-28 15:18:29 -04004314
Cary Clark682c58d2018-05-16 07:07:07 -04004315<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004316
4317---
Cary Clark12799e12017-07-28 15:18:29 -04004318
Cary Clark682c58d2018-05-16 07:07:07 -04004319<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004320int <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,
Cary Clarkcb6bef02018-11-29 12:05:25 -05004321 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004322</pre>
4323
Cary Clark777eede2018-11-09 16:04:58 -05004324Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
4325<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.
4326The 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 -04004327the <a href='undocumented#String'>string</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004328Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</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>,
Cary Clark777eede2018-11-09 16:04:58 -05004329and <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>.
4330Uses <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 +00004331
Cary Clark777eede2018-11-09 16:04:58 -05004332Pass 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 +00004333
Cary Clark777eede2018-11-09 16:04:58 -05004334<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004335
4336### Parameters
4337
Cary Clark682c58d2018-05-16 07:07:07 -04004338<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004339 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004340 </tr>
4341 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
4342 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
4343 </tr>
4344 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004345 <td>positions of each <a href='undocumented#Glyph'>glyph</a> on x-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004346 </tr>
4347 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004348 <td>position of each <a href='undocumented#Glyph'>glyph</a> on y-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004349 </tr>
4350 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004351 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004352 </tr>
4353 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4354 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004355 </tr>
4356</table>
4357
4358### Return Value
4359
4360number of intersections; may be zero
4361
Cary Clarke9c5a152018-11-21 11:45:57 -05004362<div><a href='undocumented#Text'>Text</a> intercepts do not take stroke thickness into consideration.
4363</div>
Cary Clark12799e12017-07-28 15:18:29 -04004364
Cary Clark682c58d2018-05-16 07:07:07 -04004365<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004366
4367---
Cary Clark12799e12017-07-28 15:18:29 -04004368
Cary Clark682c58d2018-05-16 07:07:07 -04004369<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004370int <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 -04004371</pre>
4372
Cary Clark777eede2018-11-09 16:04:58 -05004373Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
4374<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.
4375The 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 -04004376the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004377Uses <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
4378and <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 +00004379Uses run array to position <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004380
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004381<a href='undocumented#SkTextEncoding'>SkTextEncoding</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 -05004382
Cary Clark777eede2018-11-09 16:04:58 -05004383Pass 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 +00004384
Cary Clark777eede2018-11-09 16:04:58 -05004385<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004386
4387### Parameters
4388
Cary Clark682c58d2018-05-16 07:07:07 -04004389<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004390 <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 -04004391 </tr>
4392 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004393 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004394 </tr>
4395 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4396 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004397 </tr>
4398</table>
4399
4400### Return Value
4401
4402number of intersections; may be zero
4403
4404### Example
4405
skia-bookmaker53079c32018-11-25 04:03:02 +00004406<div><fiddle-embed name="728ea9089f233a71a1062e364b8c73fa"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004407
Cary Clark682c58d2018-05-16 07:07:07 -04004408<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004409
4410---
Cary Clark12799e12017-07-28 15:18:29 -04004411
Cary Clark682c58d2018-05-16 07:07:07 -04004412<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004413bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04004414</pre>
4415
Cary Clark777eede2018-11-09 16:04:58 -05004416Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing;
4417otherwise, the <a href='SkPaint_Reference#SkPaint'>SkPaint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004418
Cary Clark777eede2018-11-09 16:04:58 -05004419Returns true if, for example, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> combined with <a href='SkColor_Reference#Alpha'>alpha</a> computes a
4420new <a href='SkColor_Reference#Alpha'>alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004421
4422### Return Value
4423
Cary Clark777eede2018-11-09 16:04:58 -05004424true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004425
4426### Example
4427
Cary Clark83647062018-07-18 16:21:51 -04004428<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04004429
4430#### Example Output
4431
4432~~~~
4433initial nothing to draw: false
4434blend dst nothing to draw: true
4435blend src over nothing to draw: false
4436alpha 0 nothing to draw: true
4437~~~~
4438
4439</fiddle-embed></div>
4440
Cary Clarka90ea222018-10-16 10:30:28 -04004441<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05004442