blob: 251145d0702f95a4d9325de33a148ce635492651 [file] [log] [blame]
Cary Clark2d4bf5f2018-04-16 08:37:38 -04001#Topic Color4f
Cary Clark137b8742018-05-30 09:21:49 -04002#Alias Color4f_Reference ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -04003
4#Struct SkColor4f
5
Cary Clarkffb3d682018-05-17 12:17:28 -04006Each component is stored as a 32-bit single precision floating point float value.
7All values are allowed, but only the range from zero to one is meaningful.
8
9Each component is independent of the others; fA Alpha is not Premultiplied
10with fG green, fB blue, or fR red.
11
12Values smaller than zero or larger than one are allowed. Values out of range
13may be used with Blend_Mode so that the final component is in range.
Cary Clark2d4bf5f2018-04-16 08:37:38 -040014
15#Subtopic Overview
Cary Clark682c58d2018-05-16 07:07:07 -040016#Populate
Cary Clark2d4bf5f2018-04-16 08:37:38 -040017##
18
19#Subtopic Operator
20#Populate
21##
22
23#Subtopic Member_Function
24#Populate
25##
26
27#Member float fR
Cary Clarkffb3d682018-05-17 12:17:28 -040028#Line # red component ##
29Single precision float for red ranges from no red (0.0) to full red (1.0).
Cary Clark2d4bf5f2018-04-16 08:37:38 -040030##
31
32#Member float fG
Cary Clarkffb3d682018-05-17 12:17:28 -040033#Line # green component ##
34Single precision float for green ranges from no green (0.0) to full green (1.0).
Cary Clark2d4bf5f2018-04-16 08:37:38 -040035##
36
37#Member float fB
Cary Clarkffb3d682018-05-17 12:17:28 -040038#Line # blue component ##
39Single precision float for blue ranges from no blue (0.0) to full blue (1.0).
Cary Clark2d4bf5f2018-04-16 08:37:38 -040040##
41
42#Member float fA
Cary Clarkffb3d682018-05-17 12:17:28 -040043#Line # alpha component ##
44Single precision float for Alpha ranges from no Alpha (0.0) to full Alpha (1.0).
Cary Clark2d4bf5f2018-04-16 08:37:38 -040045##
46
47# ------------------------------------------------------------------------------
48
49#Method bool operator==(const SkColor4f& other)_const
50#In Operator
Cary Clarkffb3d682018-05-17 12:17:28 -040051#Line # compares Color4f for equality ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -040052
Cary Clarkffb3d682018-05-17 12:17:28 -040053Compares Color4f with other, and returns true if all components are equivalent.
Cary Clark2d4bf5f2018-04-16 08:37:38 -040054
Cary Clarkffb3d682018-05-17 12:17:28 -040055#Param other Color4f to compare ##
56
57#Return true if Color4f equals other ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -040058
59#Example
Cary Clarkffb3d682018-05-17 12:17:28 -040060 SkColor4f colorRed = { 1, 0, 0, 1 };
61 SkColor4f colorNamedRed = SkColor4f::FromColor(SK_ColorRED);
62 SkDebugf("colorRed %c= colorNamedRed", colorRed == colorNamedRed ? '=' : '!');
63#StdOut
64colorRed == colorNamedRed
65##
Cary Clark2d4bf5f2018-04-16 08:37:38 -040066##
67
Cary Clarkffb3d682018-05-17 12:17:28 -040068#SeeAlso operator!=(const SkColor4f& other)_const
Cary Clark2d4bf5f2018-04-16 08:37:38 -040069
70#Method ##
71
72# ------------------------------------------------------------------------------
73
74#Method bool operator!=(const SkColor4f& other)_const
75#In Operator
Cary Clarkffb3d682018-05-17 12:17:28 -040076#Line # compares colors for inequality ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -040077
Cary Clarkffb3d682018-05-17 12:17:28 -040078Compares Color4f with other, and returns true if all components are not
79equivalent.
Cary Clark2d4bf5f2018-04-16 08:37:38 -040080
Cary Clarkffb3d682018-05-17 12:17:28 -040081#Param other Color4f to compare ##
82
83#Return true if Color4f is not equal to other ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -040084
85#Example
Cary Clarkffb3d682018-05-17 12:17:28 -040086 SkColor4f colorGray = { .5, .5, .5, 1 };
87 SkColor4f colorNamedGray = SkColor4f::FromColor(SK_ColorGRAY);
88 SkDebugf("colorGray %c= colorNamedGray ", colorGray != colorNamedGray ? '!' : '=');
89#StdOut
90colorGray != colorNamedGray
91##
Cary Clark2d4bf5f2018-04-16 08:37:38 -040092##
93
Cary Clarkffb3d682018-05-17 12:17:28 -040094#SeeAlso operator==(const SkColor4f& other)_const
Cary Clark2d4bf5f2018-04-16 08:37:38 -040095
96#Method ##
97
98# ------------------------------------------------------------------------------
99
100#Method const float* vec() const
Cary Clarkffb3d682018-05-17 12:17:28 -0400101#In Property
102#Line # returns array of components ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400103
Cary Clarkffb3d682018-05-17 12:17:28 -0400104Returns Color4f components as a read-only array.
105
106#Return components as read-only array ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400107
108#Example
Cary Clarkffb3d682018-05-17 12:17:28 -0400109 SkColor4f color = SkColor4f::FromColor(0x884488CC);
110 SkDebugf("red=%g green=%g blue=%g alpha=%g\n", color.fR, color.fG, color.fB, color.fA);
111 const float* array = color.vec();
112 SkDebugf("[0]=%g [1]=%g [2]=%g [3]=%g\n", array[0], array[1], array[2], array[3]);
113#StdOut
Cary Clark5b1f9532018-08-28 14:53:37 -0400114red=0.266667 green=0.533333 blue=0.8 alpha=0.533333
115[0]=0.266667 [1]=0.533333 [2]=0.8 [3]=0.533333
Cary Clarkffb3d682018-05-17 12:17:28 -0400116##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400117##
118
Cary Clarkffb3d682018-05-17 12:17:28 -0400119#SeeAlso SkColor4f
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400120
121#Method ##
122
123# ------------------------------------------------------------------------------
124
125#Method float* vec()
Cary Clarkffb3d682018-05-17 12:17:28 -0400126#In Property
127#Line # returns array of components ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400128
Cary Clarkffb3d682018-05-17 12:17:28 -0400129Returns Color4f components as a writable array.
130
131#Return components as writable array ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400132
133#Example
Cary Clarkffb3d682018-05-17 12:17:28 -0400134 SkColor4f color = SkColor4f::FromColor(0x884488CC);
135 SkDebugf("red=%g green=%g blue=%g alpha=%g\n", color.fR, color.fG, color.fB, color.fA);
136 float* array = color.vec();
137 array[3] = 1;
138 SkDebugf("[0]=%g [1]=%g [2]=%g [3]=%g\n", array[0], array[1], array[2], array[3]);
139#StdOut
Cary Clark5b1f9532018-08-28 14:53:37 -0400140red=0.266667 green=0.533333 blue=0.8 alpha=0.533333
141[0]=0.266667 [1]=0.533333 [2]=0.8 [3]=1
Cary Clarkffb3d682018-05-17 12:17:28 -0400142##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400143##
144
Cary Clarkffb3d682018-05-17 12:17:28 -0400145#SeeAlso SkColor4f
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400146
147#Method ##
148
149# ------------------------------------------------------------------------------
150
151#Method static SkColor4f Pin(float r, float g, float b, float a)
Cary Clarkffb3d682018-05-17 12:17:28 -0400152#In Utility
153#Line # sets components to valid range ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400154
Cary Clarkffb3d682018-05-17 12:17:28 -0400155Constructs and returns Color4f with each component pinned from zero to one.
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400156
Cary Clarkffb3d682018-05-17 12:17:28 -0400157#Param r red component ##
158#Param g green component ##
159#Param b blue component ##
160#Param a Alpha component ##
161
162#Return Color4f with valid components ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400163
164#Example
Cary Clarkffb3d682018-05-17 12:17:28 -0400165#Height 40
166 uint32_t storage[8];
167 SkImageInfo info = SkImageInfo::MakeN32Premul(8, 1);
168 SkPixmap pixmap(info, storage, info.minRowBytes());
169 pixmap.erase(SK_ColorWHITE);
170 SkIRect bounds = {0, 0, 1, 1};
171 SkColor4f colors[] = { SkColor4f::Pin(1.5, 0.45f, 0.0, 1),
172 SkColor4f::Pin(1, 0.45f, -0.25, 1),
173 {1.5, 0.45f, 0.0, 1},
174 {1, 0.45f, -0.25, 1},
175 };
176 for (auto color4f : colors) {
177 pixmap.erase(color4f, &bounds);
178 bounds.offset(2, 0);
179 }
180 SkBitmap bitmap;
181 canvas->scale(20, 20);
182 bitmap.installPixels(pixmap);
183 canvas->drawBitmap(bitmap, 0, 0);
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400184##
185
Cary Clarkffb3d682018-05-17 12:17:28 -0400186#SeeAlso pin() FromColor
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400187
188#Method ##
189
190# ------------------------------------------------------------------------------
191
192#Method static SkColor4f FromColor(SkColor)
Cary Clarkffb3d682018-05-17 12:17:28 -0400193#In Utility
194#Line # sets components from Color ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400195
Cary Clarkffb3d682018-05-17 12:17:28 -0400196Converts to closest Color4f.
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400197
Cary Clarkffb3d682018-05-17 12:17:28 -0400198#Param SkColor Color with Alpha, red, blue, and green components ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400199
Cary Clarkffb3d682018-05-17 12:17:28 -0400200#Return Color4f equivalent ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400201
202#Example
Cary Clarkffb3d682018-05-17 12:17:28 -0400203 uint8_t red = 77, green = 101, blue = 153, alpha = 43;
204 SkColor argb = SkColorSetARGB(alpha, red, green, blue);
205 SkColor4f color4f = SkColor4f::FromColor(argb);
206 SkDebugf("red=%g green=%g blue=%g alpha=%g\n", color4f.fR, color4f.fG, color4f.fB, color4f.fA);
207 SkColor fromColor4f = color4f.toSkColor();
208 SkDebugf("red=%d green=%d blue=%d alpha=%d\n", SkColorGetR(fromColor4f),
209 SkColorGetG(fromColor4f), SkColorGetB(fromColor4f), SkColorGetA(fromColor4f));
210#StdOut
Cary Clark5b1f9532018-08-28 14:53:37 -0400211red=0.301961 green=0.396078 blue=0.6 alpha=0.168627
Cary Clarkffb3d682018-05-17 12:17:28 -0400212red=77 green=101 blue=153 alpha=43
213##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400214##
215
Cary Clarkffb3d682018-05-17 12:17:28 -0400216#SeeAlso toSkColor
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400217
218#Method ##
219
220# ------------------------------------------------------------------------------
221
222#Method SkColor toSkColor() const
Cary Clarkffb3d682018-05-17 12:17:28 -0400223#In Utility
224#Line # returns closest Color ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400225
Cary Clarkffb3d682018-05-17 12:17:28 -0400226Converts to closest SkColor.
227
228#Return closest Color ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400229
230#Example
Cary Clarkffb3d682018-05-17 12:17:28 -0400231 float red = 0.07, green = 0.13, blue = 0.32, alpha = 0.17;
232 SkColor4f color4f = { red, green, blue, alpha };
233 SkColor argb = color4f.toSkColor();
234 SkDebugf("red=%d green=%d blue=%d alpha=%d\n", SkColorGetR(argb),
235 SkColorGetG(argb), SkColorGetB(argb), SkColorGetA(argb));
236 SkColor4f fromSkColor = SkColor4f::FromColor(argb);
237 SkDebugf("red=%g green=%g blue=%g alpha=%g\n", fromSkColor.fR, fromSkColor.fG,
238 fromSkColor.fB, fromSkColor.fA);
239#StdOut
Cary Clark5b1f9532018-08-28 14:53:37 -0400240red=18 green=33 blue=82 alpha=43
241red=0.0705882 green=0.129412 blue=0.321569 alpha=0.168627
Cary Clarkffb3d682018-05-17 12:17:28 -0400242##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400243##
244
Cary Clarkffb3d682018-05-17 12:17:28 -0400245#SeeAlso FromColor
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400246
247#Method ##
248
249# ------------------------------------------------------------------------------
250
251#Method SkColor4f pin() const
Cary Clarkffb3d682018-05-17 12:17:28 -0400252#In Utility
253#Line # sets components to valid range ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400254
Cary Clarkffb3d682018-05-17 12:17:28 -0400255Returns Color4f with all components in the range from zero to one.
256
257#Return Color4f with valid components ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400258
259#Example
Cary Clarkffb3d682018-05-17 12:17:28 -0400260#Height 40
261 uint32_t storage[8];
262 SkImageInfo info = SkImageInfo::MakeN32Premul(8, 1);
263 SkPixmap pixmap(info, storage, info.minRowBytes());
264 pixmap.erase(SK_ColorWHITE);
265 SkIRect bounds = {0, 0, 1, 1};
266 SkColor4f colors[] = { {1.5, 0.45f, 0.0, 1},
267 {1, 0.45f, -0.25, 1},
268 };
269 for (auto color4f : colors) {
270 pixmap.erase(color4f, &bounds);
271 bounds.offset(2, 0);
272 pixmap.erase(color4f.pin(), &bounds);
273 bounds.offset(2, 0);
274 }
275 SkBitmap bitmap;
276 canvas->scale(20, 20);
277 bitmap.installPixels(pixmap);
278 canvas->drawBitmap(bitmap, 0, 0);
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400279##
280
Cary Clarkffb3d682018-05-17 12:17:28 -0400281#SeeAlso Pin
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400282
283#Method ##
284
285# ------------------------------------------------------------------------------
286
287#Method SkPM4f premul() const
Cary Clarkb94f6da2018-06-08 11:54:32 -0400288#In Utility
289#Line # returns Premultiplied color; internal use only ##
290#Private
291Internal use only.
292##
293#Return Premultiplied color ##
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400294#Method ##
295
296#Struct SkColor4f ##
297
Cary Clark682c58d2018-05-16 07:07:07 -0400298#Struct SkPM4f
Cary Clarkb94f6da2018-06-08 11:54:32 -0400299#Private
300Internal use only.
301##
Cary Clark682c58d2018-05-16 07:07:07 -0400302##
303
Cary Clark2d4bf5f2018-04-16 08:37:38 -0400304#Topic Color4f ##