blob: 55c6de43f89fd184be3a7e05668318d28fa54681 [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;
skia-bookmaker28ce5f22018-12-03 07:11:50 +0000149 <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const;
Cary Clark777eede2018-11-09 16:04:58 -0500150 int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength,
151 <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[]) const;
152 bool <a href='#SkPaint_containsText'>containsText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const;
153 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;
154 int <a href='#SkPaint_countText'>countText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) 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, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const;
156 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length) const;
157 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,
158 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const;
159 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[],
160 <a href='SkRect_Reference#SkRect'>SkRect</a> bounds[] = nullptr) const;
161 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,
162 <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const;
163 void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length,
164 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 -0500165 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,
166 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
167 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[],
168 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
169 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[],
170 <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 -0500171 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],
172 <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
Cary Clark777eede2018-11-09 16:04:58 -0500173 bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const;
Cary Clark61313f32018-10-08 14:57:48 -0400174};
Cary Clarkcb6bef02018-11-29 12:05:25 -0500175
Cary Clark61313f32018-10-08 14:57:48 -0400176</pre>
177
Cary Clark777eede2018-11-09 16:04:58 -0500178<a href='SkPaint_Reference#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='SkPaint_Reference#Paint'>Paint</a> collects all
179options 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 -0400180
Cary Clark777eede2018-11-09 16:04:58 -0500181Various options apply to <a href='undocumented#Text'>text</a>, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -0400182
Cary Clark777eede2018-11-09 16:04:58 -0500183Some options may not be implemented on all platforms; in these cases, setting
184the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
185functionality; 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 -0400186
Cary Clark777eede2018-11-09 16:04:58 -0500187<a href='SkPaint_Reference#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
188pipeline and multiple pipeline stages may be affected by a single <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400189
Cary Clark777eede2018-11-09 16:04:58 -0500190<a href='SkPaint_Reference#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
191algorithms that alter the drawing geometry, <a href='SkColor_Reference#Color'>color</a>, and transparency. For instance,
192<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 -0400193
Cary Clark777eede2018-11-09 16:04:58 -0500194The 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>
195to affect it. The implementation is free to defer computations associated with the
196<a href='SkPaint_Reference#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
197<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>
198is set in <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400199
Cary Clarkcb6bef02018-11-29 12:05:25 -0500200<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 -0500201Multiple colors are drawn either by using multiple paints or with objects like
202<a href='undocumented#Shader'>Shader</a> attached to <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400203
Cary Clark682c58d2018-05-16 07:07:07 -0400204<a name='SkPaint_empty_constructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400205
206---
Cary Clark12799e12017-07-28 15:18:29 -0400207
Cary Clark682c58d2018-05-16 07:07:07 -0400208<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500209<a href='#SkPaint_empty_constructor'>SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400210</pre>
211
Cary Clark777eede2018-11-09 16:04:58 -0500212Constructs <a href='SkPaint_Reference#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400213
214| attribute | default value |
215| --- | --- |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500216| <a href='#Paint_Anti_Alias'>Anti_Alias</a> | false |
217| <a href='#Blend_Mode'>Blend_Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a> |
218| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK_ColorBLACK</a> |
219| <a href='#Color_Alpha'>Color_Alpha</a> | 255 |
220| <a href='#Color_Filter'>Color_Filter</a> | nullptr |
221| Dither | false |
222| <a href='#Draw_Looper'>Draw_Looper</a> | nullptr |
223| <a href='#Paint_Fake_Bold'>Fake_Bold</a> | false |
224| <a href='#Filter_Quality'>Filter_Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
225| <a href='#Paint_Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> | false |
226| <a href='#Paint_Automatic_Hinting'>Automatic_Hinting</a> | false |
227| <a href='#Paint_Full_Hinting_Spacing'>Full_Hinting_Spacing</a> | false |
Cary Clarkabaffd82018-11-15 08:25:12 -0500228| Hinting | <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500229| <a href='#Image_Filter'>Image_Filter</a> | nullptr |
230| <a href='#Paint_LCD_Text'>LCD_Text</a> | false |
231| <a href='#Paint_Linear_Text'>Linear_Text</a> | false |
232| <a href='#Paint_Miter_Limit'>Miter_Limit</a> | 4 |
233| <a href='#Mask_Filter'>Mask_Filter</a> | nullptr |
234| <a href='#Path_Effect'>Path_Effect</a> | nullptr |
Cary Clark682c58d2018-05-16 07:07:07 -0400235| <a href='undocumented#Shader'>Shader</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500236| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill_Style</a> |
237| <a href='#Paint_Text_Encoding'>Text_Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a> |
238| <a href='#Paint_Text_Scale_X'>Text_Scale_X</a> | 1 |
239| <a href='#Paint_Text_Size'>Text_Size</a> | 12 |
240| <a href='#Paint_Text_Skew_X'>Text_Skew_X</a> | 0 |
Cary Clark682c58d2018-05-16 07:07:07 -0400241| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500242| <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> |
243| <a href='#Paint_Stroke_Join'>Stroke_Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter_Join</a> |
244| <a href='#Paint_Stroke_Width'>Stroke_Width</a> | 0 |
245| <a href='#Paint_Subpixel_Text'>Subpixel_Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400246
Cary Clark777eede2018-11-09 16:04:58 -0500247The 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
248<a href='SkPaint_Reference#Paint'>paint</a> default values. The overrides may be included in "SkUserConfig.h" or predefined by the
249build system.
Cary Clark12799e12017-07-28 15:18:29 -0400250
251### Return Value
252
Cary Clark77b3f3a2018-11-07 14:59:03 -0500253default initialized <a href='SkPaint_Reference#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400254
255### Example
256
257<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
258
Cary Clark682c58d2018-05-16 07:07:07 -0400259<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400260
261---
Cary Clark12799e12017-07-28 15:18:29 -0400262
Cary Clark682c58d2018-05-16 07:07:07 -0400263<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500264<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 -0400265</pre>
266
Cary Clark09d80c02018-10-31 12:14:03 -0400267Makes 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 -0500268<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
269between 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 -0400270their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400271
Cary Clark09d80c02018-10-31 12:14:03 -0400272The 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 -0500273<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> cannot be modified after they are created.
274This 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 -0400275
276### Parameters
277
Cary Clark682c58d2018-05-16 07:07:07 -0400278<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
279 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400280 </tr>
281</table>
282
283### Return Value
284
Cary Clark77b3f3a2018-11-07 14:59:03 -0500285shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400286
287### Example
288
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000289<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400290
291#### Example Output
292
293~~~~
294SK_ColorRED == paint1.getColor()
295SK_ColorBLUE == paint2.getColor()
296~~~~
297
298</fiddle-embed></div>
299
Cary Clark682c58d2018-05-16 07:07:07 -0400300<a name='SkPaint_move_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400301
302---
Cary Clark12799e12017-07-28 15:18:29 -0400303
Cary Clark682c58d2018-05-16 07:07:07 -0400304<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500305<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 -0400306</pre>
307
Cary Clarkd0530ba2017-09-14 11:25:39 -0400308Implements a move constructor to avoid increasing the reference counts
Cary Clark77b3f3a2018-11-07 14:59:03 -0500309of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400310
Cary Clark777eede2018-11-09 16:04:58 -0500311After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400312
313### Parameters
314
Cary Clark682c58d2018-05-16 07:07:07 -0400315<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
316 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400317 </tr>
318</table>
319
320### Return Value
321
Cary Clark77b3f3a2018-11-07 14:59:03 -0500322content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400323
324### Example
325
Cary Clark83647062018-07-18 16:21:51 -0400326<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -0400327
328#### Example Output
329
330~~~~
331path effect unique: true
332~~~~
333
334</fiddle-embed></div>
335
Cary Clark682c58d2018-05-16 07:07:07 -0400336<a name='SkPaint_reset'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400337
338---
Cary Clark12799e12017-07-28 15:18:29 -0400339
Cary Clark682c58d2018-05-16 07:07:07 -0400340<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500341void <a href='#SkPaint_reset'>reset()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400342</pre>
343
Cary Clark777eede2018-11-09 16:04:58 -0500344Sets all <a href='SkPaint_Reference#SkPaint'>SkPaint</a> contents to their initial values. This is equivalent to replacing
345<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 -0400346
347### Example
348
349<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
350
351#### Example Output
352
353~~~~
354paint1 == paint2
355~~~~
356
357</fiddle-embed></div>
358
Cary Clark682c58d2018-05-16 07:07:07 -0400359<a name='SkPaint_destructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400360
361---
Cary Clark12799e12017-07-28 15:18:29 -0400362
Cary Clark682c58d2018-05-16 07:07:07 -0400363<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500364<a href='#SkPaint_destructor'>~SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400365</pre>
366
Cary Clark777eede2018-11-09 16:04:58 -0500367Decreases <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>,
368<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
369objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400370
Cary Clarka90ea222018-10-16 10:30:28 -0400371<a name='Management'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400372
Cary Clark682c58d2018-05-16 07:07:07 -0400373<a name='SkPaint_copy_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400374
375---
Cary Clark12799e12017-07-28 15:18:29 -0400376
Cary Clark682c58d2018-05-16 07:07:07 -0400377<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500378<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 -0400379</pre>
380
Cary Clark09d80c02018-10-31 12:14:03 -0400381Makes 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 -0500382<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
383between 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 -0400384prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark777eede2018-11-09 16:04:58 -0500385resulting count is zero. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
386are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400387
388### Parameters
389
Cary Clark682c58d2018-05-16 07:07:07 -0400390<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
391 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400392 </tr>
393</table>
394
395### Return Value
396
Cary Clark77b3f3a2018-11-07 14:59:03 -0500397content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400398
399### Example
400
401<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
402
403#### Example Output
404
405~~~~
406SK_ColorRED == paint1.getColor()
407SK_ColorRED == paint2.getColor()
408~~~~
409
410</fiddle-embed></div>
411
Cary Clark682c58d2018-05-16 07:07:07 -0400412<a name='SkPaint_move_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400413
414---
Cary Clark12799e12017-07-28 15:18:29 -0400415
Cary Clark682c58d2018-05-16 07:07:07 -0400416<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500417<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 -0400418</pre>
419
Cary Clark777eede2018-11-09 16:04:58 -0500420Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
421of 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 -0400422prior destination are decreased by one; those objects are deleted if the resulting count
423is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400424
Cary Clark777eede2018-11-09 16:04:58 -0500425After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400426
427### Parameters
428
Cary Clark682c58d2018-05-16 07:07:07 -0400429<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
430 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400431 </tr>
432</table>
433
434### Return Value
435
Cary Clark77b3f3a2018-11-07 14:59:03 -0500436content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400437
438### Example
439
Ravi Mistry874e22b2018-07-19 03:49:13 +0000440<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -0400441
442#### Example Output
443
444~~~~
445SK_ColorRED == paint2.getColor()
446~~~~
447
448</fiddle-embed></div>
449
Cary Clark682c58d2018-05-16 07:07:07 -0400450<a name='SkPaint_equal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400451
452---
Cary Clark12799e12017-07-28 15:18:29 -0400453
Cary Clark682c58d2018-05-16 07:07:07 -0400454<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500455bool <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 -0400456</pre>
457
Cary Clark777eede2018-11-09 16:04:58 -0500458Compares <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 -0400459if <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 -0500460<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 -0400461
462### Parameters
463
Cary Clark682c58d2018-05-16 07:07:07 -0400464<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500465 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400466 </tr>
467 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500468 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400469 </tr>
470</table>
471
472### Return Value
473
Cary Clark777eede2018-11-09 16:04:58 -0500474true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400475
476### Example
477
478<div><fiddle-embed name="7481a948e34672720337a631830586dd">
479
480#### Example Output
481
482~~~~
483paint1 == paint2
484paint1 != paint2
485~~~~
486
487</fiddle-embed></div>
488
Cary Clark06c20f32018-03-20 15:53:27 -0400489### See Also
490
Cary Clarkcb6bef02018-11-29 12:05:25 -0500491<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 -0400492
Cary Clark682c58d2018-05-16 07:07:07 -0400493<a name='SkPaint_notequal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400494
495---
Cary Clark12799e12017-07-28 15:18:29 -0400496
Cary Clark682c58d2018-05-16 07:07:07 -0400497<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500498bool <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 -0400499</pre>
500
Cary Clark777eede2018-11-09 16:04:58 -0500501Compares <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 -0400502if <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 -0500503<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 -0400504
505### Parameters
506
Cary Clark682c58d2018-05-16 07:07:07 -0400507<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500508 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400509 </tr>
510 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500511 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400512 </tr>
513</table>
514
515### Return Value
516
Cary Clark777eede2018-11-09 16:04:58 -0500517true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400518
519### Example
520
skia-bookmakera717ca92018-07-08 05:32:09 +0000521<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -0400522
523#### Example Output
524
525~~~~
526paint1 == paint2
527paint1 == paint2
528~~~~
529
530</fiddle-embed></div>
531
Cary Clark06c20f32018-03-20 15:53:27 -0400532### See Also
533
Cary Clarkcb6bef02018-11-29 12:05:25 -0500534<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 -0400535
Cary Clark682c58d2018-05-16 07:07:07 -0400536<a name='SkPaint_getHash'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400537
538---
Cary Clark12799e12017-07-28 15:18:29 -0400539
Cary Clark682c58d2018-05-16 07:07:07 -0400540<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500541uint32_t <a href='#SkPaint_getHash'>getHash</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400542</pre>
543
Cary Clark777eede2018-11-09 16:04:58 -0500544Returns a hash generated from <a href='SkPaint_Reference#SkPaint'>SkPaint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400545Identical hashes guarantee that the paints are
546equivalent, but differing hashes do not guarantee that the paints have differing
547contents.
548
Cary Clarkcb6bef02018-11-29 12:05:25 -0500549If <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 -0400550their hashes are also equal.
551
552The hash returned is platform and implementation specific.
553
554### Return Value
555
556a shallow hash
557
558### Example
559
Cary Clark83647062018-07-18 16:21:51 -0400560<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -0400561
562#### Example Output
563
564~~~~
565paint1 == paint2
566paint1.getHash() == paint2.getHash()
567~~~~
568
569</fiddle-embed></div>
570
Cary Clarka90ea222018-10-16 10:30:28 -0400571<a name='Hinting'></a>
572
Cary Clark682c58d2018-05-16 07:07:07 -0400573<a name='SkPaint_setHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400574
575---
Cary Clark12799e12017-07-28 15:18:29 -0400576
Cary Clark682c58d2018-05-16 07:07:07 -0400577<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500578void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400579</pre>
580
Cary Clark777eede2018-11-09 16:04:58 -0500581Sets level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400582Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400583
Cary Clark12799e12017-07-28 15:18:29 -0400584### Parameters
585
Cary Clark682c58d2018-05-16 07:07:07 -0400586<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
Cary Clark885f1072018-11-08 13:31:39 -0500587 <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 +0000588 </tr>
589</table>
590
Cary Clark885f1072018-11-08 13:31:39 -0500591<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 +0000592
593### Example
594
skia-bookmaker6894f222018-12-02 05:59:00 +0000595<div><fiddle-embed name="bb179ec5698ec1398ff18f3657ab73f7">
skia-bookmakere6c85752018-11-06 05:32:09 +0000596
597#### Example Output
598
599~~~~
600paint1 == paint2
601~~~~
602
603</fiddle-embed></div>
604
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500605<a name='SkPaint_getHinting'></a>
606
607---
608
609<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500610<a href='undocumented#SkFontHinting'>SkFontHinting</a> <a href='#SkPaint_getHinting'>getHinting</a>()const
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500611</pre>
612
613Returns level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
614
615### Return Value
616
Cary Clarkabaffd82018-11-15 08:25:12 -0500617one 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 -0500618
Cary Clarkabaffd82018-11-15 08:25:12 -0500619<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500620
Cary Clarkabaffd82018-11-15 08:25:12 -0500621### Example
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500622
Cary Clarkabaffd82018-11-15 08:25:12 -0500623<div><fiddle-embed name="b56b70c7ea2453c41bfa58b626953bed">
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500624
Cary Clarkabaffd82018-11-15 08:25:12 -0500625#### Example Output
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500626
Cary Clarkabaffd82018-11-15 08:25:12 -0500627~~~~
628SkFontHinting::kNormal == paint.getHinting()
629~~~~
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500630
Cary Clarkabaffd82018-11-15 08:25:12 -0500631</fiddle-embed></div>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500632
Cary Clarka90ea222018-10-16 10:30:28 -0400633<a name='Flags'></a>
634
635<a name='SkPaint_Flags'></a>
636
Cary Clark12799e12017-07-28 15:18:29 -0400637---
638
Cary Clarka560c472017-11-27 10:44:06 -0500639<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400640 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clark777eede2018-11-09 16:04:58 -0500641 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
642 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
643 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
644 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
645 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
646 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
647 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
648 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
649 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400650 };
Cary Clarkcb6bef02018-11-29 12:05:25 -0500651
Cary Clark12799e12017-07-28 15:18:29 -0400652</pre>
653
Cary Clark682c58d2018-05-16 07:07:07 -0400654The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
Cary Clark777eede2018-11-09 16:04:58 -0500655The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
656with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a>.
657All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
658multiple settings at once.
Cary Clark12799e12017-07-28 15:18:29 -0400659
660### Constants
661
Cary Clark682c58d2018-05-16 07:07:07 -0400662<table style='border-collapse: collapse; width: 62.5em'>
663 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
664<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
665<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
666 <tr style='background-color: #f0f0f0; '>
667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
668 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
669 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400670mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400671 </tr>
672 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400673 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
674 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
676mask for setting Dither</td>
677 </tr>
678 <tr style='background-color: #f0f0f0; '>
679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
680 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
681 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
682mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -0400683 </tr>
684 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400685 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
686 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
687 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
688mask for setting Linear_Text</td>
689 </tr>
690 <tr style='background-color: #f0f0f0; '>
691 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
692 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
693 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
694mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400695 </tr>
696 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400697 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
698 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
700mask for setting LCD_Text</td>
701 </tr>
702 <tr style='background-color: #f0f0f0; '>
703 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
704 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
705 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
706mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400707 </tr>
708 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400709 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
710 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
711 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
712mask for setting Automatic_Hinting</td>
713 </tr>
714 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400715 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
716 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
717 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -0500718mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use
Cary Clark77b3f3a2018-11-07 14:59:03 -0500719</td>
Cary Clark12799e12017-07-28 15:18:29 -0400720 </tr>
Cary Clark777eede2018-11-09 16:04:58 -0500721<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark682c58d2018-05-16 07:07:07 -0400722</table>
Cary Clark12799e12017-07-28 15:18:29 -0400723
Cary Clark682c58d2018-05-16 07:07:07 -0400724<a name='SkPaint_getFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400725
726---
Cary Clark12799e12017-07-28 15:18:29 -0400727
Cary Clark682c58d2018-05-16 07:07:07 -0400728<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500729uint32_t <a href='#SkPaint_getFlags'>getFlags</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400730</pre>
731
Cary Clark777eede2018-11-09 16:04:58 -0500732Returns <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
733bit, 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 -0400734
735### Return Value
736
Cary Clark09d80c02018-10-31 12:14:03 -0400737zero, 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 -0400738
739### Example
740
741<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
742
743#### Example Output
744
745~~~~
746(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
747~~~~
748
749</fiddle-embed></div>
750
Cary Clark682c58d2018-05-16 07:07:07 -0400751<a name='SkPaint_setFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400752
753---
Cary Clark12799e12017-07-28 15:18:29 -0400754
Cary Clark682c58d2018-05-16 07:07:07 -0400755<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500756void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400757</pre>
758
Cary Clark777eede2018-11-09 16:04:58 -0500759Replaces <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.
760All <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 -0400761
762### Parameters
763
Cary Clark682c58d2018-05-16 07:07:07 -0400764<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500765 <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 -0400766 </tr>
767</table>
768
769### Example
770
771<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
772
773#### Example Output
774
775~~~~
776paint.isAntiAlias()
777paint.isDither()
778~~~~
779
780</fiddle-embed></div>
781
Cary Clarka90ea222018-10-16 10:30:28 -0400782<a name='Anti_Alias'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400783
Cary Clarka90ea222018-10-16 10:30:28 -0400784---
Cary Clark08895c42018-02-01 09:37:32 -0500785
Cary Clark777eede2018-11-09 16:04:58 -0500786<a href='#Paint_Anti_Alias'>Anti_Alias</a> drawing approximates partial <a href='undocumented#Pixel'>pixel</a> coverage with transparency.
787If <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.
788If <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 -0400789
Cary Clark777eede2018-11-09 16:04:58 -0500790The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
791passing 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 -0400792
Cary Clark777eede2018-11-09 16:04:58 -0500793<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
794active <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 -0400795
Cary Clark777eede2018-11-09 16:04:58 -0500796A platform may only support <a href='#Paint_Anti_Alias'>Anti_Aliased</a> drawing. Some GPU-backed platforms use
797<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 -0400798<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400799
Cary Clark777eede2018-11-09 16:04:58 -0500800The 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 -0400801
Cary Clark777eede2018-11-09 16:04:58 -0500802<a href='#Paint_Anti_Alias'>Anti_Alias</a> is disabled by default.
803<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>
804at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400805
806### Example
807
Cary Clark777eede2018-11-09 16:04:58 -0500808<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.
809A blue <a href='undocumented#Line'>line</a> draws only where the <a href='undocumented#Pixel'>pixel</a> centers are contained.
810The <a href='undocumented#Line'>lines</a> are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
811<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500812</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400813
Cary Clark682c58d2018-05-16 07:07:07 -0400814<a name='SkPaint_isAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400815
816---
Cary Clark12799e12017-07-28 15:18:29 -0400817
Cary Clark682c58d2018-05-16 07:07:07 -0400818<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500819bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400820</pre>
821
Cary Clark777eede2018-11-09 16:04:58 -0500822Returns 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 -0400823
Cary Clark777eede2018-11-09 16:04:58 -0500824Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400825
826### Return Value
827
Cary Clark777eede2018-11-09 16:04:58 -0500828<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400829
830### Example
831
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000832<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -0400833
834#### Example Output
835
836~~~~
837paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
838paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
839~~~~
840
841</fiddle-embed></div>
842
Cary Clark682c58d2018-05-16 07:07:07 -0400843<a name='SkPaint_setAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400844
845---
Cary Clark12799e12017-07-28 15:18:29 -0400846
Cary Clark682c58d2018-05-16 07:07:07 -0400847<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500848void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -0400849</pre>
850
skia-bookmaker8be41962018-11-20 05:34:36 +0000851Requests, but does not require, that edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -0400852partial transparency.
853
Cary Clark777eede2018-11-09 16:04:58 -0500854Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
855Clears <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 -0400856
857### Parameters
858
Cary Clark682c58d2018-05-16 07:07:07 -0400859<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400860 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400861 </tr>
862</table>
863
864### Example
865
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000866<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -0400867
868#### Example Output
869
870~~~~
871paint1 == paint2
872~~~~
873
874</fiddle-embed></div>
875
Cary Clarka90ea222018-10-16 10:30:28 -0400876<a name='Dither'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400877
Cary Clarka90ea222018-10-16 10:30:28 -0400878---
Cary Clark08895c42018-02-01 09:37:32 -0500879
Cary Clark777eede2018-11-09 16:04:58 -0500880Dither increases fidelity by adjusting the <a href='SkColor_Reference#Color'>color</a> of adjacent pixels.
881This can help to smooth <a href='SkColor_Reference#Color'>color</a> transitions and reducing banding in gradients.
882Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
883and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
884and 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 -0400885
Cary Clark777eede2018-11-09 16:04:58 -0500886Dithering is always enabled for linear gradients drawing into
887<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>.
888Dither 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 -0400889<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 -0400890
Cary Clark777eede2018-11-09 16:04:58 -0500891Dither is disabled by default.
892Dither can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>
893at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400894
Cary Clark777eede2018-11-09 16:04:58 -0500895Some 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 -0400896
897### Example
898
Cary Clark777eede2018-11-09 16:04:58 -0500899<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested <a href='SkColor_Reference#Color'>color</a> by
900alternating nearby colors from <a href='undocumented#Pixel'>pixel</a> to <a href='undocumented#Pixel'>pixel</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -0500901</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400902
903### Example
904
Cary Clark777eede2018-11-09 16:04:58 -0500905<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to <a href='SkColor_Reference#Color'>color</a> to smooth gradients.
906Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kPlus'>kPlus</a> exaggerates the
907dither, making it easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500908</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400909
Cary Clarka90ea222018-10-16 10:30:28 -0400910### See Also
911
912Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
913
Cary Clark682c58d2018-05-16 07:07:07 -0400914<a name='SkPaint_isDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400915
916---
Cary Clark12799e12017-07-28 15:18:29 -0400917
Cary Clark682c58d2018-05-16 07:07:07 -0400918<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500919bool <a href='#SkPaint_isDither'>isDither</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400920</pre>
921
Cary Clark777eede2018-11-09 16:04:58 -0500922Returns 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 +0000923
Cary Clark777eede2018-11-09 16:04:58 -0500924Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400925
926### Return Value
927
Cary Clark777eede2018-11-09 16:04:58 -0500928<a href='#SkPaint_kDither_Flag'>kDither_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400929
930### Example
931
932<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
933
934#### Example Output
935
936~~~~
937paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
938paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
939~~~~
940
941</fiddle-embed></div>
942
Cary Clark682c58d2018-05-16 07:07:07 -0400943<a name='SkPaint_setDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400944
945---
Cary Clark12799e12017-07-28 15:18:29 -0400946
Cary Clark682c58d2018-05-16 07:07:07 -0400947<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500948void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -0400949</pre>
950
Cary Clark777eede2018-11-09 16:04:58 -0500951Requests, but does not require, to distribute <a href='SkColor_Reference#Color'>color</a> error.
Cary Clark12799e12017-07-28 15:18:29 -0400952
Cary Clark777eede2018-11-09 16:04:58 -0500953Sets <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
954Clears <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 -0400955
956### Parameters
957
Cary Clark682c58d2018-05-16 07:07:07 -0400958<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400959 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400960 </tr>
961</table>
962
963### Example
964
965<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
966
967#### Example Output
968
969~~~~
970paint1 == paint2
971~~~~
972
973</fiddle-embed></div>
974
975### See Also
976
Cary Clark682c58d2018-05-16 07:07:07 -0400977<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -0400978
Cary Clarka90ea222018-10-16 10:30:28 -0400979<a name='Device_Text'></a>
980
Cary Clark12799e12017-07-28 15:18:29 -0400981---
982
Cary Clark777eede2018-11-09 16:04:58 -0500983<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 -0400984
Cary Clark777eede2018-11-09 16:04:58 -0500985When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
986create a <a href='SkColor_Reference#Color'>color</a>, and relies
987on 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.
988<a href='#Paint_LCD_Text'>LCD_Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
989the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -0400990
Cary Clark777eede2018-11-09 16:04:58 -0500991<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.
992As the opaqueness
993of 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 -0400994
Cary Clark777eede2018-11-09 16:04:58 -0500995Either or both techniques can be enabled.
996<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> are clear by default.
997<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
998<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 -0400999
1000### Example
1001
Cary Clark777eede2018-11-09 16:04:58 -05001002<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>.
1003When <a href='#Paint_Subpixel_Text'>Subpixel_Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1004When <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 -05001005</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001006
Cary Clarka90ea222018-10-16 10:30:28 -04001007<a name='Linear_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001008
Cary Clark777eede2018-11-09 16:04:58 -05001009<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 -05001010If <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>.
1011If <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 -04001012
Cary Clark682c58d2018-05-16 07:07:07 -04001013<a name='SkPaint_isLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001014
1015---
Cary Clark12799e12017-07-28 15:18:29 -04001016
Cary Clark682c58d2018-05-16 07:07:07 -04001017<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001018bool <a href='#SkPaint_isLinearText'>isLinearText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001019</pre>
1020
Cary Clark777eede2018-11-09 16:04:58 -05001021Returns 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 -04001022
Cary Clark777eede2018-11-09 16:04:58 -05001023Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001024
1025### Return Value
1026
Cary Clark777eede2018-11-09 16:04:58 -05001027<a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001028
1029### Example
1030
1031<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1032
1033### See Also
1034
Cary Clarkabaffd82018-11-15 08:25:12 -05001035<a href='#SkPaint_setLinearText'>setLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001036
Cary Clark682c58d2018-05-16 07:07:07 -04001037<a name='SkPaint_setLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001038
1039---
Cary Clark12799e12017-07-28 15:18:29 -04001040
Cary Clark682c58d2018-05-16 07:07:07 -04001041<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001042void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001043</pre>
1044
skia-bookmaker8be41962018-11-20 05:34:36 +00001045Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> are converted to <a href='SkPath_Reference#SkPath'>SkPath</a>
1046before drawing and measuring.
Cary Clark777eede2018-11-09 16:04:58 -05001047By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001048
Cary Clark777eede2018-11-09 16:04:58 -05001049Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1050Clears <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 -04001051
1052### Parameters
1053
Cary Clark682c58d2018-05-16 07:07:07 -04001054<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001055 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001056 </tr>
1057</table>
1058
1059### Example
1060
Cary Clark83647062018-07-18 16:21:51 -04001061<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001062
1063### See Also
1064
Cary Clarkabaffd82018-11-15 08:25:12 -05001065<a href='#SkPaint_isLinearText'>isLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001066
Cary Clarka90ea222018-10-16 10:30:28 -04001067<a name='Subpixel_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001068
Cary Clark777eede2018-11-09 16:04:58 -05001069<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.
1070As the opaqueness
1071of 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 -04001072
Cary Clark682c58d2018-05-16 07:07:07 -04001073<a name='SkPaint_isSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001074
1075---
Cary Clark12799e12017-07-28 15:18:29 -04001076
Cary Clark682c58d2018-05-16 07:07:07 -04001077<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001078bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001079</pre>
1080
Cary Clark777eede2018-11-09 16:04:58 -05001081Returns 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 -04001082
Cary Clark777eede2018-11-09 16:04:58 -05001083Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001084
1085### Return Value
1086
Cary Clark777eede2018-11-09 16:04:58 -05001087<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001088
1089### Example
1090
1091<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1092
1093#### Example Output
1094
1095~~~~
1096paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1097paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1098~~~~
1099
1100</fiddle-embed></div>
1101
Cary Clark682c58d2018-05-16 07:07:07 -04001102<a name='SkPaint_setSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001103
1104---
Cary Clark12799e12017-07-28 15:18:29 -04001105
Cary Clark682c58d2018-05-16 07:07:07 -04001106<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001107void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001108</pre>
1109
Cary Clark777eede2018-11-09 16:04:58 -05001110Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001111
Cary Clark777eede2018-11-09 16:04:58 -05001112Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1113Clears <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 -04001114
1115### Parameters
1116
Cary Clark682c58d2018-05-16 07:07:07 -04001117<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001118 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001119 </tr>
1120</table>
1121
1122### Example
1123
1124<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1125
1126#### Example Output
1127
1128~~~~
1129paint1 == paint2
1130~~~~
1131
1132</fiddle-embed></div>
1133
Cary Clarka90ea222018-10-16 10:30:28 -04001134<a name='LCD_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001135
Cary Clark777eede2018-11-09 16:04:58 -05001136When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
1137create a <a href='SkColor_Reference#Color'>color</a>, and relies
1138on 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.
1139<a href='#Paint_LCD_Text'>LCD_Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
1140the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001141
Cary Clark682c58d2018-05-16 07:07:07 -04001142<a name='SkPaint_isLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001143
1144---
Cary Clark12799e12017-07-28 15:18:29 -04001145
Cary Clark682c58d2018-05-16 07:07:07 -04001146<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001147bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001148</pre>
1149
Cary Clark777eede2018-11-09 16:04:58 -05001150Returns 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 -04001151
Cary Clark777eede2018-11-09 16:04:58 -05001152Returns 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 -04001153
1154### Return Value
1155
Cary Clark777eede2018-11-09 16:04:58 -05001156<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001157
1158### Example
1159
skia-bookmakera391c722018-07-09 05:28:19 +00001160<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001161
1162#### Example Output
1163
1164~~~~
1165paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1166paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1167~~~~
1168
1169</fiddle-embed></div>
1170
Cary Clark682c58d2018-05-16 07:07:07 -04001171<a name='SkPaint_setLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001172
1173---
Cary Clark12799e12017-07-28 15:18:29 -04001174
Cary Clark682c58d2018-05-16 07:07:07 -04001175<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001176void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001177</pre>
1178
Cary Clark777eede2018-11-09 16:04:58 -05001179Requests, 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 -04001180
Cary Clark777eede2018-11-09 16:04:58 -05001181Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1182Clears <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 -04001183
1184### Parameters
1185
Cary Clark682c58d2018-05-16 07:07:07 -04001186<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001187 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001188 </tr>
1189</table>
1190
1191### Example
1192
skia-bookmakere0a458f2018-07-16 05:29:00 +00001193<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001194
1195#### Example Output
1196
1197~~~~
1198paint1 == paint2
1199~~~~
1200
1201</fiddle-embed></div>
1202
Cary Clarka90ea222018-10-16 10:30:28 -04001203<a name='Font_Embedded_Bitmaps'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001204
Cary Clarka90ea222018-10-16 10:30:28 -04001205---
Cary Clark08895c42018-02-01 09:37:32 -05001206
Cary Clark777eede2018-11-09 16:04:58 -05001207<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>.
1208<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 -05001209in a <a href='SkFont_Reference#Font'>font</a> if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001210
Cary Clark777eede2018-11-09 16:04:58 -05001211FreeType 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
1212the outline <a href='undocumented#Glyph'>glyph</a> if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> is clear.
1213Windows may select the <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> but is not required to do so.
1214<a href='#OS_X'>OS_X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001215
Cary Clark777eede2018-11-09 16:04:58 -05001216<a href='#Paint_Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> is disabled by default.
1217<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
1218<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001219
1220### Example
1221
Cary Clarka560c472017-11-27 10:44:06 -05001222<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001223<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001224 includes an embedded bitmap Glyph at odd font sizes. This example works
1225 on platforms that use FreeType as their Font_Engine.
1226 Windows may, but is not required to, return a bitmap glyph if
1227 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1228 bitmap.allocN32Pixels(30, 15);
1229 bitmap.eraseColor(0);
1230 SkCanvas offscreen(bitmap);
1231 SkPaint paint;
1232 paint.setAntiAlias(true);
1233 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001234 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001235 for (bool embedded : { false, true}) {
1236 paint.setEmbeddedBitmapText(embedded);
1237 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1238 }
1239 canvas->drawBitmap(bitmap, 0, 0);
1240 canvas->scale(10, 10);
1241 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001242
Cary Clarka560c472017-11-27 10:44:06 -05001243</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001244
Cary Clark682c58d2018-05-16 07:07:07 -04001245<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001246
1247---
Cary Clark12799e12017-07-28 15:18:29 -04001248
Cary Clark682c58d2018-05-16 07:07:07 -04001249<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001250bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001251</pre>
1252
Cary Clarkcb6bef02018-11-29 12:05:25 -05001253Returns 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 -04001254
Cary Clark777eede2018-11-09 16:04:58 -05001255Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001256
1257### Return Value
1258
Cary Clark777eede2018-11-09 16:04:58 -05001259<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001260
1261### Example
1262
1263<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1264
1265#### Example Output
1266
1267~~~~
1268paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1269paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1270~~~~
1271
1272</fiddle-embed></div>
1273
Cary Clark682c58d2018-05-16 07:07:07 -04001274<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001275
1276---
Cary Clark12799e12017-07-28 15:18:29 -04001277
Cary Clark682c58d2018-05-16 07:07:07 -04001278<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001279void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001280</pre>
1281
Cary Clark777eede2018-11-09 16:04:58 -05001282Requests, 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 -04001283
Cary Clark777eede2018-11-09 16:04:58 -05001284Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1285Clears <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 -04001286
1287### Parameters
1288
Cary Clark682c58d2018-05-16 07:07:07 -04001289<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001290 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001291 </tr>
1292</table>
1293
1294### Example
1295
1296<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1297
1298#### Example Output
1299
1300~~~~
1301paint1 == paint2
1302~~~~
1303
1304</fiddle-embed></div>
1305
Cary Clarka90ea222018-10-16 10:30:28 -04001306<a name='Automatic_Hinting'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001307
Cary Clarkabaffd82018-11-15 08:25:12 -05001308If 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 -05001309instructs the <a href='#Font_Manager'>Font_Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001310<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 -05001311<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001312
Cary Clark777eede2018-11-09 16:04:58 -05001313<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 -04001314
Cary Clark682c58d2018-05-16 07:07:07 -04001315<a name='SkPaint_isAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001316
1317---
Cary Clark12799e12017-07-28 15:18:29 -04001318
Cary Clark682c58d2018-05-16 07:07:07 -04001319<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001320bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001321</pre>
1322
Cary Clarkabaffd82018-11-15 08:25:12 -05001323Returns 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 -05001324<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.
1325If 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 -04001326
Cary Clark777eede2018-11-09 16:04:58 -05001327Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001328
1329### Return Value
1330
Cary Clark777eede2018-11-09 16:04:58 -05001331<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001332
1333### Example
1334
1335<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1336
1337#### Example Output
1338
1339~~~~
1340paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1341paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1342~~~~
1343
1344</fiddle-embed></div>
1345
1346### See Also
1347
Cary Clarkabaffd82018-11-15 08:25:12 -05001348<a href='#SkPaint_setAutohinted'>setAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001349
Cary Clark682c58d2018-05-16 07:07:07 -04001350<a name='SkPaint_setAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001351
1352---
Cary Clark12799e12017-07-28 15:18:29 -04001353
Cary Clark682c58d2018-05-16 07:07:07 -04001354<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001355void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001356</pre>
1357
Cary Clark09d80c02018-10-31 12:14:03 -04001358Sets whether to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001359If <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 -05001360and <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 -05001361<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 -05001362<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001363
Cary Clark09d80c02018-10-31 12:14:03 -04001364Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>font manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001365
Cary Clark777eede2018-11-09 16:04:58 -05001366Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1367Clears <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 -04001368
1369### Parameters
1370
Cary Clark682c58d2018-05-16 07:07:07 -04001371<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001372 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001373 </tr>
1374</table>
1375
1376### Example
1377
1378<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1379
1380### See Also
1381
Cary Clarkabaffd82018-11-15 08:25:12 -05001382<a href='#SkPaint_isAutohinted'>isAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001383
Cary Clarka90ea222018-10-16 10:30:28 -04001384<a name='Fake_Bold'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001385
Cary Clarka90ea222018-10-16 10:30:28 -04001386---
Cary Clark08895c42018-02-01 09:37:32 -05001387
Cary Clarkcb6bef02018-11-29 12:05:25 -05001388<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
1389is not available. Skia does not provide <a href='SkFont_Reference#Font'>font</a> substitution; it is up to the client to find the
1390bold <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 -04001391
Cary Clarkcb6bef02018-11-29 12:05:25 -05001392Use <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 -05001393is not available.
Cary Clark12799e12017-07-28 15:18:29 -04001394
Cary Clark777eede2018-11-09 16:04:58 -05001395A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clarkcb6bef02018-11-29 12:05:25 -05001396the <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 -05001397by 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 -04001398
Cary Clark777eede2018-11-09 16:04:58 -05001399<a href='#Paint_Fake_Bold'>Fake_Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001400
1401### Example
1402
1403<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1404
Cary Clark682c58d2018-05-16 07:07:07 -04001405<a name='SkPaint_isFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001406
1407---
Cary Clark12799e12017-07-28 15:18:29 -04001408
Cary Clark682c58d2018-05-16 07:07:07 -04001409<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001410bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001411</pre>
1412
Cary Clark77b3f3a2018-11-07 14:59:03 -05001413Returns 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 -04001414from outlines.
1415
Cary Clark777eede2018-11-09 16:04:58 -05001416Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001417
1418### Return Value
1419
Cary Clark777eede2018-11-09 16:04:58 -05001420<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001421
1422### Example
1423
1424<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1425
1426#### Example Output
1427
1428~~~~
1429paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1430paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1431~~~~
1432
1433</fiddle-embed></div>
1434
Cary Clark682c58d2018-05-16 07:07:07 -04001435<a name='SkPaint_setFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001436
1437---
Cary Clark12799e12017-07-28 15:18:29 -04001438
Cary Clark682c58d2018-05-16 07:07:07 -04001439<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001440void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001441</pre>
1442
Cary Clark777eede2018-11-09 16:04:58 -05001443Increases <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 -04001444
Cary Clark777eede2018-11-09 16:04:58 -05001445Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1446Clears <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 -04001447
1448### Parameters
1449
Cary Clark682c58d2018-05-16 07:07:07 -04001450<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001451 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001452 </tr>
1453</table>
1454
1455### Example
1456
1457<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1458
1459#### Example Output
1460
1461~~~~
1462paint1 == paint2
1463~~~~
1464
1465</fiddle-embed></div>
1466
Cary Clarka90ea222018-10-16 10:30:28 -04001467<a name='Full_Hinting_Spacing'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001468
Cary Clarkabaffd82018-11-15 08:25:12 -05001469if 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 -05001470spacing by the difference of the hinted and unhinted <a href='#Left_Side_Bearing'>Left_Side_Bearing</a> and
1471<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
1472FreeType as their <a href='#Font_Engine'>Font_Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001473
Cary Clark777eede2018-11-09 16:04:58 -05001474<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 -05001475a 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 -04001476
Cary Clarka90ea222018-10-16 10:30:28 -04001477<a name='Filter_Quality_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001478
Cary Clarka90ea222018-10-16 10:30:28 -04001479---
Cary Clark08895c42018-02-01 09:37:32 -05001480
Cary Clark777eede2018-11-09 16:04:58 -05001481<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.
1482A lower <a href='#Filter_Quality'>Filter_Quality</a> draws faster, but has less fidelity.
1483A higher <a href='#Filter_Quality'>Filter_Quality</a> draws slower, but looks better.
1484If the <a href='SkImage_Reference#Image'>image</a> is drawn without scaling, the <a href='#Filter_Quality'>Filter_Quality</a> choice will not result
1485in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001486
Cary Clark777eede2018-11-09 16:04:58 -05001487<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 -04001488
1489<table> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001490 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmap'>drawBitmap</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001491 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001492 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmapRect'>drawBitmapRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001493 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001494 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImage'>drawImage</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001495 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001496 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImageRect'>drawImageRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001497 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001498</table>
1499
Cary Clark777eede2018-11-09 16:04:58 -05001500and 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 -04001501
Cary Clark777eede2018-11-09 16:04:58 -05001502<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 -04001503
1504### Example
1505
skia-bookmaker525f9a92018-05-03 06:27:39 +00001506<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001507
Cary Clark682c58d2018-05-16 07:07:07 -04001508<a name='SkPaint_getFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001509
1510---
Cary Clark12799e12017-07-28 15:18:29 -04001511
Cary Clark682c58d2018-05-16 07:07:07 -04001512<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001513<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001514</pre>
1515
Cary Clark777eede2018-11-09 16:04:58 -05001516Returns <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1517draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
Cary Clark12799e12017-07-28 15:18:29 -04001518
1519### Return Value
1520
Cary Clark682c58d2018-05-16 07:07:07 -04001521one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
Cary Clark09d80c02018-10-31 12:14:03 -04001522
Cary Clark682c58d2018-05-16 07:07:07 -04001523<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001524
1525### Example
1526
1527<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1528
1529#### Example Output
1530
1531~~~~
1532kNone_SkFilterQuality == paint.getFilterQuality()
1533~~~~
1534
1535</fiddle-embed></div>
1536
Cary Clark682c58d2018-05-16 07:07:07 -04001537<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001538
1539---
Cary Clark12799e12017-07-28 15:18:29 -04001540
Cary Clark682c58d2018-05-16 07:07:07 -04001541<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001542void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001543</pre>
1544
Cary Clark777eede2018-11-09 16:04:58 -05001545Sets <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1546draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
1547Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001548
1549### Parameters
1550
Cary Clark682c58d2018-05-16 07:07:07 -04001551<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001552 <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 -04001553 </tr>
1554</table>
1555
Cary Clark09d80c02018-10-31 12:14:03 -04001556<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
1557
Cary Clark12799e12017-07-28 15:18:29 -04001558### Example
1559
1560<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1561
1562#### Example Output
1563
1564~~~~
1565kHigh_SkFilterQuality == paint.getFilterQuality()
1566~~~~
1567
1568</fiddle-embed></div>
1569
1570### See Also
1571
Cary Clark77b3f3a2018-11-07 14:59:03 -05001572<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#Image_Scaling'>Image_Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001573
Cary Clarka90ea222018-10-16 10:30:28 -04001574<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001575
Cary Clarka90ea222018-10-16 10:30:28 -04001576---
Cary Clark12799e12017-07-28 15:18:29 -04001577
Cary Clarkab2621d2018-01-30 10:08:57 -05001578| name | description |
1579| --- | --- |
Cary Clark777eede2018-11-09 16:04:58 -05001580| <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> |
1581| <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 -04001582
Cary Clark777eede2018-11-09 16:04:58 -05001583<a href='SkColor_Reference#Color'>Color</a> specifies the red, blue, green, and <a href='#Color_Alpha'>Color_Alpha</a>
1584values used to draw a filled or stroked shape in a 32-bit value. Each component
1585occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1586All values in any combination are valid.
Cary Clarkab2621d2018-01-30 10:08:57 -05001587
Cary Clark777eede2018-11-09 16:04:58 -05001588<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
1589RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001590
Cary Clark777eede2018-11-09 16:04:58 -05001591The bit positions of <a href='#Color_Alpha'>Color_Alpha</a> and RGB are independent of the bit
1592positions on the output <a href='undocumented#Device'>device</a>, which may have more or fewer bits, and may have
1593a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001594
Cary Clark77b3f3a2018-11-07 14:59:03 -05001595| bit positions | <a href='#Color_Alpha'>Color_Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001596| --- | --- | --- | --- | --- |
1597| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1598
1599### Example
1600
Ravi Mistry874e22b2018-07-19 03:49:13 +00001601<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001602
Cary Clark682c58d2018-05-16 07:07:07 -04001603<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001604
1605---
Cary Clark12799e12017-07-28 15:18:29 -04001606
Cary Clark682c58d2018-05-16 07:07:07 -04001607<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001608<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001609</pre>
1610
Cary Clark777eede2018-11-09 16:04:58 -05001611Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, packed into 32 bits.
1612Use 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
1613a <a href='SkColor_Reference#Color'>color</a> component.
Cary Clark12799e12017-07-28 15:18:29 -04001614
1615### Return Value
1616
Cary Clark777eede2018-11-09 16:04:58 -05001617<a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001618
1619### Example
1620
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001621<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001622
1623#### Example Output
1624
1625~~~~
1626Yellow is 100% red, 100% green, and 0% blue.
1627~~~~
1628
1629</fiddle-embed></div>
1630
1631### See Also
1632
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001633<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1634
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001635<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001636
1637---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001638
1639<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001640<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>()const
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001641</pre>
1642
Cary Clark777eede2018-11-09 16:04:58 -05001643Retrieves <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 -04001644are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1645
1646### Return Value
1647
Cary Clark777eede2018-11-09 16:04:58 -05001648<a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001649
1650### Example
1651
1652<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1653
1654#### Example Output
1655
1656~~~~
1657Yellow is 100% red, 100% green, and 0% blue.
1658~~~~
1659
1660</fiddle-embed></div>
1661
1662### See Also
1663
1664<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001665
Cary Clark682c58d2018-05-16 07:07:07 -04001666<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001667
1668---
Cary Clark12799e12017-07-28 15:18:29 -04001669
Cary Clark682c58d2018-05-16 07:07:07 -04001670<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -05001671void <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 -04001672</pre>
1673
Cary Clark777eede2018-11-09 16:04:58 -05001674Sets <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,
1675<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 -04001676
1677### Parameters
1678
Cary Clark682c58d2018-05-16 07:07:07 -04001679<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001680 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001681 </tr>
1682</table>
1683
1684### Example
1685
skia-bookmaker233c6522018-07-04 05:33:26 +00001686<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001687
1688#### Example Output
1689
1690~~~~
1691green1 == green2
1692~~~~
1693
1694</fiddle-embed></div>
1695
1696### See Also
1697
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001698<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>
1699
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001700<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001701
1702---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001703
1704<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001705void <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 -04001706</pre>
1707
Cary Clark777eede2018-11-09 16:04:58 -05001708Sets <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
1709<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
1710the <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 -04001711sRGB <a href='undocumented#Color_Space'>color space</a>.
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001712
1713### Parameters
1714
1715<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001716 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA</td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001717 </tr>
1718 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001719 <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 -04001720 </tr>
1721</table>
1722
1723### Example
1724
1725<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
1726
1727#### Example Output
1728
1729~~~~
1730green1 == green2
1731~~~~
1732
1733</fiddle-embed></div>
1734
1735### See Also
1736
1737<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 -04001738
Cary Clarka90ea222018-10-16 10:30:28 -04001739<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001740
Cary Clark777eede2018-11-09 16:04:58 -05001741<a href='#Color_Alpha'>Color_Alpha</a> sets the transparency independent of RGB: red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04001742
Cary Clark682c58d2018-05-16 07:07:07 -04001743<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001744
1745---
Cary Clark12799e12017-07-28 15:18:29 -04001746
Cary Clark682c58d2018-05-16 07:07:07 -04001747<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001748uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001749</pre>
1750
Cary Clark777eede2018-11-09 16:04:58 -05001751Retrieves <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 -04001752
1753### Return Value
1754
Cary Clark777eede2018-11-09 16:04:58 -05001755<a href='SkColor_Reference#Alpha'>alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001756
1757### Example
1758
Cary Clark83647062018-07-18 16:21:51 -04001759<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04001760
1761#### Example Output
1762
1763~~~~
1764255 == paint.getAlpha()
1765~~~~
1766
1767</fiddle-embed></div>
1768
Cary Clark682c58d2018-05-16 07:07:07 -04001769<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001770
1771---
Cary Clark12799e12017-07-28 15:18:29 -04001772
Cary Clark682c58d2018-05-16 07:07:07 -04001773<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001774void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04001775</pre>
1776
Cary Clark777eede2018-11-09 16:04:58 -05001777Replaces <a href='SkColor_Reference#Alpha'>alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04001778unchanged. An out of range value triggers an assert in the debug
Cary Clark777eede2018-11-09 16:04:58 -05001779build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
1780<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 -04001781fully opaque.
1782
1783### Parameters
1784
Cary Clark682c58d2018-05-16 07:07:07 -04001785<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001786 <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 -04001787 </tr>
1788</table>
1789
1790### Example
1791
Ravi Mistry874e22b2018-07-19 03:49:13 +00001792<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04001793
1794#### Example Output
1795
1796~~~~
17970x44112233 == paint.getColor()
1798~~~~
1799
1800</fiddle-embed></div>
1801
Cary Clark682c58d2018-05-16 07:07:07 -04001802<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001803
1804---
Cary Clark12799e12017-07-28 15:18:29 -04001805
Cary Clark682c58d2018-05-16 07:07:07 -04001806<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001807void <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 -04001808</pre>
1809
Cary Clark777eede2018-11-09 16:04:58 -05001810Sets <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.
1811The <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 -04001812
1813### Parameters
1814
Cary Clark682c58d2018-05-16 07:07:07 -04001815<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001816 <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 -04001817 </tr>
1818 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001819 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001820 </tr>
1821 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001822 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001823 </tr>
1824 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001825 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04001826 </tr>
1827</table>
1828
1829### Example
1830
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001831<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04001832
1833#### Example Output
1834
1835~~~~
1836transRed1 == transRed2
1837~~~~
1838
1839</fiddle-embed></div>
1840
1841### See Also
1842
Cary Clark682c58d2018-05-16 07:07:07 -04001843<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001844
Cary Clarka90ea222018-10-16 10:30:28 -04001845<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001846
Cary Clarka90ea222018-10-16 10:30:28 -04001847---
Cary Clark08895c42018-02-01 09:37:32 -05001848
Cary Clark777eede2018-11-09 16:04:58 -05001849<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
1850Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001851
Cary Clarka90ea222018-10-16 10:30:28 -04001852<a name='Style_Fill'></a>
1853
Cary Clark777eede2018-11-09 16:04:58 -05001854Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kFill_Style'>kFill_Style</a> to fill the shape.
1855The fill covers the area inside the geometry for most shapes.
Cary Clark12799e12017-07-28 15:18:29 -04001856
Cary Clarka90ea222018-10-16 10:30:28 -04001857<a name='Style_Stroke'></a>
1858
Cary Clark777eede2018-11-09 16:04:58 -05001859Set <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 -04001860
Cary Clark777eede2018-11-09 16:04:58 -05001861The stroke covers the area described by following the shape edge with a pen or brush of
1862<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>.
1863The area covered where the shape turns a corner is described by <a href='#Paint_Stroke_Join'>Stroke_Join</a>.
1864The 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
1865may 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 -04001866
Cary Clarka90ea222018-10-16 10:30:28 -04001867### See Also
Cary Clark12799e12017-07-28 15:18:29 -04001868
Cary Clark77b3f3a2018-11-07 14:59:03 -05001869<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 -04001870
1871<a name='Hairline'></a>
1872
1873---
1874
Cary Clark777eede2018-11-09 16:04:58 -05001875<a href='#Paint_Stroke_Width'>Stroke_Width</a> of zero has a special meaning and switches drawing to use Hairline.
1876Hairline draws the thinnest continuous frame. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is clear, adjacent pixels
1877flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04001878
Cary Clark777eede2018-11-09 16:04:58 -05001879<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
1880two <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
1881<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
1882GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
1883while stroking.
Cary Clark12799e12017-07-28 15:18:29 -04001884
Cary Clarka90ea222018-10-16 10:30:28 -04001885### See Also
1886
Cary Clark77b3f3a2018-11-07 14:59:03 -05001887<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 -04001888
1889<a name='SkPaint_Style'></a>
1890
1891---
Cary Clark12799e12017-07-28 15:18:29 -04001892
Cary Clarka560c472017-11-27 10:44:06 -05001893<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001894 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04001895 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
1896 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
1897 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04001898 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05001899
Cary Clarka90ea222018-10-16 10:30:28 -04001900</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04001901
Cary Clarka90ea222018-10-16 10:30:28 -04001902<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04001903 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 -05001904</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001905
Cary Clark777eede2018-11-09 16:04:58 -05001906Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
1907The stroke and fill
1908share 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 -04001909
Cary Clark777eede2018-11-09 16:04:58 -05001910Use <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> to avoid hitting the same pixels twice with a stroke draw and
1911a fill draw.
Cary Clark12799e12017-07-28 15:18:29 -04001912
1913### Constants
1914
Cary Clark682c58d2018-05-16 07:07:07 -04001915<table style='border-collapse: collapse; width: 62.5em'>
1916 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1917<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1918<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1919 <tr style='background-color: #f0f0f0; '>
1920 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
1921 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1922 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001923Applies 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>.
1924<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
1925<a href='#SkPaint_kFill_Style'>kFill_Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
1926The <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,
1927and to create an unfilled hole inside the shape.
1928<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 -05001929</td>
Cary Clark12799e12017-07-28 15:18:29 -04001930 </tr>
1931 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001932 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
1933 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1934 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001935Applies 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>.
1936<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,
1937and ignore the set <a href='#SkPaint_Style'>Style</a>.
1938The stroke construction is unaffected by the <a href='#Path_Fill_Type'>Path_Fill_Type</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001939</td>
1940 </tr>
1941 <tr style='background-color: #f0f0f0; '>
1942 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
1943 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1944 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001945Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#RRect'>Round_Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
1946<a href='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>,
1947and the set <a href='#Path_Fill_Type'>Path_Fill_Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05001948</td>
Cary Clark12799e12017-07-28 15:18:29 -04001949 </tr>
1950 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001951 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
1952 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1953 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001954May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05001955</td>
Cary Clark12799e12017-07-28 15:18:29 -04001956 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001957</table>
Cary Clark12799e12017-07-28 15:18:29 -04001958
Cary Clark682c58d2018-05-16 07:07:07 -04001959<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001960
1961---
Cary Clark12799e12017-07-28 15:18:29 -04001962
Cary Clark682c58d2018-05-16 07:07:07 -04001963<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001964<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001965</pre>
1966
Cary Clark80247e52018-07-11 16:18:41 -04001967Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001968
1969### Return Value
1970
Cary Clark09d80c02018-10-31 12:14:03 -04001971one 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 -04001972
1973### Example
1974
1975<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
1976
1977#### Example Output
1978
1979~~~~
1980SkPaint::kFill_Style == paint.getStyle()
1981~~~~
1982
1983</fiddle-embed></div>
1984
1985### See Also
1986
Cary Clark682c58d2018-05-16 07:07:07 -04001987<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04001988
Cary Clark682c58d2018-05-16 07:07:07 -04001989<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001990
1991---
Cary Clark12799e12017-07-28 15:18:29 -04001992
Cary Clark682c58d2018-05-16 07:07:07 -04001993<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001994void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04001995</pre>
1996
1997Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark777eede2018-11-09 16:04:58 -05001998Has 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 -04001999
2000### Parameters
2001
Cary Clark682c58d2018-05-16 07:07:07 -04002002<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002003 <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 -04002004 </tr>
2005</table>
2006
2007### Example
2008
2009<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2010
2011### See Also
2012
Cary Clark682c58d2018-05-16 07:07:07 -04002013<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002014
Cary Clarka90ea222018-10-16 10:30:28 -04002015<a name='Stroke_Width'></a>
2016
Cary Clark12799e12017-07-28 15:18:29 -04002017---
2018
Cary Clark777eede2018-11-09 16:04:58 -05002019<a href='#Paint_Stroke_Width'>Stroke_Width</a> sets the width for stroking. The width is the thickness
2020of 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
2021set 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 -04002022
Cary Clark777eede2018-11-09 16:04:58 -05002023When width is greater than zero, the stroke encompasses as many pixels partially
2024or fully as needed. When the width equals zero, the <a href='SkPaint_Reference#Paint'>paint</a> enables hairlines;
2025the stroke is always one <a href='undocumented#Pixel'>pixel</a> wide.
Cary Clark12799e12017-07-28 15:18:29 -04002026
Cary Clark777eede2018-11-09 16:04:58 -05002027The stroke dimensions are scaled by the <a href='SkCanvas_Reference#Canvas_Matrix'>canvas matrix</a>, but Hairline stroke
2028remains one <a href='undocumented#Pixel'>pixel</a> wide regardless of scaling.
Cary Clark12799e12017-07-28 15:18:29 -04002029
Cary Clark777eede2018-11-09 16:04:58 -05002030The default width for the <a href='SkPaint_Reference#Paint'>paint</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04002031
2032### Example
2033
Cary Clark777eede2018-11-09 16:04:58 -05002034<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
2035<a href='undocumented#Line'>line</a> and the platform implementation.
Cary Clark1a8d7622018-03-05 13:26:16 -05002036</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002037
Cary Clark682c58d2018-05-16 07:07:07 -04002038<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002039
2040---
Cary Clark12799e12017-07-28 15:18:29 -04002041
Cary Clark682c58d2018-05-16 07:07:07 -04002042<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002043<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002044</pre>
2045
Cary Clark777eede2018-11-09 16:04:58 -05002046Returns the thickness of the pen used by <a href='SkPaint_Reference#SkPaint'>SkPaint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002047outline the shape.
2048
2049### Return Value
2050
Cary Clark09d80c02018-10-31 12:14:03 -04002051zero for hairline, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002052
2053### Example
2054
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002055<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002056
2057#### Example Output
2058
2059~~~~
20600 == paint.getStrokeWidth()
2061~~~~
2062
2063</fiddle-embed></div>
2064
Cary Clark682c58d2018-05-16 07:07:07 -04002065<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002066
2067---
Cary Clark12799e12017-07-28 15:18:29 -04002068
Cary Clark682c58d2018-05-16 07:07:07 -04002069<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002070void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002071</pre>
2072
Cary Clark777eede2018-11-09 16:04:58 -05002073Sets the thickness of the pen used by the <a href='SkPaint_Reference#Paint'>paint</a> to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002074outline the shape.
Cary Clark777eede2018-11-09 16:04:58 -05002075Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002076
2077### Parameters
2078
Cary Clark682c58d2018-05-16 07:07:07 -04002079<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002080 <td>zero thickness for hairline; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002081 </tr>
2082</table>
2083
2084### Example
2085
2086<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2087
2088#### Example Output
2089
2090~~~~
20915 == paint.getStrokeWidth()
2092~~~~
2093
2094</fiddle-embed></div>
2095
Cary Clarka90ea222018-10-16 10:30:28 -04002096<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002097
Cary Clarka90ea222018-10-16 10:30:28 -04002098---
Cary Clark08895c42018-02-01 09:37:32 -05002099
Cary Clark777eede2018-11-09 16:04:58 -05002100<a href='#Paint_Miter_Limit'>Miter_Limit</a> specifies the maximum miter length,
2101relative to the <a href='#Stroke_Width'>stroke width</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002102
Cary Clark777eede2018-11-09 16:04:58 -05002103<a href='#Paint_Miter_Limit'>Miter_Limit</a> is used when the <a href='#Paint_Stroke_Join'>Stroke_Join</a>
2104is 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>
2105or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002106
Cary Clark777eede2018-11-09 16:04:58 -05002107If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>
2108is replaced with <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002109
Cary Clark777eede2018-11-09 16:04:58 -05002110<a href='#Paint_Miter_Limit'>Miter_Limit</a> can be computed from the corner angle using:
Cary Clark77b3f3a2018-11-07 14:59:03 -05002111<code><a href='#Miter_Limit'>miter limit</a> = 1 / sin ( angle / 2 )</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002112
Cary Clark777eede2018-11-09 16:04:58 -05002113<a href='#Paint_Miter_Limit'>Miter_Limit</a> default value is 4.
2114The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults_MiterLimit</a>
2115in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002116
Cary Clark777eede2018-11-09 16:04:58 -05002117Here are some miter limits and the angles that triggers them.
Cary Clark12799e12017-07-28 15:18:29 -04002118
Cary Clark77b3f3a2018-11-07 14:59:03 -05002119| <a href='#Miter_Limit'>miter limit</a> | angle in degrees |
Cary Clark12799e12017-07-28 15:18:29 -04002120| --- | --- |
2121| 10 | 11.48 |
2122| 9 | 12.76 |
2123| 8 | 14.36 |
2124| 7 | 16.43 |
2125| 6 | 19.19 |
2126| 5 | 23.07 |
2127| 4 | 28.96 |
2128| 3 | 38.94 |
2129| 2 | 60 |
2130| 1 | 180 |
2131
2132### Example
2133
Cary Clarka619d452018-07-16 08:12:01 -04002134<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark77b3f3a2018-11-07 14:59:03 -05002135When the <a href='#Miter_Limit'>miter limit</a> is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002136by a bevel join.
2137</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002138
Cary Clark682c58d2018-05-16 07:07:07 -04002139<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002140
2141---
Cary Clark12799e12017-07-28 15:18:29 -04002142
Cary Clark682c58d2018-05-16 07:07:07 -04002143<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002144<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002145</pre>
2146
Cary Clark80247e52018-07-11 16:18:41 -04002147Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002148
2149### Return Value
2150
Cary Clark77b3f3a2018-11-07 14:59:03 -05002151zero and greater miter limit
Cary Clark12799e12017-07-28 15:18:29 -04002152
2153### Example
2154
2155<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2156
2157#### Example Output
2158
2159~~~~
2160default miter limit == 4
2161~~~~
2162
2163</fiddle-embed></div>
2164
2165### See Also
2166
Cary Clark77b3f3a2018-11-07 14:59:03 -05002167<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 -04002168
Cary Clark682c58d2018-05-16 07:07:07 -04002169<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002170
2171---
Cary Clark12799e12017-07-28 15:18:29 -04002172
Cary Clark682c58d2018-05-16 07:07:07 -04002173<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002174void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002175</pre>
2176
Cary Clark80247e52018-07-11 16:18:41 -04002177Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002178Valid values are zero and greater.
Cary Clark777eede2018-11-09 16:04:58 -05002179Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002180
2181### Parameters
2182
Cary Clark682c58d2018-05-16 07:07:07 -04002183<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002184 <td>zero and greater <a href='#Miter_Limit'>miter limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002185 </tr>
2186</table>
2187
2188### Example
2189
skia-bookmakera717ca92018-07-08 05:32:09 +00002190<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002191
2192#### Example Output
2193
2194~~~~
2195default miter limit == 8
2196~~~~
2197
2198</fiddle-embed></div>
2199
2200### See Also
2201
Cary Clark77b3f3a2018-11-07 14:59:03 -05002202<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 -04002203
Cary Clarka90ea222018-10-16 10:30:28 -04002204<a name='Stroke_Cap'></a>
2205
2206<a name='SkPaint_Cap'></a>
2207
Cary Clark12799e12017-07-28 15:18:29 -04002208---
2209
Cary Clarka560c472017-11-27 10:44:06 -05002210<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002211 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002212 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2213 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2214 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002215 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2216 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002217 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05002218
Cary Clarka90ea222018-10-16 10:30:28 -04002219</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002220
Cary Clarka90ea222018-10-16 10:30:28 -04002221<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002222 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 -05002223</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002224
Cary Clark777eede2018-11-09 16:04:58 -05002225<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 -04002226
2227### Constants
2228
Cary Clark682c58d2018-05-16 07:07:07 -04002229<table style='border-collapse: collapse; width: 62.5em'>
2230 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2231<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2232<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2233 <tr style='background-color: #f0f0f0; '>
2234 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2235 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2236 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2237Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002238</td>
Cary Clark12799e12017-07-28 15:18:29 -04002239 </tr>
2240 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002241 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2242 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2243 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002244Adds a <a href='undocumented#Circle'>circle</a> with a diameter equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2245and end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002246</td>
Cary Clark12799e12017-07-28 15:18:29 -04002247 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002248 <tr style='background-color: #f0f0f0; '>
2249 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2250 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2251 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002252Adds a square with sides equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2253and end. The square sides are parallel to the initial and final direction
2254of the stroke.
Cary Clark1a8d7622018-03-05 13:26:16 -05002255</td>
Cary Clark12799e12017-07-28 15:18:29 -04002256 </tr>
2257 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002258 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2259 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2260 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002261Equivalent to the largest value for <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002262</td>
2263 </tr>
2264 <tr style='background-color: #f0f0f0; '>
2265 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2266 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2267 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002268<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 -05002269</td>
Cary Clark12799e12017-07-28 15:18:29 -04002270 </tr>
2271 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002272 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2273 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2274 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002275May be used to verify that <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002276</td>
Cary Clark12799e12017-07-28 15:18:29 -04002277 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002278</table>
Cary Clark12799e12017-07-28 15:18:29 -04002279
Cary Clark777eede2018-11-09 16:04:58 -05002280Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2281follows 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 -04002282
Cary Clark777eede2018-11-09 16:04:58 -05002283If 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
2284visible beginning and end.
Cary Clark12799e12017-07-28 15:18:29 -04002285
Cary Clark777eede2018-11-09 16:04:58 -05002286<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 -04002287
Cary Clark777eede2018-11-09 16:04:58 -05002288<a href='#SkPaint_kButt_Cap'>kButt_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> is not drawn.
2289<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>
2290at the <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPoint_Reference#Point'>point</a>.
2291<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
2292<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 -04002293
Cary Clark777eede2018-11-09 16:04:58 -05002294<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 -04002295
Cary Clark12799e12017-07-28 15:18:29 -04002296### Example
2297
Cary Clark2ade9972017-11-02 17:49:34 -04002298<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002299
Cary Clark682c58d2018-05-16 07:07:07 -04002300<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002301
2302---
Cary Clark12799e12017-07-28 15:18:29 -04002303
Cary Clark682c58d2018-05-16 07:07:07 -04002304<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002305<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002306</pre>
2307
Cary Clark80247e52018-07-11 16:18:41 -04002308Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002309
2310### Return Value
2311
Cary Clark09d80c02018-10-31 12:14:03 -04002312one 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 -04002313
2314### Example
2315
2316<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2317
2318#### Example Output
2319
2320~~~~
2321kButt_Cap == default stroke cap
2322~~~~
2323
2324</fiddle-embed></div>
2325
2326### See Also
2327
Cary Clark77b3f3a2018-11-07 14:59:03 -05002328<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002329
Cary Clark682c58d2018-05-16 07:07:07 -04002330<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002331
2332---
Cary Clark12799e12017-07-28 15:18:29 -04002333
Cary Clark682c58d2018-05-16 07:07:07 -04002334<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002335void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002336</pre>
2337
Cary Clark80247e52018-07-11 16:18:41 -04002338Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002339
2340### Parameters
2341
Cary Clark682c58d2018-05-16 07:07:07 -04002342<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002343 <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 -04002344 </tr>
2345</table>
2346
Cary Clark777eede2018-11-09 16:04:58 -05002347has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid
Cary Clark09d80c02018-10-31 12:14:03 -04002348
Cary Clark12799e12017-07-28 15:18:29 -04002349### Example
2350
2351<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2352
2353#### Example Output
2354
2355~~~~
2356kRound_Cap == paint.getStrokeCap()
2357~~~~
2358
2359</fiddle-embed></div>
2360
2361### See Also
2362
Cary Clark77b3f3a2018-11-07 14:59:03 -05002363<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002364
Cary Clarka90ea222018-10-16 10:30:28 -04002365<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002366
Cary Clark777eede2018-11-09 16:04:58 -05002367<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 -04002368
Cary Clark777eede2018-11-09 16:04:58 -05002369Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2370follows 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 -04002371
Cary Clark777eede2018-11-09 16:04:58 -05002372If the <a href='SkPath_Overview#Contour'>contour</a> direction changes abruptly, because the tangent direction leading
2373to 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
2374the 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 -04002375
2376### Example
2377
Cary Clark2ade9972017-11-02 17:49:34 -04002378<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002379
Cary Clarka90ea222018-10-16 10:30:28 -04002380<a name='SkPaint_Join'></a>
2381
2382---
Cary Clark12799e12017-07-28 15:18:29 -04002383
Cary Clarka560c472017-11-27 10:44:06 -05002384<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002385 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04002386 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2387 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2388 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002389 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2390 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002391 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05002392
Cary Clarka90ea222018-10-16 10:30:28 -04002393</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002394
Cary Clarka90ea222018-10-16 10:30:28 -04002395<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002396 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 -05002397</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002398
Cary Clark777eede2018-11-09 16:04:58 -05002399<a href='#SkPaint_Join'>Join</a> specifies how corners are drawn when a shape is stroked. <a href='#SkPaint_Join'>Join</a>
2400affects the four corners of a stroked rectangle, and the connected segments in a
2401stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002402
Cary Clark777eede2018-11-09 16:04:58 -05002403Choose miter join to draw sharp corners. Choose round join to draw a <a href='undocumented#Circle'>circle</a> with a
2404radius equal to the <a href='#Stroke_Width'>stroke width</a> on top of the corner. Choose bevel join to minimally
2405connect the thick strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002406
Cary Clark777eede2018-11-09 16:04:58 -05002407The <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
2408not contain the actual join. For instance, a <a href='#Fill_Path'>fill path</a> constructed with round joins does
2409not necessarily include <a href='undocumented#Circle'>circles</a> at each connected segment.
Cary Clark12799e12017-07-28 15:18:29 -04002410
2411### Constants
2412
Cary Clark682c58d2018-05-16 07:07:07 -04002413<table style='border-collapse: collapse; width: 62.5em'>
2414 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2415<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2416<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2417 <tr style='background-color: #f0f0f0; '>
2418 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2419 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2420 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002421Extends the outside corner to the extent allowed by <a href='#Paint_Miter_Limit'>Miter_Limit</a>.
Cary Clark777eede2018-11-09 16:04:58 -05002422If 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 -05002423</td>
Cary Clark12799e12017-07-28 15:18:29 -04002424 </tr>
2425 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002426 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2427 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2428 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002429Adds 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 -04002430</td>
2431 </tr>
2432 <tr style='background-color: #f0f0f0; '>
2433 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2434 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2435 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2436Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002437</td>
Cary Clark12799e12017-07-28 15:18:29 -04002438 </tr>
2439 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002440 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2441 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2442 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2443equivalent to the largest value for Stroke_Join</td>
2444 </tr>
2445 <tr style='background-color: #f0f0f0; '>
2446 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2447 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2448 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002449<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 -05002450</td>
Cary Clark12799e12017-07-28 15:18:29 -04002451 </tr>
2452 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002453 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2454 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2455 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002456May be used to verify that <a href='#Paint_Stroke_Join'>Stroke_Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002457</td>
Cary Clark12799e12017-07-28 15:18:29 -04002458 </tr>
2459</table>
2460
2461### Example
2462
2463<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2464
2465### See Also
2466
Cary Clark682c58d2018-05-16 07:07:07 -04002467<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 -04002468
Cary Clark682c58d2018-05-16 07:07:07 -04002469<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002470
2471---
Cary Clark12799e12017-07-28 15:18:29 -04002472
Cary Clark682c58d2018-05-16 07:07:07 -04002473<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002474<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002475</pre>
2476
Cary Clark80247e52018-07-11 16:18:41 -04002477Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002478
2479### Return Value
2480
Cary Clark09d80c02018-10-31 12:14:03 -04002481one 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 -04002482
2483### Example
2484
Cary Clark7f644ec2018-07-19 10:50:44 -04002485<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002486
2487#### Example Output
2488
2489~~~~
2490kMiter_Join == default stroke join
2491~~~~
2492
2493</fiddle-embed></div>
2494
2495### See Also
2496
Cary Clark77b3f3a2018-11-07 14:59:03 -05002497<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002498
Cary Clark682c58d2018-05-16 07:07:07 -04002499<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002500
2501---
Cary Clark12799e12017-07-28 15:18:29 -04002502
Cary Clark682c58d2018-05-16 07:07:07 -04002503<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002504void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002505</pre>
2506
Cary Clark80247e52018-07-11 16:18:41 -04002507Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002508
2509### Parameters
2510
Cary Clark682c58d2018-05-16 07:07:07 -04002511<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002512 <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 -04002513 </tr>
2514</table>
2515
Cary Clark09d80c02018-10-31 12:14:03 -04002516otherwise, has no effect
2517
Cary Clark12799e12017-07-28 15:18:29 -04002518### Example
2519
2520<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2521
2522#### Example Output
2523
2524~~~~
2525kMiter_Join == paint.getStrokeJoin()
2526~~~~
2527
2528</fiddle-embed></div>
2529
2530### See Also
2531
Cary Clark77b3f3a2018-11-07 14:59:03 -05002532<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002533
Cary Clark12799e12017-07-28 15:18:29 -04002534### See Also
2535
Cary Clark77b3f3a2018-11-07 14:59:03 -05002536<a href='#Paint_Miter_Limit'>Miter_Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002537
Cary Clarka90ea222018-10-16 10:30:28 -04002538<a name='Fill_Path'></a>
2539
2540---
Cary Clark08895c42018-02-01 09:37:32 -05002541
Cary Clark777eede2018-11-09 16:04:58 -05002542<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 -04002543
Cary Clark777eede2018-11-09 16:04:58 -05002544If <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
2545replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2546destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002547
Cary Clark777eede2018-11-09 16:04:58 -05002548Fill <a href='SkPath_Reference#Path'>Path</a> can request the <a href='#Path_Effect'>Path_Effect</a> to restrict to a culling rectangle, but
2549the <a href='#Path_Effect'>Path_Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002550
Cary Clark777eede2018-11-09 16:04:58 -05002551If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
2552and <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>,
2553and <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 -04002554
Cary Clark777eede2018-11-09 16:04:58 -05002555Fill <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 -04002556
Cary Clark777eede2018-11-09 16:04:58 -05002557If 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>
2558returns false since Hairline has no filled equivalent.
Cary Clarka90ea222018-10-16 10:30:28 -04002559
2560### See Also
2561
Cary Clark77b3f3a2018-11-07 14:59:03 -05002562<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 -04002563
Cary Clark682c58d2018-05-16 07:07:07 -04002564<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002565
2566---
Cary Clark12799e12017-07-28 15:18:29 -04002567
Cary Clark682c58d2018-05-16 07:07:07 -04002568<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002569bool <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 -04002570</pre>
2571
Cary Clark09d80c02018-10-31 12:14:03 -04002572Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002573
2574### Parameters
2575
Cary Clark682c58d2018-05-16 07:07:07 -04002576<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002577 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002578 </tr>
2579 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002580 <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 -04002581 </tr>
2582 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002583 <td>optional limit passed to <a href='undocumented#SkPathEffect'>SkPathEffect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04002584 </tr>
2585 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002586 <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 -04002587 </tr>
2588</table>
2589
Cary Clark09d80c02018-10-31 12:14:03 -04002590to favor speed and <a href='undocumented#Size'>size</a>
2591
Cary Clark12799e12017-07-28 15:18:29 -04002592### Return Value
2593
Cary Clark777eede2018-11-09 16:04:58 -05002594true 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 -04002595
2596### Example
2597
Cary Clark777eede2018-11-09 16:04:58 -05002598<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.
2599At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
2600At 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 -05002601</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002602
Cary Clark682c58d2018-05-16 07:07:07 -04002603<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002604
Cary Clarka90ea222018-10-16 10:30:28 -04002605---
2606
Cary Clark682c58d2018-05-16 07:07:07 -04002607<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002608bool <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 -04002609</pre>
2610
Cary Clark09d80c02018-10-31 12:14:03 -04002611Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002612
Cary Clark777eede2018-11-09 16:04:58 -05002613Replaces <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>.
2614<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 -04002615
2616### Parameters
2617
Cary Clark682c58d2018-05-16 07:07:07 -04002618<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002619 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002620 </tr>
2621 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002622 <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 -04002623 </tr>
2624</table>
2625
2626### Return Value
2627
Cary Clark777eede2018-11-09 16:04:58 -05002628true 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 -04002629
2630### Example
2631
2632<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2633
Cary Clarka90ea222018-10-16 10:30:28 -04002634<a name='Shader_Methods'></a>
2635
Cary Clark12799e12017-07-28 15:18:29 -04002636---
2637
Cary Clark777eede2018-11-09 16:04:58 -05002638<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2639<a href='undocumented#Shader'>Shader</a> may be an <a href='SkImage_Reference#Image'>image</a>, a gradient, or a computed fill.
2640If <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 -04002641
Cary Clark777eede2018-11-09 16:04:58 -05002642<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>.
2643If <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
2644the fill.
Cary Clark12799e12017-07-28 15:18:29 -04002645
Cary Clark777eede2018-11-09 16:04:58 -05002646The 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 -04002647
2648### Example
2649
2650<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2651
Cary Clark777eede2018-11-09 16:04:58 -05002652If <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 -04002653
2654### Example
2655
skia-bookmaker525f9a92018-05-03 06:27:39 +00002656<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002657
Cary Clark682c58d2018-05-16 07:07:07 -04002658<a name='SkPaint_getShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002659
2660---
Cary Clark12799e12017-07-28 15:18:29 -04002661
Cary Clark682c58d2018-05-16 07:07:07 -04002662<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002663<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002664</pre>
2665
Cary Clark777eede2018-11-09 16:04:58 -05002666Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002667
Cary Clark09d80c02018-10-31 12:14:03 -04002668Does not alter <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002669
2670### Return Value
2671
Cary Clark777eede2018-11-09 16:04:58 -05002672<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002673
2674### Example
2675
2676<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2677
2678#### Example Output
2679
2680~~~~
2681nullptr == shader
2682nullptr != shader
2683~~~~
2684
2685</fiddle-embed></div>
2686
Cary Clark682c58d2018-05-16 07:07:07 -04002687<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002688
2689---
Cary Clark12799e12017-07-28 15:18:29 -04002690
Cary Clark682c58d2018-05-16 07:07:07 -04002691<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002692<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 -04002693</pre>
2694
Cary Clark777eede2018-11-09 16:04:58 -05002695Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002696
Cary Clark777eede2018-11-09 16:04:58 -05002697Increases <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002698
2699### Return Value
2700
Cary Clark777eede2018-11-09 16:04:58 -05002701<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002702
2703### Example
2704
2705<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2706
2707#### Example Output
2708
2709~~~~
2710shader unique: true
2711shader unique: false
2712~~~~
2713
2714</fiddle-embed></div>
2715
Cary Clark682c58d2018-05-16 07:07:07 -04002716<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002717
2718---
Cary Clark12799e12017-07-28 15:18:29 -04002719
Cary Clark682c58d2018-05-16 07:07:07 -04002720<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002721void <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 -04002722</pre>
2723
Cary Clark777eede2018-11-09 16:04:58 -05002724Sets optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002725
Cary Clark777eede2018-11-09 16:04:58 -05002726Sets <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>.
2727Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002728
2729### Parameters
2730
Cary Clark682c58d2018-05-16 07:07:07 -04002731<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002732 <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 -04002733 </tr>
2734</table>
2735
2736### Example
2737
skia-bookmakere0a458f2018-07-16 05:29:00 +00002738<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002739
Cary Clarka90ea222018-10-16 10:30:28 -04002740<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002741
Cary Clarka90ea222018-10-16 10:30:28 -04002742---
Cary Clark08895c42018-02-01 09:37:32 -05002743
Cary Clark777eede2018-11-09 16:04:58 -05002744<a href='#Color_Filter'>Color_Filter</a> alters the <a href='SkColor_Reference#Color'>color</a> used when drawing a shape.
2745<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.
2746If <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 -04002747
Cary Clark777eede2018-11-09 16:04:58 -05002748The 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 -04002749
2750### Example
2751
2752<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2753
Cary Clark682c58d2018-05-16 07:07:07 -04002754<a name='SkPaint_getColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002755
2756---
Cary Clark12799e12017-07-28 15:18:29 -04002757
Cary Clark682c58d2018-05-16 07:07:07 -04002758<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002759<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002760</pre>
2761
Cary Clark777eede2018-11-09 16:04:58 -05002762Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002763Does not alter <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002764
2765### Return Value
2766
Cary Clark777eede2018-11-09 16:04:58 -05002767<a href='undocumented#SkColorFilter'>SkColorFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002768
2769### Example
2770
2771<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2772
2773#### Example Output
2774
2775~~~~
2776nullptr == color filter
2777nullptr != color filter
2778~~~~
2779
2780</fiddle-embed></div>
2781
Cary Clark682c58d2018-05-16 07:07:07 -04002782<a name='SkPaint_refColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002783
2784---
Cary Clark12799e12017-07-28 15:18:29 -04002785
Cary Clark682c58d2018-05-16 07:07:07 -04002786<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002787<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 -04002788</pre>
2789
Cary Clark777eede2018-11-09 16:04:58 -05002790Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
2791Increases <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002792
2793### Return Value
2794
Cary Clark777eede2018-11-09 16:04:58 -05002795<a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002796
2797### Example
2798
2799<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2800
2801#### Example Output
2802
2803~~~~
2804color filter unique: true
2805color filter unique: false
2806~~~~
2807
2808</fiddle-embed></div>
2809
Cary Clark682c58d2018-05-16 07:07:07 -04002810<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002811
2812---
Cary Clark12799e12017-07-28 15:18:29 -04002813
Cary Clark682c58d2018-05-16 07:07:07 -04002814<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002815void <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 -04002816</pre>
2817
Cary Clark777eede2018-11-09 16:04:58 -05002818Sets <a href='undocumented#SkColorFilter'>SkColorFilter</a> to filter, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
2819<a href='undocumented#SkColorFilter'>SkColorFilter</a>. Pass nullptr to clear <a href='undocumented#SkColorFilter'>SkColorFilter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04002820
Cary Clark777eede2018-11-09 16:04:58 -05002821Increments filter <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002822
2823### Parameters
2824
Cary Clark682c58d2018-05-16 07:07:07 -04002825<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002826 <td><a href='undocumented#SkColorFilter'>SkColorFilter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002827 </tr>
2828</table>
2829
2830### Example
2831
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002832<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002833
Cary Clarka90ea222018-10-16 10:30:28 -04002834<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002835
Cary Clarka90ea222018-10-16 10:30:28 -04002836---
Cary Clark08895c42018-02-01 09:37:32 -05002837
Cary Clark777eede2018-11-09 16:04:58 -05002838<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>.
2839The 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>
2840over the destination <a href='SkColor_Reference#Color'>color</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002841
2842### Example
2843
Cary Clark83647062018-07-18 16:21:51 -04002844<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002845
2846### See Also
2847
Cary Clark77b3f3a2018-11-07 14:59:03 -05002848<a href='#Blend_Mode'>Blend_Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002849
Cary Clark682c58d2018-05-16 07:07:07 -04002850<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002851
2852---
Cary Clark12799e12017-07-28 15:18:29 -04002853
Cary Clark682c58d2018-05-16 07:07:07 -04002854<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002855<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002856</pre>
2857
Cary Clark09d80c02018-10-31 12:14:03 -04002858Returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>.
2859By default, returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002860
2861### Return Value
2862
Cary Clark777eede2018-11-09 16:04:58 -05002863mode 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 -04002864
2865### Example
2866
skia-bookmaker525f9a92018-05-03 06:27:39 +00002867<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04002868
2869#### Example Output
2870
2871~~~~
2872kSrcOver == getBlendMode
2873kSrcOver != getBlendMode
2874~~~~
2875
2876</fiddle-embed></div>
2877
Cary Clark682c58d2018-05-16 07:07:07 -04002878<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002879
2880---
Cary Clark12799e12017-07-28 15:18:29 -04002881
Cary Clark682c58d2018-05-16 07:07:07 -04002882<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002883bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002884</pre>
2885
Cary Clark777eede2018-11-09 16:04:58 -05002886Returns 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 -04002887
2888### Return Value
2889
Cary Clark777eede2018-11-09 16:04:58 -05002890true 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 -04002891
2892### Example
2893
2894<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2895
2896#### Example Output
2897
2898~~~~
2899isSrcOver == true
2900isSrcOver != true
2901~~~~
2902
2903</fiddle-embed></div>
2904
Cary Clark682c58d2018-05-16 07:07:07 -04002905<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002906
2907---
Cary Clark12799e12017-07-28 15:18:29 -04002908
Cary Clark682c58d2018-05-16 07:07:07 -04002909<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002910void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04002911</pre>
2912
Cary Clark777eede2018-11-09 16:04:58 -05002913Sets <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002914Does not check for valid input.
2915
2916### Parameters
2917
Cary Clark682c58d2018-05-16 07:07:07 -04002918<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002919 <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 -04002920 </tr>
2921</table>
2922
2923### Example
2924
2925<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2926
2927#### Example Output
2928
2929~~~~
2930isSrcOver == true
2931isSrcOver != true
2932~~~~
2933
2934</fiddle-embed></div>
2935
Cary Clarka90ea222018-10-16 10:30:28 -04002936<a name='Path_Effect_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002937
Cary Clarka90ea222018-10-16 10:30:28 -04002938---
Cary Clark08895c42018-02-01 09:37:32 -05002939
Cary Clark777eede2018-11-09 16:04:58 -05002940<a href='#Path_Effect'>Path_Effect</a> modifies the <a href='SkPath_Reference#Path'>path</a> geometry before drawing it.
2941<a href='#Path_Effect'>Path_Effect</a> may implement dashing, custom fill effects and custom stroke effects.
2942If <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 -04002943
2944### Example
2945
2946<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
2947
2948### See Also
2949
Cary Clark77b3f3a2018-11-07 14:59:03 -05002950<a href='#Path_Effect'>Path_Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002951
Cary Clark682c58d2018-05-16 07:07:07 -04002952<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002953
2954---
Cary Clark12799e12017-07-28 15:18:29 -04002955
Cary Clark682c58d2018-05-16 07:07:07 -04002956<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002957<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002958</pre>
2959
Cary Clark777eede2018-11-09 16:04:58 -05002960Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002961Does not alter <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002962
2963### Return Value
2964
Cary Clark777eede2018-11-09 16:04:58 -05002965<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002966
2967### Example
2968
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002969<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04002970
2971#### Example Output
2972
2973~~~~
2974nullptr == path effect
2975nullptr != path effect
2976~~~~
2977
2978</fiddle-embed></div>
2979
Cary Clark682c58d2018-05-16 07:07:07 -04002980<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002981
2982---
Cary Clark12799e12017-07-28 15:18:29 -04002983
Cary Clark682c58d2018-05-16 07:07:07 -04002984<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002985<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 -04002986</pre>
2987
Cary Clark777eede2018-11-09 16:04:58 -05002988Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
2989Increases <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002990
2991### Return Value
2992
Cary Clark777eede2018-11-09 16:04:58 -05002993<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002994
2995### Example
2996
Cary Clark83647062018-07-18 16:21:51 -04002997<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04002998
2999#### Example Output
3000
3001~~~~
3002path effect unique: true
3003path effect unique: false
3004~~~~
3005
3006</fiddle-embed></div>
3007
Cary Clark682c58d2018-05-16 07:07:07 -04003008<a name='SkPaint_setPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003009
3010---
Cary Clark12799e12017-07-28 15:18:29 -04003011
Cary Clark682c58d2018-05-16 07:07:07 -04003012<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003013void <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 -04003014</pre>
3015
Cary Clark777eede2018-11-09 16:04:58 -05003016Sets <a href='undocumented#SkPathEffect'>SkPathEffect</a> to <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3017<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 -04003018
Cary Clark777eede2018-11-09 16:04:58 -05003019Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003020
3021### Parameters
3022
Cary Clark682c58d2018-05-16 07:07:07 -04003023<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003024 <td>replace <a href='SkPath_Reference#SkPath'>SkPath</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003025 </tr>
3026</table>
3027
3028### Example
3029
3030<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3031
Cary Clarka90ea222018-10-16 10:30:28 -04003032<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003033
Cary Clarka90ea222018-10-16 10:30:28 -04003034---
Cary Clark08895c42018-02-01 09:37:32 -05003035
Cary Clark777eede2018-11-09 16:04:58 -05003036<a href='#Mask_Filter'>Mask_Filter</a> uses coverage of the shape drawn to create <a href='#Mask_Alpha'>Mask_Alpha</a>.
3037<a href='#Mask_Filter'>Mask_Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003038
Cary Clark777eede2018-11-09 16:04:58 -05003039<a href='#Mask_Filter'>Mask_Filter</a> may change the geometry and transparency of the shape, such as
3040creating a blur effect. Set <a href='#Mask_Filter'>Mask_Filter</a> to nullptr to prevent <a href='#Mask_Filter'>Mask_Filter</a> from
3041modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003042
3043### Example
3044
Cary Clark681287e2018-03-16 11:34:15 -04003045<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003046
Cary Clark682c58d2018-05-16 07:07:07 -04003047<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003048
3049---
Cary Clark12799e12017-07-28 15:18:29 -04003050
Cary Clark682c58d2018-05-16 07:07:07 -04003051<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003052<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003053</pre>
3054
Cary Clark777eede2018-11-09 16:04:58 -05003055Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003056Does not alter <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003057
3058### Return Value
3059
Cary Clark777eede2018-11-09 16:04:58 -05003060<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003061
3062### Example
3063
Cary Clark681287e2018-03-16 11:34:15 -04003064<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003065
3066#### Example Output
3067
3068~~~~
3069nullptr == mask filter
3070nullptr != mask filter
3071~~~~
3072
3073</fiddle-embed></div>
3074
Cary Clark682c58d2018-05-16 07:07:07 -04003075<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003076
3077---
Cary Clark12799e12017-07-28 15:18:29 -04003078
Cary Clark682c58d2018-05-16 07:07:07 -04003079<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003080<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 -04003081</pre>
3082
Cary Clark777eede2018-11-09 16:04:58 -05003083Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003084
Cary Clark777eede2018-11-09 16:04:58 -05003085Increases <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003086
3087### Return Value
3088
Cary Clark777eede2018-11-09 16:04:58 -05003089<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003090
3091### Example
3092
Cary Clark83647062018-07-18 16:21:51 -04003093<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003094
3095#### Example Output
3096
3097~~~~
3098mask filter unique: true
3099mask filter unique: false
3100~~~~
3101
3102</fiddle-embed></div>
3103
Cary Clark682c58d2018-05-16 07:07:07 -04003104<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003105
3106---
Cary Clark12799e12017-07-28 15:18:29 -04003107
Cary Clark682c58d2018-05-16 07:07:07 -04003108<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003109void <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 -04003110</pre>
3111
Cary Clark777eede2018-11-09 16:04:58 -05003112Sets <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> to <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3113<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 -04003114<a href='undocumented#Mask_Alpha'>mask alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003115
Cary Clark777eede2018-11-09 16:04:58 -05003116Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003117
3118### Parameters
3119
Cary Clark682c58d2018-05-16 07:07:07 -04003120<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3121 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003122 </tr>
3123</table>
3124
3125### Example
3126
Cary Clark681287e2018-03-16 11:34:15 -04003127<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003128
Cary Clarka90ea222018-10-16 10:30:28 -04003129<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003130
Cary Clarka90ea222018-10-16 10:30:28 -04003131---
Cary Clark08895c42018-02-01 09:37:32 -05003132
Cary Clarkcb6bef02018-11-29 12:05:25 -05003133<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 -05003134<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 -05003135The 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 -05003136implementation.
Cary Clark12799e12017-07-28 15:18:29 -04003137
3138### Example
3139
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003140<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003141
Cary Clark682c58d2018-05-16 07:07:07 -04003142<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003143
3144---
Cary Clark12799e12017-07-28 15:18:29 -04003145
Cary Clark682c58d2018-05-16 07:07:07 -04003146<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003147<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003148</pre>
3149
Cary Clark777eede2018-11-09 16:04:58 -05003150Returns <a href='undocumented#SkTypeface'>SkTypeface</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003151Does not alter <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003152
3153### Return Value
3154
Cary Clark777eede2018-11-09 16:04:58 -05003155<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003156
3157### Example
3158
Cary Clarkf9603982018-07-17 08:20:27 -04003159<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003160
3161#### Example Output
3162
3163~~~~
3164nullptr == typeface
3165nullptr != typeface
3166~~~~
3167
3168</fiddle-embed></div>
3169
Cary Clark682c58d2018-05-16 07:07:07 -04003170<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003171
3172---
Cary Clark12799e12017-07-28 15:18:29 -04003173
Cary Clark682c58d2018-05-16 07:07:07 -04003174<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003175<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 -04003176</pre>
3177
Cary Clark777eede2018-11-09 16:04:58 -05003178Increases <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003179
3180### Return Value
3181
Cary Clark777eede2018-11-09 16:04:58 -05003182<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003183
3184### Example
3185
Cary Clark83647062018-07-18 16:21:51 -04003186<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003187
3188#### Example Output
3189
3190~~~~
3191typeface1 != typeface2
3192typeface1 == typeface2
3193~~~~
3194
3195</fiddle-embed></div>
3196
Cary Clark682c58d2018-05-16 07:07:07 -04003197<a name='SkPaint_setTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003198
3199---
Cary Clark12799e12017-07-28 15:18:29 -04003200
Cary Clark682c58d2018-05-16 07:07:07 -04003201<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003202void <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 -04003203</pre>
3204
Cary Clark777eede2018-11-09 16:04:58 -05003205Sets <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>.
3206Pass nullptr to clear <a href='undocumented#SkTypeface'>SkTypeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3207<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003208
3209### Parameters
3210
Cary Clark682c58d2018-05-16 07:07:07 -04003211<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
Cary Clarkcb6bef02018-11-29 12:05:25 -05003212 <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 -04003213 </tr>
3214</table>
3215
3216### Example
3217
Cary Clark71961fb2018-01-05 14:21:59 -05003218<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003219
Cary Clarka90ea222018-10-16 10:30:28 -04003220<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003221
Cary Clarka90ea222018-10-16 10:30:28 -04003222---
Cary Clark08895c42018-02-01 09:37:32 -05003223
Cary Clark777eede2018-11-09 16:04:58 -05003224<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>
3225with <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>,
3226which 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 -04003227
Cary Clark777eede2018-11-09 16:04:58 -05003228<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>
3229can 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.
3230<a href='#Image_Filter'>Image_Filter</a> operates independently of and can be used in combination with
Cary Clark77b3f3a2018-11-07 14:59:03 -05003231<a href='#Mask_Filter'>Mask_Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003232
3233### Example
3234
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003235<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003236
Cary Clark682c58d2018-05-16 07:07:07 -04003237<a name='SkPaint_getImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003238
3239---
Cary Clark12799e12017-07-28 15:18:29 -04003240
Cary Clark682c58d2018-05-16 07:07:07 -04003241<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003242<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003243</pre>
3244
Cary Clark777eede2018-11-09 16:04:58 -05003245Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003246Does not alter <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003247
3248### Return Value
3249
Cary Clark777eede2018-11-09 16:04:58 -05003250<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003251
3252### Example
3253
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003254<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003255
3256#### Example Output
3257
3258~~~~
3259nullptr == image filter
3260nullptr != image filter
3261~~~~
3262
3263</fiddle-embed></div>
3264
Cary Clark682c58d2018-05-16 07:07:07 -04003265<a name='SkPaint_refImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003266
3267---
Cary Clark12799e12017-07-28 15:18:29 -04003268
Cary Clark682c58d2018-05-16 07:07:07 -04003269<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003270<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 -04003271</pre>
3272
Cary Clark777eede2018-11-09 16:04:58 -05003273Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
3274Increases <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003275
3276### Return Value
3277
Cary Clark777eede2018-11-09 16:04:58 -05003278<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003279
3280### Example
3281
3282<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3283
3284#### Example Output
3285
3286~~~~
3287image filter unique: true
3288image filter unique: false
3289~~~~
3290
3291</fiddle-embed></div>
3292
Cary Clark682c58d2018-05-16 07:07:07 -04003293<a name='SkPaint_setImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003294
3295---
Cary Clark12799e12017-07-28 15:18:29 -04003296
Cary Clark682c58d2018-05-16 07:07:07 -04003297<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003298void <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 -04003299</pre>
3300
Cary Clark777eede2018-11-09 16:04:58 -05003301Sets <a href='undocumented#SkImageFilter'>SkImageFilter</a> to <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3302<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 -04003303on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003304
Cary Clark777eede2018-11-09 16:04:58 -05003305Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003306
3307### Parameters
3308
Cary Clark682c58d2018-05-16 07:07:07 -04003309<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003310 <td>how <a href='SkImage_Reference#SkImage'>SkImage</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003311 </tr>
3312</table>
3313
3314### Example
3315
3316<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3317
Cary Clarka90ea222018-10-16 10:30:28 -04003318<a name='Draw_Looper_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003319
Cary Clarka90ea222018-10-16 10:30:28 -04003320---
Cary Clark08895c42018-02-01 09:37:32 -05003321
Cary Clark777eede2018-11-09 16:04:58 -05003322<a href='#Draw_Looper'>Draw_Looper</a> sets a modifier that communicates state from one <a href='#Draw_Layer'>Draw_Layer</a>
3323to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003324
Cary Clark777eede2018-11-09 16:04:58 -05003325<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.
3326<a href='#Draw_Looper'>Draw_Looper</a> may be used to draw multiple colors or create a colored shadow.
3327Set <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 -04003328
3329### Example
3330
3331<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3332
Cary Clark682c58d2018-05-16 07:07:07 -04003333<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003334
3335---
Cary Clark12799e12017-07-28 15:18:29 -04003336
Cary Clark682c58d2018-05-16 07:07:07 -04003337<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003338<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003339</pre>
3340
Cary Clark777eede2018-11-09 16:04:58 -05003341Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003342Does not alter <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003343
3344### Return Value
3345
Cary Clark777eede2018-11-09 16:04:58 -05003346<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003347
3348### Example
3349
3350<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3351
3352#### Example Output
3353
3354~~~~
3355nullptr == draw looper
3356nullptr != draw looper
3357~~~~
3358
3359</fiddle-embed></div>
3360
Cary Clark682c58d2018-05-16 07:07:07 -04003361<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003362
3363---
Cary Clark12799e12017-07-28 15:18:29 -04003364
Cary Clark682c58d2018-05-16 07:07:07 -04003365<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003366<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 -04003367</pre>
3368
Cary Clark777eede2018-11-09 16:04:58 -05003369Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
3370Increases <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003371
3372### Return Value
3373
Cary Clark777eede2018-11-09 16:04:58 -05003374<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003375
3376### Example
3377
3378<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3379
3380#### Example Output
3381
3382~~~~
3383draw looper unique: true
3384draw looper unique: false
3385~~~~
3386
3387</fiddle-embed></div>
3388
Cary Clark682c58d2018-05-16 07:07:07 -04003389<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003390
3391---
Cary Clark12799e12017-07-28 15:18:29 -04003392
Cary Clark682c58d2018-05-16 07:07:07 -04003393<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkabaffd82018-11-15 08:25:12 -05003394void <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 -04003395</pre>
3396
Cary Clark777eede2018-11-09 16:04:58 -05003397Sets <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> to <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3398<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 -04003399drawing unaltered.
3400
Cary Clark777eede2018-11-09 16:04:58 -05003401Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003402
3403### Parameters
3404
Cary Clark682c58d2018-05-16 07:07:07 -04003405<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003406 <td>iterates through drawing one or more time, altering <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003407 </tr>
3408</table>
3409
3410### Example
3411
3412<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3413
Cary Clarka90ea222018-10-16 10:30:28 -04003414<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003415
Cary Clarka90ea222018-10-16 10:30:28 -04003416---
Cary Clark08895c42018-02-01 09:37:32 -05003417
Cary Clark777eede2018-11-09 16:04:58 -05003418<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>.
3419<a href='#Paint_Text_Size'>Text_Size</a> can be set to any positive value or zero.
3420<a href='#Paint_Text_Size'>Text_Size</a> defaults to 12.
3421Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults_TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003422
3423### Example
3424
3425<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3426
Cary Clark682c58d2018-05-16 07:07:07 -04003427<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003428
3429---
Cary Clark12799e12017-07-28 15:18:29 -04003430
Cary Clark682c58d2018-05-16 07:07:07 -04003431<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003432<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003433</pre>
3434
Cary Clark777eede2018-11-09 16:04:58 -05003435Returns <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 -04003436
3437### Return Value
3438
Cary Clark09d80c02018-10-31 12:14:03 -04003439typographic height of <a href='undocumented#Text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04003440
3441### Example
3442
skia-bookmaker233c6522018-07-04 05:33:26 +00003443<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003444
Cary Clark682c58d2018-05-16 07:07:07 -04003445<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003446
3447---
Cary Clark12799e12017-07-28 15:18:29 -04003448
Cary Clark682c58d2018-05-16 07:07:07 -04003449<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003450void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003451</pre>
3452
Cary Clark777eede2018-11-09 16:04:58 -05003453Sets <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
3454Has 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 -04003455
3456### Parameters
3457
Cary Clark682c58d2018-05-16 07:07:07 -04003458<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003459 <td>typographic height of <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003460 </tr>
3461</table>
3462
3463### Example
3464
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003465<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003466
Cary Clarka90ea222018-10-16 10:30:28 -04003467<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003468
Cary Clarka90ea222018-10-16 10:30:28 -04003469---
Cary Clark08895c42018-02-01 09:37:32 -05003470
Cary Clark777eede2018-11-09 16:04:58 -05003471<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal scale.
3472<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
3473is not available.
3474<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> can be set to any value.
3475<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003476
3477### Example
3478
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003479<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003480
Cary Clark682c58d2018-05-16 07:07:07 -04003481<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003482
3483---
Cary Clark12799e12017-07-28 15:18:29 -04003484
Cary Clark682c58d2018-05-16 07:07:07 -04003485<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003486<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003487</pre>
3488
Cary Clark777eede2018-11-09 16:04:58 -05003489Returns <a href='undocumented#Text'>text</a> scale on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003490Default value is 1.
3491
3492### Return Value
3493
Cary Clark777eede2018-11-09 16:04:58 -05003494<a href='undocumented#Text'>text</a> horizontal scale
Cary Clark12799e12017-07-28 15:18:29 -04003495
3496### Example
3497
3498<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3499
Cary Clark682c58d2018-05-16 07:07:07 -04003500<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003501
3502---
Cary Clark12799e12017-07-28 15:18:29 -04003503
Cary Clark682c58d2018-05-16 07:07:07 -04003504<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003505void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003506</pre>
3507
Cary Clark777eede2018-11-09 16:04:58 -05003508Sets <a href='undocumented#Text'>text scale</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003509Default value is 1.
3510
3511### Parameters
3512
Cary Clark682c58d2018-05-16 07:07:07 -04003513<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003514 <td><a href='undocumented#Text'>text</a> horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003515 </tr>
3516</table>
3517
3518### Example
3519
3520<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3521
Cary Clarka90ea222018-10-16 10:30:28 -04003522<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003523
Cary Clarka90ea222018-10-16 10:30:28 -04003524---
Cary Clark08895c42018-02-01 09:37:32 -05003525
Cary Clark777eede2018-11-09 16:04:58 -05003526<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal slant.
3527<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
3528is not available.
3529<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> can be set to any value.
3530<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003531
3532### Example
3533
3534<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3535
Cary Clark682c58d2018-05-16 07:07:07 -04003536<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003537
3538---
Cary Clark12799e12017-07-28 15:18:29 -04003539
Cary Clark682c58d2018-05-16 07:07:07 -04003540<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003541<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003542</pre>
3543
Cary Clark777eede2018-11-09 16:04:58 -05003544Returns <a href='undocumented#Text'>text</a> skew on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003545Default value is zero.
3546
3547### Return Value
3548
Cary Clark09d80c02018-10-31 12:14:03 -04003549additional shear on x-axis relative to y-axis
Cary Clark12799e12017-07-28 15:18:29 -04003550
3551### Example
3552
Cary Clark7f644ec2018-07-19 10:50:44 -04003553<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003554
Cary Clark682c58d2018-05-16 07:07:07 -04003555<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003556
3557---
Cary Clark12799e12017-07-28 15:18:29 -04003558
Cary Clark682c58d2018-05-16 07:07:07 -04003559<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003560void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003561</pre>
3562
Cary Clark777eede2018-11-09 16:04:58 -05003563Sets <a href='undocumented#Text'>text skew</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003564Default value is zero.
3565
3566### Parameters
3567
Cary Clark682c58d2018-05-16 07:07:07 -04003568<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003569 <td>additional shear on x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003570 </tr>
3571</table>
3572
3573### Example
3574
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003575<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003576
Cary Clarka90ea222018-10-16 10:30:28 -04003577<a name='Text_Encoding'></a>
3578
Cary Clark12799e12017-07-28 15:18:29 -04003579---
3580
Cary Clarka90ea222018-10-16 10:30:28 -04003581<a name='SkPaint_TextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003582
Cary Clarka90ea222018-10-16 10:30:28 -04003583---
Cary Clark12799e12017-07-28 15:18:29 -04003584
Cary Clarka560c472017-11-27 10:44:06 -05003585<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003586 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04003587 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
3588 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
3589 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
3590 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003591 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05003592
Cary Clark1a8d7622018-03-05 13:26:16 -05003593</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003594
Cary Clark777eede2018-11-09 16:04:58 -05003595<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether <a href='undocumented#Text'>text</a> specifies character codes and their encoded
3596<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 -05003597<a href='https://unicode.org/standard/standard.html'>Unicode standard</a></a> .
Cary Clark6fc50412017-09-21 12:31:06 -04003598
Cary Clark777eede2018-11-09 16:04:58 -05003599Character codes encoded <a href='undocumented#Size'>size</a> are specified by UTF-8, UTF-16, or UTF-32.
3600All character code formats are able to represent all of Unicode, differing only
3601in the total storage required.
Cary Clark12799e12017-07-28 15:18:29 -04003602
Cary Clark682c58d2018-05-16 07:07:07 -04003603<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 -04003604
Cary Clark682c58d2018-05-16 07:07:07 -04003605<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 -04003606
Cary Clark682c58d2018-05-16 07:07:07 -04003607<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 -04003608
Cary Clarkcb6bef02018-11-29 12:05:25 -05003609<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 -05003610A <a href='undocumented#Glyph'>glyph</a> index is a 16-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003611
Cary Clark777eede2018-11-09 16:04:58 -05003612<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 -04003613
3614### Constants
3615
Cary Clark682c58d2018-05-16 07:07:07 -04003616<table style='border-collapse: collapse; width: 62.5em'>
3617 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3618<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3619<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3620 <tr style='background-color: #f0f0f0; '>
3621 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
3622 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3623 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3624uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04003625 </tr>
3626 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003627 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
3628 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3629 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3630uses two byte words to represent most of Unicode</td>
3631 </tr>
3632 <tr style='background-color: #f0f0f0; '>
3633 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
3634 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3635 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3636uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04003637 </tr>
3638 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003639 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
3640 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3641 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3642uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04003643 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003644</table>
Cary Clark12799e12017-07-28 15:18:29 -04003645
3646### Example
3647
Cary Clark777eede2018-11-09 16:04:58 -05003648<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First <a href='undocumented#Line'>line</a> is encoded in UTF-8.
3649Second <a href='undocumented#Line'>line</a> is encoded in UTF-16.
3650Third <a href='undocumented#Line'>line</a> is encoded in UTF-32.
3651Fourth <a href='undocumented#Line'>line</a> has 16-bit <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003652</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003653
Cary Clark682c58d2018-05-16 07:07:07 -04003654<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003655
3656---
Cary Clark12799e12017-07-28 15:18:29 -04003657
Cary Clark682c58d2018-05-16 07:07:07 -04003658<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003659<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003660</pre>
3661
Cary Clark09d80c02018-10-31 12:14:03 -04003662Returns <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_TextEncoding'>TextEncoding</a>.
Cary Clarkcb6bef02018-11-29 12:05:25 -05003663<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 -04003664
3665### Return Value
3666
Cary Clark777eede2018-11-09 16:04:58 -05003667one 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 -04003668
3669<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003670
3671### Example
3672
skia-bookmaker525f9a92018-05-03 06:27:39 +00003673<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04003674
3675#### Example Output
3676
3677~~~~
3678kUTF8_TextEncoding == text encoding
3679kGlyphID_TextEncoding == text encoding
3680~~~~
3681
3682</fiddle-embed></div>
3683
Cary Clark682c58d2018-05-16 07:07:07 -04003684<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003685
3686---
Cary Clark12799e12017-07-28 15:18:29 -04003687
Cary Clark682c58d2018-05-16 07:07:07 -04003688<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003689void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04003690</pre>
3691
Cary Clark777eede2018-11-09 16:04:58 -05003692Sets <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 -05003693<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 -05003694Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003695
3696### Parameters
3697
Cary Clark682c58d2018-05-16 07:07:07 -04003698<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003699 <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 -04003700 </tr>
3701</table>
3702
Cary Clark09d80c02018-10-31 12:14:03 -04003703<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>
3704
Cary Clark12799e12017-07-28 15:18:29 -04003705### Example
3706
Cary Clark75fd4492018-06-20 12:45:16 -04003707<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04003708
3709#### Example Output
3710
3711~~~~
37124 != text encoding
3713~~~~
3714
3715</fiddle-embed></div>
3716
Cary Clark61313f32018-10-08 14:57:48 -04003717<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04003718
Cary Clarka90ea222018-10-16 10:30:28 -04003719---
3720
Cary Clark7e69c8f2018-11-06 20:40:45 -05003721<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003722
Cary Clark682c58d2018-05-16 07:07:07 -04003723<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003724
3725---
Cary Clark12799e12017-07-28 15:18:29 -04003726
Cary Clark682c58d2018-05-16 07:07:07 -04003727<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003728<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 -04003729</pre>
3730
Cary Clark777eede2018-11-09 16:04:58 -05003731Returns <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> associated with <a href='undocumented#SkTypeface'>SkTypeface</a>.
3732The 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 -04003733descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003734If <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>.
3735Results are scaled by <a href='#Text_Size'>text size</a> but does not take into account
Cary Clark09d80c02018-10-31 12:14:03 -04003736dimensions 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>,
3737<a href='#Style_Stroke'>style stroke</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003738
3739### Parameters
3740
Cary Clark682c58d2018-05-16 07:07:07 -04003741<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003742 <td>storage for <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003743 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04003744</table>
3745
3746### Return Value
3747
Cary Clark09d80c02018-10-31 12:14:03 -04003748recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003749
3750### Example
3751
skia-bookmaker2dc1e342018-11-02 05:33:11 +00003752<div><fiddle-embed name="59d9b8249afa1c2af6186711250ce240"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003753
3754### See Also
3755
Cary Clark77b3f3a2018-11-07 14:59:03 -05003756<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 -04003757
Cary Clark682c58d2018-05-16 07:07:07 -04003758<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003759
3760---
Cary Clark12799e12017-07-28 15:18:29 -04003761
Cary Clark682c58d2018-05-16 07:07:07 -04003762<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003763<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003764</pre>
3765
Cary Clark777eede2018-11-09 16:04:58 -05003766Returns the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of metrics
Cary Clark12799e12017-07-28 15:18:29 -04003767descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003768Result 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 -04003769dimensions required by stroking and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
3770Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003771
3772### Return Value
3773
Cary Clark09d80c02018-10-31 12:14:03 -04003774recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003775
3776### Example
3777
3778<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
3779
3780#### Example Output
3781
3782~~~~
3783textSize: 12 fontSpacing: 13.9688
3784textSize: 18 fontSpacing: 20.9531
3785textSize: 24 fontSpacing: 27.9375
3786textSize: 32 fontSpacing: 37.25
3787~~~~
3788
3789</fiddle-embed></div>
3790
Cary Clark682c58d2018-05-16 07:07:07 -04003791<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003792
3793---
Cary Clark12799e12017-07-28 15:18:29 -04003794
Cary Clark682c58d2018-05-16 07:07:07 -04003795<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003796int <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 -04003797</pre>
3798
Cary Clark777eede2018-11-09 16:04:58 -05003799Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into <a href='undocumented#Glyph'>glyph</a> indices.
3800Returns 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 +00003801<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 -05003802<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 -04003803
Cary Clark777eede2018-11-09 16:04:58 -05003804Does 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 -04003805
Cary Clark777eede2018-11-09 16:04:58 -05003806If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
3807If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003808
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003809If <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> is <a href='undocumented#kUTF8_SkTextEncoding'>kUTF8_SkTextEncoding</a> and
Cary Clark777eede2018-11-09 16:04:58 -05003810<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04003811
3812### Parameters
3813
Cary Clark682c58d2018-05-16 07:07:07 -04003814<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003815 <td>character storage encoded with <a href='undocumented#SkTextEncoding'>SkTextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003816 </tr>
3817 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
3818 <td>length of character storage in bytes</td>
3819 </tr>
3820 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003821 <td>storage for <a href='undocumented#Glyph'>glyph</a> indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003822 </tr>
3823</table>
3824
3825### Return Value
3826
Cary Clark777eede2018-11-09 16:04:58 -05003827number 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 -04003828
3829### Example
3830
3831<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
3832
Cary Clark682c58d2018-05-16 07:07:07 -04003833<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003834
3835---
Cary Clark12799e12017-07-28 15:18:29 -04003836
Cary Clark682c58d2018-05-16 07:07:07 -04003837<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003838int <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 -04003839</pre>
3840
Cary Clark777eede2018-11-09 16:04:58 -05003841Returns the number of <a href='undocumented#Glyph'>glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003842Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to count the <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04003843Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003844
3845### Parameters
3846
Cary Clark682c58d2018-05-16 07:07:07 -04003847<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003848 <td>character storage encoded with <a href='undocumented#SkTextEncoding'>SkTextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003849 </tr>
3850 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
3851 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04003852 </tr>
3853</table>
3854
3855### Return Value
3856
Cary Clark777eede2018-11-09 16:04:58 -05003857number 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 -04003858
3859### Example
3860
Cary Clarkf9603982018-07-17 08:20:27 -04003861<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04003862
3863#### Example Output
3864
3865~~~~
3866count = 5
3867~~~~
3868
3869</fiddle-embed></div>
3870
Cary Clark682c58d2018-05-16 07:07:07 -04003871<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003872
3873---
Cary Clark12799e12017-07-28 15:18:29 -04003874
Cary Clark682c58d2018-05-16 07:07:07 -04003875<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003876bool <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 -04003877</pre>
3878
Cary Clark777eede2018-11-09 16:04:58 -05003879Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index.
3880Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
Cary Clark09d80c02018-10-31 12:14:03 -04003881<a href='undocumented#SkTypeface'>SkTypeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003882
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003883If <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> is <a href='undocumented#kGlyphID_SkTextEncoding'>kGlyphID_SkTextEncoding</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003884returns true if all <a href='undocumented#Glyph'>glyph</a> indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
3885does 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 -04003886
Cary Clark777eede2018-11-09 16:04:58 -05003887Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04003888
3889### Parameters
3890
Cary Clark682c58d2018-05-16 07:07:07 -04003891<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003892 <td>array of characters or <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003893 </tr>
3894 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003895 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04003896 </tr>
3897</table>
3898
3899### Return Value
3900
Cary Clark777eede2018-11-09 16:04:58 -05003901true 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 -04003902
Cary Clark777eede2018-11-09 16:04:58 -05003903<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a <a href='undocumented#Glyph'>glyph</a> index
3904corresponding to the Unicode surrogate code <a href='SkPoint_Reference#Point'>point</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003905</div>
Cary Clark12799e12017-07-28 15:18:29 -04003906
3907#### Example Output
3908
3909~~~~
39100x00b0 == has char
39110xd800 != has char
3912~~~~
3913
Cary Clark12799e12017-07-28 15:18:29 -04003914### Example
3915
Cary Clark777eede2018-11-09 16:04:58 -05003916<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
3917that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003918</div>
Cary Clark12799e12017-07-28 15:18:29 -04003919
3920#### Example Output
3921
3922~~~~
39230x01ff == has glyph
39240x0000 != has glyph
39250xffff == has glyph
3926~~~~
3927
3928</fiddle-embed></div>
3929
3930### See Also
3931
Cary Clark682c58d2018-05-16 07:07:07 -04003932<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04003933
Cary Clark682c58d2018-05-16 07:07:07 -04003934<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003935
3936---
Cary Clark12799e12017-07-28 15:18:29 -04003937
Cary Clark682c58d2018-05-16 07:07:07 -04003938<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003939void <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 -04003940</pre>
3941
Cary Clark777eede2018-11-09 16:04:58 -05003942Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
3943<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
3944Uses the <a href='undocumented#SkTypeface'>SkTypeface</a>, but is unaffected
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003945by <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 -04003946
Cary Clarkcb6bef02018-11-29 12:05:25 -05003947Only supported on platforms that use FreeType as the <a href='SkFont_Reference#Font_Engine'>font engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003948
3949### Parameters
3950
Cary Clark682c58d2018-05-16 07:07:07 -04003951<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clarkcb6bef02018-11-29 12:05:25 -05003952 <td>array of indices into <a href='SkFont_Reference#Font'>font</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003953 </tr>
3954 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003955 <td>length of <a href='undocumented#Glyph'>glyph</a> array</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003956 </tr>
3957 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003958 <td>storage for character codes, one per <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003959 </tr>
3960</table>
3961
3962### Example
3963
Cary Clark777eede2018-11-09 16:04:58 -05003964<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 -05003965</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003966
Cary Clarka90ea222018-10-16 10:30:28 -04003967<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003968
Cary Clark682c58d2018-05-16 07:07:07 -04003969<a name='SkPaint_measureText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003970
3971---
Cary Clark12799e12017-07-28 15:18:29 -04003972
Cary Clark682c58d2018-05-16 07:07:07 -04003973<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003974<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 -04003975</pre>
3976
Cary Clark3aca39d2018-10-23 14:44:05 -04003977Returns the advance width of <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04003978The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003979Uses <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 -05003980and <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
3981<a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
3982Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
3983The 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 -04003984
3985### Parameters
3986
Cary Clark682c58d2018-05-16 07:07:07 -04003987<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003988 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003989 </tr>
3990 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003991 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003992 </tr>
3993 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
3994 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003995 </tr>
3996</table>
3997
3998### Return Value
3999
4000advance width or height
4001
4002### Example
4003
Cary Clark83647062018-07-18 16:21:51 -04004004<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004005
Cary Clark682c58d2018-05-16 07:07:07 -04004006<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05004007
Cary Clarka90ea222018-10-16 10:30:28 -04004008---
4009
Cary Clark682c58d2018-05-16 07:07:07 -04004010<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004011<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 -04004012</pre>
4013
Cary Clark3aca39d2018-10-23 14:44:05 -04004014Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04004015The 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 +00004016Uses <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 -05004017and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04004018Does 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 -04004019
4020### Parameters
4021
Cary Clark682c58d2018-05-16 07:07:07 -04004022<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004023 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004024 </tr>
4025 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004026 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004027 </tr>
4028</table>
4029
4030### Return Value
4031
4032advance width or height
4033
4034### Example
4035
4036<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4037
4038#### Example Output
4039
4040~~~~
4041default width = 5
4042double width = 10
4043~~~~
4044
4045</fiddle-embed></div>
4046
Cary Clark682c58d2018-05-16 07:07:07 -04004047<a name='SkPaint_breakText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004048
4049---
Cary Clark12799e12017-07-28 15:18:29 -04004050
Cary Clark682c58d2018-05-16 07:07:07 -04004051<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004052size_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 -05004053 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr)const
Cary Clark12799e12017-07-28 15:18:29 -04004054</pre>
4055
Cary Clark777eede2018-11-09 16:04:58 -05004056Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4057The <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 -04004058Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004059Returns 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 +00004060Uses <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 -05004061and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04004062Does 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 -04004063
4064### Parameters
4065
Cary Clark682c58d2018-05-16 07:07:07 -04004066<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004067 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004068 </tr>
4069 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004070 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004071 </tr>
4072 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004073 <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 -04004074 </tr>
4075 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004076 <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 -04004077 </tr>
4078</table>
4079
4080### Return Value
4081
Cary Clark777eede2018-11-09 16:04:58 -05004082bytes 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 -04004083
4084### Example
4085
Cary Clark777eede2018-11-09 16:04:58 -05004086<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "Breakfast" shows desired width, shorter than available characters.
4087<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 -05004088</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004089
Cary Clark682c58d2018-05-16 07:07:07 -04004090<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004091
4092---
Cary Clark12799e12017-07-28 15:18:29 -04004093
Cary Clark682c58d2018-05-16 07:07:07 -04004094<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004095int <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 -04004096</pre>
4097
Cary Clark777eede2018-11-09 16:04:58 -05004098Retrieves 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
4099the <a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4100Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4101If <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.
4102if <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 +00004103Uses <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 -05004104and <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 -04004105Does 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 -05004106Does 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 -04004107
4108### Parameters
4109
Cary Clark682c58d2018-05-16 07:07:07 -04004110<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004111 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004112 </tr>
4113 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004114 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004115 </tr>
4116 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004117 <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 -04004118 </tr>
4119 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004120 <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 -04004121 </tr>
4122</table>
4123
4124### Return Value
4125
Cary Clark777eede2018-11-09 16:04:58 -05004126<a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004127
4128### Example
4129
Cary Clark777eede2018-11-09 16:04:58 -05004130<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.
4131The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004132</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004133
Cary Clarka90ea222018-10-16 10:30:28 -04004134<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004135
Cary Clark777eede2018-11-09 16:04:58 -05004136<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 -04004137
Cary Clark682c58d2018-05-16 07:07:07 -04004138<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004139
4140---
Cary Clark12799e12017-07-28 15:18:29 -04004141
Cary Clark682c58d2018-05-16 07:07:07 -04004142<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004143void <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 -04004144</pre>
4145
Cary Clark777eede2018-11-09 16:04:58 -05004146Returns 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 +00004147Uses <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 -05004148and <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>.
4149All 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>.
4150Uses <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 -04004151
4152### Parameters
4153
Cary Clark682c58d2018-05-16 07:07:07 -04004154<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004155 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004156 </tr>
4157 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4158 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4159 </tr>
4160 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004161 <td>x-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004162 </tr>
4163 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004164 <td>y-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004165 </tr>
4166 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004167 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004168 </tr>
4169</table>
4170
4171### Example
4172
Cary Clark777eede2018-11-09 16:04:58 -05004173<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
4174the offset location. The result is rendered with one draw call.
Cary Clark1a8d7622018-03-05 13:26:16 -05004175</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004176
Cary Clark682c58d2018-05-16 07:07:07 -04004177<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004178
4179---
Cary Clark12799e12017-07-28 15:18:29 -04004180
Cary Clark682c58d2018-05-16 07:07:07 -04004181<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004182void <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 -04004183</pre>
4184
Cary Clark777eede2018-11-09 16:04:58 -05004185Returns 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 +00004186Uses <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 -05004187and <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>.
4188All 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>.
4189Uses <a href='#SkPaint_getPosTextPath_pos'>pos</a> array to position <a href='#SkPaint_getPosTextPath_path'>path</a>.
4190<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 -04004191
4192### Parameters
4193
Cary Clark682c58d2018-05-16 07:07:07 -04004194<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004195 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004196 </tr>
4197 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4198 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4199 </tr>
4200 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004201 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004202 </tr>
4203 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004204 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004205 </tr>
4206</table>
4207
4208### Example
4209
Cary Clark777eede2018-11-09 16:04:58 -05004210<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 -05004211</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004212
Cary Clarka90ea222018-10-16 10:30:28 -04004213<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004214
Cary Clark777eede2018-11-09 16:04:58 -05004215<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
4216of <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
4217underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004218
Cary Clark682c58d2018-05-16 07:07:07 -04004219<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004220
4221---
Cary Clark12799e12017-07-28 15:18:29 -04004222
Cary Clark682c58d2018-05-16 07:07:07 -04004223<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004224int <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 -05004225 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004226</pre>
4227
Cary Clark777eede2018-11-09 16:04:58 -05004228Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
4229<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.
4230The 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 -04004231the <a href='undocumented#String'>string</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004232Uses <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 -05004233and <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>.
4234Uses <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 +00004235
Cary Clark777eede2018-11-09 16:04:58 -05004236Pass 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 +00004237
Cary Clark777eede2018-11-09 16:04:58 -05004238<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004239
4240### Parameters
4241
Cary Clark682c58d2018-05-16 07:07:07 -04004242<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004243 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004244 </tr>
4245 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
4246 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
4247 </tr>
4248 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004249 <td>x-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004250 </tr>
4251 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004252 <td>y-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004253 </tr>
4254 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004255 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004256 </tr>
4257 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4258 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004259 </tr>
4260</table>
4261
4262### Return Value
4263
4264number of intersections; may be zero
4265
Cary Clarke9c5a152018-11-21 11:45:57 -05004266<div>Underline uses intercepts to draw on either side of the <a href='undocumented#Glyph'>glyph</a> Descender.
4267</div>
Cary Clark12799e12017-07-28 15:18:29 -04004268
Cary Clark682c58d2018-05-16 07:07:07 -04004269<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004270
4271---
Cary Clark12799e12017-07-28 15:18:29 -04004272
Cary Clark682c58d2018-05-16 07:07:07 -04004273<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004274int <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 -05004275 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004276</pre>
4277
Cary Clark777eede2018-11-09 16:04:58 -05004278Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
4279<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.
4280The 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 -04004281the <a href='undocumented#String'>string</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004282Uses <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 -05004283and <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>.
4284Uses <a href='#SkPaint_getPosTextIntercepts_pos'>pos</a> array to position <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004285
Cary Clark777eede2018-11-09 16:04:58 -05004286Pass 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 +00004287
Cary Clark777eede2018-11-09 16:04:58 -05004288<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004289
4290### Parameters
4291
Cary Clark682c58d2018-05-16 07:07:07 -04004292<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004293 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004294 </tr>
4295 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
4296 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
4297 </tr>
4298 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004299 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004300 </tr>
4301 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004302 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004303 </tr>
4304 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4305 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004306 </tr>
4307</table>
4308
4309### Return Value
4310
Cary Clarka523d2d2017-08-30 08:58:10 -04004311number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004312
Cary Clarke9c5a152018-11-21 11:45:57 -05004313<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.
4314</div>
Cary Clark12799e12017-07-28 15:18:29 -04004315
Cary Clark682c58d2018-05-16 07:07:07 -04004316<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004317
4318---
Cary Clark12799e12017-07-28 15:18:29 -04004319
Cary Clark682c58d2018-05-16 07:07:07 -04004320<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05004321int <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 -05004322 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals)const
Cary Clark12799e12017-07-28 15:18:29 -04004323</pre>
4324
Cary Clark777eede2018-11-09 16:04:58 -05004325Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
4326<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.
4327The 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 -04004328the <a href='undocumented#String'>string</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004329Uses <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 -05004330and <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>.
4331Uses <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 +00004332
Cary Clark777eede2018-11-09 16:04:58 -05004333Pass 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 +00004334
Cary Clark777eede2018-11-09 16:04:58 -05004335<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004336
4337### Parameters
4338
Cary Clark682c58d2018-05-16 07:07:07 -04004339<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004340 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004341 </tr>
4342 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
4343 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
4344 </tr>
4345 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004346 <td>positions of each <a href='undocumented#Glyph'>glyph</a> on x-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004347 </tr>
4348 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004349 <td>position of each <a href='undocumented#Glyph'>glyph</a> on y-axis</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004350 </tr>
4351 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004352 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004353 </tr>
4354 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4355 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004356 </tr>
4357</table>
4358
4359### Return Value
4360
4361number of intersections; may be zero
4362
Cary Clarke9c5a152018-11-21 11:45:57 -05004363<div><a href='undocumented#Text'>Text</a> intercepts do not take stroke thickness into consideration.
4364</div>
Cary Clark12799e12017-07-28 15:18:29 -04004365
Cary Clark682c58d2018-05-16 07:07:07 -04004366<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004367
4368---
Cary Clark12799e12017-07-28 15:18:29 -04004369
Cary Clark682c58d2018-05-16 07:07:07 -04004370<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004371int <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 -04004372</pre>
4373
Cary Clark777eede2018-11-09 16:04:58 -05004374Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
4375<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.
4376The 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 -04004377the <a href='undocumented#String'>string</a>.
Cary Clark777eede2018-11-09 16:04:58 -05004378Uses <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
4379and <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 +00004380Uses run array to position <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00004381
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004382<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 -05004383
Cary Clark777eede2018-11-09 16:04:58 -05004384Pass 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 +00004385
Cary Clark777eede2018-11-09 16:04:58 -05004386<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004387
4388### Parameters
4389
Cary Clark682c58d2018-05-16 07:07:07 -04004390<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004391 <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 -04004392 </tr>
4393 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004394 <td>lower and upper <a href='undocumented#Line'>line</a> parallel to the advance</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004395 </tr>
4396 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
4397 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004398 </tr>
4399</table>
4400
4401### Return Value
4402
4403number of intersections; may be zero
4404
4405### Example
4406
skia-bookmaker53079c32018-11-25 04:03:02 +00004407<div><fiddle-embed name="728ea9089f233a71a1062e364b8c73fa"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004408
Cary Clark77b3f3a2018-11-07 14:59:03 -05004409<a name='SkPaint_getFontBounds'></a>
4410
4411---
4412
4413<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004414<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>()const
Cary Clark77b3f3a2018-11-07 14:59:03 -05004415</pre>
4416
4417Returns the union of bounds of all <a href='undocumented#Glyph'>glyphs</a>.
Cary Clarkcb6bef02018-11-29 12:05:25 -05004418Returned dimensions are computed by <a href='SkFont_Reference#Font'>font</a> manager from <a href='SkFont_Reference#Font'>font</a> <a href='undocumented#Data'>data</a>,
4419ignoring <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting. Includes <a href='SkFont_Reference#Font'>font</a> metrics, but not fake bold or <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark77b3f3a2018-11-07 14:59:03 -05004420
Cary Clark777eede2018-11-09 16:04:58 -05004421If <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a> is large, <a href='undocumented#Text'>text</a> scale is one, and <a href='undocumented#Text'>text</a> skew is zero,
Cary Clark77b3f3a2018-11-07 14:59:03 -05004422returns the bounds as:
4423{ <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>::<a href='#SkFontMetrics_fXMin'>fXMin</a>, <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>::<a href='#SkFontMetrics_fTop'>fTop</a>, <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>::<a href='#SkFontMetrics_fXMax'>fXMax</a>, <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>::<a href='#SkFontMetrics_fBottom'>fBottom</a> }.
4424
4425### Return Value
4426
4427union of bounds of all <a href='undocumented#Glyph'>glyphs</a>
4428
4429### Example
4430
skia-bookmaker1e1ba0e2018-11-13 05:36:58 +00004431<div><fiddle-embed name="f29d005a75efd4746c6744004a0cb421">
Cary Clark77b3f3a2018-11-07 14:59:03 -05004432
4433#### Example Output
4434
4435~~~~
4436metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4437font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4438~~~~
4439
4440</fiddle-embed></div>
4441
Cary Clark682c58d2018-05-16 07:07:07 -04004442<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004443
4444---
Cary Clark12799e12017-07-28 15:18:29 -04004445
Cary Clark682c58d2018-05-16 07:07:07 -04004446<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004447bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04004448</pre>
4449
Cary Clark777eede2018-11-09 16:04:58 -05004450Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing;
4451otherwise, the <a href='SkPaint_Reference#SkPaint'>SkPaint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004452
Cary Clark777eede2018-11-09 16:04:58 -05004453Returns true if, for example, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> combined with <a href='SkColor_Reference#Alpha'>alpha</a> computes a
4454new <a href='SkColor_Reference#Alpha'>alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004455
4456### Return Value
4457
Cary Clark777eede2018-11-09 16:04:58 -05004458true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004459
4460### Example
4461
Cary Clark83647062018-07-18 16:21:51 -04004462<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04004463
4464#### Example Output
4465
4466~~~~
4467initial nothing to draw: false
4468blend dst nothing to draw: true
4469blend src over nothing to draw: false
4470alpha 0 nothing to draw: true
4471~~~~
4472
4473</fiddle-embed></div>
4474
Cary Clarka90ea222018-10-16 10:30:28 -04004475<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05004476