Flutter Impeller
color.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef FLUTTER_IMPELLER_GEOMETRY_COLOR_H_
6 #define FLUTTER_IMPELLER_GEOMETRY_COLOR_H_
7 
8 #include <stdint.h>
9 #include <algorithm>
10 #include <array>
11 #include <cstdint>
12 #include <cstdlib>
13 #include <ostream>
14 #include <type_traits>
15 
18 
19 #define IMPELLER_FOR_EACH_BLEND_MODE(V) \
20  V(Clear) \
21  V(Source) \
22  V(Destination) \
23  V(SourceOver) \
24  V(DestinationOver) \
25  V(SourceIn) \
26  V(DestinationIn) \
27  V(SourceOut) \
28  V(DestinationOut) \
29  V(SourceATop) \
30  V(DestinationATop) \
31  V(Xor) \
32  V(Plus) \
33  V(Modulate) \
34  V(Screen) \
35  V(Overlay) \
36  V(Darken) \
37  V(Lighten) \
38  V(ColorDodge) \
39  V(ColorBurn) \
40  V(HardLight) \
41  V(SoftLight) \
42  V(Difference) \
43  V(Exclusion) \
44  V(Multiply) \
45  V(Hue) \
46  V(Saturation) \
47  V(Color) \
48  V(Luminosity)
49 
50 namespace impeller {
51 
52 struct ColorHSB;
53 struct Vector4;
54 
56 
57 /// All blend modes assume that both the source (fragment output) and
58 /// destination (first color attachment) have colors with premultiplied alpha.
59 enum class BlendMode : uint8_t {
60  // The following blend modes are able to be used as pipeline blend modes or
61  // via `BlendFilterContents`.
62  kClear = 0,
63  kSource,
67  kSourceIn,
69  kSourceOut,
73  kXor,
74  kPlus,
75  kModulate,
76 
77  // The following blend modes use equations that are not available for
78  // pipelines on most graphics devices without extensions, and so they are
79  // only able to be used via `BlendFilterContents`.
80  kScreen,
81  kOverlay,
82  kDarken,
83  kLighten,
85  kColorBurn,
86  kHardLight,
87  kSoftLight,
89  kExclusion,
90  kMultiply,
91  kHue,
93  kColor,
95 
97 };
98 
99 const char* BlendModeToString(BlendMode blend_mode);
100 
101 /// 4x5 matrix for transforming the color and alpha components of a Bitmap.
102 ///
103 /// [ a, b, c, d, e,
104 /// f, g, h, i, j,
105 /// k, l, m, n, o,
106 /// p, q, r, s, t ]
107 ///
108 /// When applied to a color [R, G, B, A], the resulting color is computed as:
109 ///
110 /// R’ = a*R + b*G + c*B + d*A + e;
111 /// G’ = f*R + g*G + h*B + i*A + j;
112 /// B’ = k*R + l*G + m*B + n*A + o;
113 /// A’ = p*R + q*G + r*B + s*A + t;
114 ///
115 /// That resulting color [R’, G’, B’, A’] then has each channel clamped to the 0
116 /// to 1 range.
117 struct ColorMatrix {
119 };
120 
121 /**
122  * Represents a RGBA color
123  */
124 struct Color {
125  /**
126  * The red color component (0 to 1)
127  */
128  Scalar red = 0.0;
129 
130  /**
131  * The green color component (0 to 1)
132  */
133  Scalar green = 0.0;
134 
135  /**
136  * The blue color component (0 to 1)
137  */
138  Scalar blue = 0.0;
139 
140  /**
141  * The alpha component of the color (0 to 1)
142  */
143  Scalar alpha = 0.0;
144 
145  constexpr Color() {}
146 
147  explicit Color(const ColorHSB& hsbColor);
148 
149  explicit Color(const Vector4& value);
150 
151  constexpr Color(Scalar r, Scalar g, Scalar b, Scalar a)
152  : red(r), green(g), blue(b), alpha(a) {}
153 
154  static constexpr Color MakeRGBA8(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
155  return Color(
156  static_cast<Scalar>(r) / 255.0f, static_cast<Scalar>(g) / 255.0f,
157  static_cast<Scalar>(b) / 255.0f, static_cast<Scalar>(a) / 255.0f);
158  }
159 
160  /// @brief Convert this color to a 32-bit representation.
161  static constexpr uint32_t ToIColor(Color color) {
162  return (((std::lround(color.alpha * 255.0f) & 0xff) << 24) |
163  ((std::lround(color.red * 255.0f) & 0xff) << 16) |
164  ((std::lround(color.green * 255.0f) & 0xff) << 8) |
165  ((std::lround(color.blue * 255.0f) & 0xff) << 0)) &
166  0xFFFFFFFF;
167  }
168 
169  constexpr inline bool operator==(const Color& c) const {
172  }
173 
174  constexpr inline Color operator+(const Color& c) const {
175  return {red + c.red, green + c.green, blue + c.blue, alpha + c.alpha};
176  }
177 
178  template <class T, class = std::enable_if_t<std::is_arithmetic_v<T>>>
179  constexpr inline Color operator+(T value) const {
180  auto v = static_cast<Scalar>(value);
181  return {red + v, green + v, blue + v, alpha + v};
182  }
183 
184  constexpr inline Color operator-(const Color& c) const {
185  return {red - c.red, green - c.green, blue - c.blue, alpha - c.alpha};
186  }
187 
188  template <class T, class = std::enable_if_t<std::is_arithmetic_v<T>>>
189  constexpr inline Color operator-(T value) const {
190  auto v = static_cast<Scalar>(value);
191  return {red - v, green - v, blue - v, alpha - v};
192  }
193 
194  constexpr inline Color operator*(const Color& c) const {
195  return {red * c.red, green * c.green, blue * c.blue, alpha * c.alpha};
196  }
197 
198  template <class T, class = std::enable_if_t<std::is_arithmetic_v<T>>>
199  constexpr inline Color operator*(T value) const {
200  auto v = static_cast<Scalar>(value);
201  return {red * v, green * v, blue * v, alpha * v};
202  }
203 
204  constexpr inline Color operator/(const Color& c) const {
205  return {red * c.red, green * c.green, blue * c.blue, alpha * c.alpha};
206  }
207 
208  template <class T, class = std::enable_if_t<std::is_arithmetic_v<T>>>
209  constexpr inline Color operator/(T value) const {
210  auto v = static_cast<Scalar>(value);
211  return {red / v, green / v, blue / v, alpha / v};
212  }
213 
214  constexpr Color Premultiply() const {
215  return {red * alpha, green * alpha, blue * alpha, alpha};
216  }
217 
218  constexpr Color Unpremultiply() const {
219  if (ScalarNearlyEqual(alpha, 0.0f)) {
220  return Color::BlackTransparent();
221  }
222  return {red / alpha, green / alpha, blue / alpha, alpha};
223  }
224 
225  /**
226  * @brief Return a color that is linearly interpolated between colors a
227  * and b, according to the value of t.
228  *
229  * @param a The lower color.
230  * @param b The upper color.
231  * @param t A value between 0.0f and 1.0f, inclusive.
232  * @return constexpr Color
233  */
234  constexpr static Color Lerp(Color a, Color b, Scalar t) {
235  return a + (b - a) * t;
236  }
237 
238  constexpr Color Clamp01() const {
239  return Color(std::clamp(red, 0.0f, 1.0f), std::clamp(green, 0.0f, 1.0f),
240  std::clamp(blue, 0.0f, 1.0f), std::clamp(alpha, 0.0f, 1.0f));
241  }
242 
243  /**
244  * @brief Convert to R8G8B8A8 representation.
245  *
246  * @return constexpr std::array<u_int8, 4>
247  */
248  constexpr std::array<uint8_t, 4> ToR8G8B8A8() const {
249  uint8_t r = std::round(red * 255.0f);
250  uint8_t g = std::round(green * 255.0f);
251  uint8_t b = std::round(blue * 255.0f);
252  uint8_t a = std::round(alpha * 255.0f);
253  return {r, g, b, a};
254  }
255 
256  static constexpr Color White() { return {1.0f, 1.0f, 1.0f, 1.0f}; }
257 
258  static constexpr Color Black() { return {0.0f, 0.0f, 0.0f, 1.0f}; }
259 
260  static constexpr Color WhiteTransparent() { return {1.0f, 1.0f, 1.0f, 0.0f}; }
261 
262  static constexpr Color BlackTransparent() { return {0.0f, 0.0f, 0.0f, 0.0f}; }
263 
264  static constexpr Color Red() { return {1.0f, 0.0f, 0.0f, 1.0f}; }
265 
266  static constexpr Color Green() { return {0.0f, 1.0f, 0.0f, 1.0f}; }
267 
268  static constexpr Color Blue() { return {0.0f, 0.0f, 1.0f, 1.0f}; }
269 
270  constexpr Color WithAlpha(Scalar new_alpha) const {
271  return {red, green, blue, new_alpha};
272  }
273 
274  static constexpr Color AliceBlue() {
275  return {240.0f / 255.0f, 248.0f / 255.0f, 255.0f / 255.0f, 1.0f};
276  }
277 
278  static constexpr Color AntiqueWhite() {
279  return {250.0f / 255.0f, 235.0f / 255.0f, 215.0f / 255.0f, 1.0f};
280  }
281 
282  static constexpr Color Aqua() {
283  return {0.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1.0f};
284  }
285 
286  static constexpr Color AquaMarine() {
287  return {127.0f / 255.0f, 255.0f / 255.0f, 212.0f / 255.0f, 1.0f};
288  }
289 
290  static constexpr Color Azure() {
291  return {240.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1.0f};
292  }
293 
294  static constexpr Color Beige() {
295  return {245.0f / 255.0f, 245.0f / 255.0f, 220.0f / 255.0f, 1.0f};
296  }
297 
298  static constexpr Color Bisque() {
299  return {255.0f / 255.0f, 228.0f / 255.0f, 196.0f / 255.0f, 1.0f};
300  }
301 
302  static constexpr Color BlanchedAlmond() {
303  return {255.0f / 255.0f, 235.0f / 255.0f, 205.0f / 255.0f, 1.0f};
304  }
305 
306  static constexpr Color BlueViolet() {
307  return {138.0f / 255.0f, 43.0f / 255.0f, 226.0f / 255.0f, 1.0f};
308  }
309 
310  static constexpr Color Brown() {
311  return {165.0f / 255.0f, 42.0f / 255.0f, 42.0f / 255.0f, 1.0f};
312  }
313 
314  static constexpr Color BurlyWood() {
315  return {222.0f / 255.0f, 184.0f / 255.0f, 135.0f / 255.0f, 1.0f};
316  }
317 
318  static constexpr Color CadetBlue() {
319  return {95.0f / 255.0f, 158.0f / 255.0f, 160.0f / 255.0f, 1.0f};
320  }
321 
322  static constexpr Color Chartreuse() {
323  return {127.0f / 255.0f, 255.0f / 255.0f, 0.0f / 255.0f, 1.0f};
324  }
325 
326  static constexpr Color Chocolate() {
327  return {210.0f / 255.0f, 105.0f / 255.0f, 30.0f / 255.0f, 1.0f};
328  }
329 
330  static constexpr Color Coral() {
331  return {255.0f / 255.0f, 127.0f / 255.0f, 80.0f / 255.0f, 1.0f};
332  }
333 
334  static constexpr Color CornflowerBlue() {
335  return {100.0f / 255.0f, 149.0f / 255.0f, 237.0f / 255.0f, 1.0f};
336  }
337 
338  static constexpr Color Cornsilk() {
339  return {255.0f / 255.0f, 248.0f / 255.0f, 220.0f / 255.0f, 1.0f};
340  }
341 
342  static constexpr Color Crimson() {
343  return {220.0f / 255.0f, 20.0f / 255.0f, 60.0f / 255.0f, 1.0f};
344  }
345 
346  static constexpr Color Cyan() {
347  return {0.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1.0f};
348  }
349 
350  static constexpr Color DarkBlue() {
351  return {0.0f / 255.0f, 0.0f / 255.0f, 139.0f / 255.0f, 1.0f};
352  }
353 
354  static constexpr Color DarkCyan() {
355  return {0.0f / 255.0f, 139.0f / 255.0f, 139.0f / 255.0f, 1.0f};
356  }
357 
358  static constexpr Color DarkGoldenrod() {
359  return {184.0f / 255.0f, 134.0f / 255.0f, 11.0f / 255.0f, 1.0f};
360  }
361 
362  static constexpr Color DarkGray() {
363  return {169.0f / 255.0f, 169.0f / 255.0f, 169.0f / 255.0f, 1.0f};
364  }
365 
366  static constexpr Color DarkGreen() {
367  return {0.0f / 255.0f, 100.0f / 255.0f, 0.0f / 255.0f, 1.0f};
368  }
369 
370  static constexpr Color DarkGrey() {
371  return {169.0f / 255.0f, 169.0f / 255.0f, 169.0f / 255.0f, 1.0f};
372  }
373 
374  static constexpr Color DarkKhaki() {
375  return {189.0f / 255.0f, 183.0f / 255.0f, 107.0f / 255.0f, 1.0f};
376  }
377 
378  static constexpr Color DarkMagenta() {
379  return {139.0f / 255.0f, 0.0f / 255.0f, 139.0f / 255.0f, 1.0f};
380  }
381 
382  static constexpr Color DarkOliveGreen() {
383  return {85.0f / 255.0f, 107.0f / 255.0f, 47.0f / 255.0f, 1.0f};
384  }
385 
386  static constexpr Color DarkOrange() {
387  return {255.0f / 255.0f, 140.0f / 255.0f, 0.0f / 255.0f, 1.0f};
388  }
389 
390  static constexpr Color DarkOrchid() {
391  return {153.0f / 255.0f, 50.0f / 255.0f, 204.0f / 255.0f, 1.0f};
392  }
393 
394  static constexpr Color DarkRed() {
395  return {139.0f / 255.0f, 0.0f / 255.0f, 0.0f / 255.0f, 1.0f};
396  }
397 
398  static constexpr Color DarkSalmon() {
399  return {233.0f / 255.0f, 150.0f / 255.0f, 122.0f / 255.0f, 1.0f};
400  }
401 
402  static constexpr Color DarkSeagreen() {
403  return {143.0f / 255.0f, 188.0f / 255.0f, 143.0f / 255.0f, 1.0f};
404  }
405 
406  static constexpr Color DarkSlateBlue() {
407  return {72.0f / 255.0f, 61.0f / 255.0f, 139.0f / 255.0f, 1.0f};
408  }
409 
410  static constexpr Color DarkSlateGray() {
411  return {47.0f / 255.0f, 79.0f / 255.0f, 79.0f / 255.0f, 1.0f};
412  }
413 
414  static constexpr Color DarkSlateGrey() {
415  return {47.0f / 255.0f, 79.0f / 255.0f, 79.0f / 255.0f, 1.0f};
416  }
417 
418  static constexpr Color DarkTurquoise() {
419  return {0.0f / 255.0f, 206.0f / 255.0f, 209.0f / 255.0f, 1.0f};
420  }
421 
422  static constexpr Color DarkViolet() {
423  return {148.0f / 255.0f, 0.0f / 255.0f, 211.0f / 255.0f, 1.0f};
424  }
425 
426  static constexpr Color DeepPink() {
427  return {255.0f / 255.0f, 20.0f / 255.0f, 147.0f / 255.0f, 1.0f};
428  }
429 
430  static constexpr Color DeepSkyBlue() {
431  return {0.0f / 255.0f, 191.0f / 255.0f, 255.0f / 255.0f, 1.0f};
432  }
433 
434  static constexpr Color DimGray() {
435  return {105.0f / 255.0f, 105.0f / 255.0f, 105.0f / 255.0f, 1.0f};
436  }
437 
438  static constexpr Color DimGrey() {
439  return {105.0f / 255.0f, 105.0f / 255.0f, 105.0f / 255.0f, 1.0f};
440  }
441 
442  static constexpr Color DodgerBlue() {
443  return {30.0f / 255.0f, 144.0f / 255.0f, 255.0f / 255.0f, 1.0f};
444  }
445 
446  static constexpr Color Firebrick() {
447  return {178.0f / 255.0f, 34.0f / 255.0f, 34.0f / 255.0f, 1.0f};
448  }
449 
450  static constexpr Color FloralWhite() {
451  return {255.0f / 255.0f, 250.0f / 255.0f, 240.0f / 255.0f, 1.0f};
452  }
453 
454  static constexpr Color ForestGreen() {
455  return {34.0f / 255.0f, 139.0f / 255.0f, 34.0f / 255.0f, 1.0f};
456  }
457 
458  static constexpr Color Fuchsia() {
459  return {255.0f / 255.0f, 0.0f / 255.0f, 255.0f / 255.0f, 1.0f};
460  }
461 
462  static constexpr Color Gainsboro() {
463  return {220.0f / 255.0f, 220.0f / 255.0f, 220.0f / 255.0f, 1.0f};
464  }
465 
466  static constexpr Color Ghostwhite() {
467  return {248.0f / 255.0f, 248.0f / 255.0f, 255.0f / 255.0f, 1.0f};
468  }
469 
470  static constexpr Color Gold() {
471  return {255.0f / 255.0f, 215.0f / 255.0f, 0.0f / 255.0f, 1.0f};
472  }
473 
474  static constexpr Color Goldenrod() {
475  return {218.0f / 255.0f, 165.0f / 255.0f, 32.0f / 255.0f, 1.0f};
476  }
477 
478  static constexpr Color Gray() {
479  return {128.0f / 255.0f, 128.0f / 255.0f, 128.0f / 255.0f, 1.0f};
480  }
481 
482  static constexpr Color GreenYellow() {
483  return {173.0f / 255.0f, 255.0f / 255.0f, 47.0f / 255.0f, 1.0f};
484  }
485 
486  static constexpr Color Grey() {
487  return {128.0f / 255.0f, 128.0f / 255.0f, 128.0f / 255.0f, 1.0f};
488  }
489 
490  static constexpr Color Honeydew() {
491  return {240.0f / 255.0f, 255.0f / 255.0f, 240.0f / 255.0f, 1.0f};
492  }
493 
494  static constexpr Color HotPink() {
495  return {255.0f / 255.0f, 105.0f / 255.0f, 180.0f / 255.0f, 1.0f};
496  }
497 
498  static constexpr Color IndianRed() {
499  return {205.0f / 255.0f, 92.0f / 255.0f, 92.0f / 255.0f, 1.0f};
500  }
501 
502  static constexpr Color Indigo() {
503  return {75.0f / 255.0f, 0.0f / 255.0f, 130.0f / 255.0f, 1.0f};
504  }
505 
506  static constexpr Color Ivory() {
507  return {255.0f / 255.0f, 255.0f / 255.0f, 240.0f / 255.0f, 1.0f};
508  }
509 
510  static constexpr Color Khaki() {
511  return {240.0f / 255.0f, 230.0f / 255.0f, 140.0f / 255.0f, 1.0f};
512  }
513 
514  static constexpr Color Lavender() {
515  return {230.0f / 255.0f, 230.0f / 255.0f, 250.0f / 255.0f, 1.0f};
516  }
517 
518  static constexpr Color LavenderBlush() {
519  return {255.0f / 255.0f, 240.0f / 255.0f, 245.0f / 255.0f, 1.0f};
520  }
521 
522  static constexpr Color LawnGreen() {
523  return {124.0f / 255.0f, 252.0f / 255.0f, 0.0f / 255.0f, 1.0f};
524  }
525 
526  static constexpr Color LemonChiffon() {
527  return {255.0f / 255.0f, 250.0f / 255.0f, 205.0f / 255.0f, 1.0f};
528  }
529 
530  static constexpr Color LightBlue() {
531  return {173.0f / 255.0f, 216.0f / 255.0f, 230.0f / 255.0f, 1.0f};
532  }
533 
534  static constexpr Color LightCoral() {
535  return {240.0f / 255.0f, 128.0f / 255.0f, 128.0f / 255.0f, 1.0f};
536  }
537 
538  static constexpr Color LightCyan() {
539  return {224.0f / 255.0f, 255.0f / 255.0f, 255.0f / 255.0f, 1.0f};
540  }
541 
542  static constexpr Color LightGoldenrodYellow() {
543  return {50.0f / 255.0f, 250.0f / 255.0f, 210.0f / 255.0f, 1.0f};
544  }
545 
546  static constexpr Color LightGray() {
547  return {211.0f / 255.0f, 211.0f / 255.0f, 211.0f / 255.0f, 1.0f};
548  }
549 
550  static constexpr Color LightGreen() {
551  return {144.0f / 255.0f, 238.0f / 255.0f, 144.0f / 255.0f, 1.0f};
552  }
553 
554  static constexpr Color LightGrey() {
555  return {211.0f / 255.0f, 211.0f / 255.0f, 211.0f / 255.0f, 1.0f};
556  }
557 
558  static constexpr Color LightPink() {
559  return {255.0f / 255.0f, 182.0f / 255.0f, 193.0f / 255.0f, 1.0f};
560  }
561 
562  static constexpr Color LightSalmon() {
563  return {255.0f / 255.0f, 160.0f / 255.0f, 122.0f / 255.0f, 1.0f};
564  }
565 
566  static constexpr Color LightSeaGreen() {
567  return {32.0f / 255.0f, 178.0f / 255.0f, 170.0f / 255.0f, 1.0f};
568  }
569 
570  static constexpr Color LightSkyBlue() {
571  return {135.0f / 255.0f, 206.0f / 255.0f, 250.0f / 255.0f, 1.0f};
572  }
573 
574  static constexpr Color LightSlateGray() {
575  return {119.0f / 255.0f, 136.0f / 255.0f, 153.0f / 255.0f, 1.0f};
576  }
577 
578  static constexpr Color LightSlateGrey() {
579  return {119.0f / 255.0f, 136.0f / 255.0f, 153.0f / 255.0f, 1.0f};
580  }
581 
582  static constexpr Color LightSteelBlue() {
583  return {176.0f / 255.0f, 196.0f / 255.0f, 222.0f / 255.0f, 1.0f};
584  }
585 
586  static constexpr Color LightYellow() {
587  return {255.0f / 255.0f, 255.0f / 255.0f, 224.0f / 255.0f, 1.0f};
588  }
589 
590  static constexpr Color Lime() {
591  return {0.0f / 255.0f, 255.0f / 255.0f, 0.0f / 255.0f, 1.0f};
592  }
593 
594  static constexpr Color LimeGreen() {
595  return {50.0f / 255.0f, 205.0f / 255.0f, 50.0f / 255.0f, 1.0f};
596  }
597 
598  static constexpr Color Linen() {
599  return {250.0f / 255.0f, 240.0f / 255.0f, 230.0f / 255.0f, 1.0f};
600  }
601 
602  static constexpr Color Magenta() {
603  return {255.0f / 255.0f, 0.0f / 255.0f, 255.0f / 255.0f, 1.0f};
604  }
605 
606  static constexpr Color Maroon() {
607  return {128.0f / 255.0f, 0.0f / 255.0f, 0.0f / 255.0f, 1.0f};
608  }
609 
610  static constexpr Color MediumAquamarine() {
611  return {102.0f / 255.0f, 205.0f / 255.0f, 170.0f / 255.0f, 1.0f};
612  }
613 
614  static constexpr Color MediumBlue() {
615  return {0.0f / 255.0f, 0.0f / 255.0f, 205.0f / 255.0f, 1.0f};
616  }
617 
618  static constexpr Color MediumOrchid() {
619  return {186.0f / 255.0f, 85.0f / 255.0f, 211.0f / 255.0f, 1.0f};
620  }
621 
622  static constexpr Color MediumPurple() {
623  return {147.0f / 255.0f, 112.0f / 255.0f, 219.0f / 255.0f, 1.0f};
624  }
625 
626  static constexpr Color MediumSeagreen() {
627  return {60.0f / 255.0f, 179.0f / 255.0f, 113.0f / 255.0f, 1.0f};
628  }
629 
630  static constexpr Color MediumSlateBlue() {
631  return {123.0f / 255.0f, 104.0f / 255.0f, 238.0f / 255.0f, 1.0f};
632  }
633 
634  static constexpr Color MediumSpringGreen() {
635  return {0.0f / 255.0f, 250.0f / 255.0f, 154.0f / 255.0f, 1.0f};
636  }
637 
638  static constexpr Color MediumTurquoise() {
639  return {72.0f / 255.0f, 209.0f / 255.0f, 204.0f / 255.0f, 1.0f};
640  }
641 
642  static constexpr Color MediumVioletRed() {
643  return {199.0f / 255.0f, 21.0f / 255.0f, 133.0f / 255.0f, 1.0f};
644  }
645 
646  static constexpr Color MidnightBlue() {
647  return {25.0f / 255.0f, 25.0f / 255.0f, 112.0f / 255.0f, 1.0f};
648  }
649 
650  static constexpr Color MintCream() {
651  return {245.0f / 255.0f, 255.0f / 255.0f, 250.0f / 255.0f, 1.0f};
652  }
653 
654  static constexpr Color MistyRose() {
655  return {255.0f / 255.0f, 228.0f / 255.0f, 225.0f / 255.0f, 1.0f};
656  }
657 
658  static constexpr Color Moccasin() {
659  return {255.0f / 255.0f, 228.0f / 255.0f, 181.0f / 255.0f, 1.0f};
660  }
661 
662  static constexpr Color NavajoWhite() {
663  return {255.0f / 255.0f, 222.0f / 255.0f, 173.0f / 255.0f, 1.0f};
664  }
665 
666  static constexpr Color Navy() {
667  return {0.0f / 255.0f, 0.0f / 255.0f, 128.0f / 255.0f, 1.0f};
668  }
669 
670  static constexpr Color OldLace() {
671  return {253.0f / 255.0f, 245.0f / 255.0f, 230.0f / 255.0f, 1.0f};
672  }
673 
674  static constexpr Color Olive() {
675  return {128.0f / 255.0f, 128.0f / 255.0f, 0.0f / 255.0f, 1.0f};
676  }
677 
678  static constexpr Color OliveDrab() {
679  return {107.0f / 255.0f, 142.0f / 255.0f, 35.0f / 255.0f, 1.0f};
680  }
681 
682  static constexpr Color Orange() {
683  return {255.0f / 255.0f, 165.0f / 255.0f, 0.0f / 255.0f, 1.0f};
684  }
685 
686  static constexpr Color OrangeRed() {
687  return {255.0f / 255.0f, 69.0f / 255.0f, 0.0f / 255.0f, 1.0f};
688  }
689 
690  static constexpr Color Orchid() {
691  return {218.0f / 255.0f, 112.0f / 255.0f, 214.0f / 255.0f, 1.0f};
692  }
693 
694  static constexpr Color PaleGoldenrod() {
695  return {238.0f / 255.0f, 232.0f / 255.0f, 170.0f / 255.0f, 1.0f};
696  }
697 
698  static constexpr Color PaleGreen() {
699  return {152.0f / 255.0f, 251.0f / 255.0f, 152.0f / 255.0f, 1.0f};
700  }
701 
702  static constexpr Color PaleTurquoise() {
703  return {175.0f / 255.0f, 238.0f / 255.0f, 238.0f / 255.0f, 1.0f};
704  }
705 
706  static constexpr Color PaleVioletRed() {
707  return {219.0f / 255.0f, 112.0f / 255.0f, 147.0f / 255.0f, 1.0f};
708  }
709 
710  static constexpr Color PapayaWhip() {
711  return {255.0f / 255.0f, 239.0f / 255.0f, 213.0f / 255.0f, 1.0f};
712  }
713 
714  static constexpr Color Peachpuff() {
715  return {255.0f / 255.0f, 218.0f / 255.0f, 185.0f / 255.0f, 1.0f};
716  }
717 
718  static constexpr Color Peru() {
719  return {205.0f / 255.0f, 133.0f / 255.0f, 63.0f / 255.0f, 1.0f};
720  }
721 
722  static constexpr Color Pink() {
723  return {255.0f / 255.0f, 192.0f / 255.0f, 203.0f / 255.0f, 1.0f};
724  }
725 
726  static constexpr Color Plum() {
727  return {221.0f / 255.0f, 160.0f / 255.0f, 221.0f / 255.0f, 1.0f};
728  }
729 
730  static constexpr Color PowderBlue() {
731  return {176.0f / 255.0f, 224.0f / 255.0f, 230.0f / 255.0f, 1.0f};
732  }
733 
734  static constexpr Color Purple() {
735  return {128.0f / 255.0f, 0.0f / 255.0f, 128.0f / 255.0f, 1.0f};
736  }
737 
738  static constexpr Color RosyBrown() {
739  return {188.0f / 255.0f, 143.0f / 255.0f, 143.0f / 255.0f, 1.0f};
740  }
741 
742  static constexpr Color RoyalBlue() {
743  return {65.0f / 255.0f, 105.0f / 255.0f, 225.0f / 255.0f, 1.0f};
744  }
745 
746  static constexpr Color SaddleBrown() {
747  return {139.0f / 255.0f, 69.0f / 255.0f, 19.0f / 255.0f, 1.0f};
748  }
749 
750  static constexpr Color Salmon() {
751  return {250.0f / 255.0f, 128.0f / 255.0f, 114.0f / 255.0f, 1.0f};
752  }
753 
754  static constexpr Color SandyBrown() {
755  return {244.0f / 255.0f, 164.0f / 255.0f, 96.0f / 255.0f, 1.0f};
756  }
757 
758  static constexpr Color Seagreen() {
759  return {46.0f / 255.0f, 139.0f / 255.0f, 87.0f / 255.0f, 1.0f};
760  }
761 
762  static constexpr Color Seashell() {
763  return {255.0f / 255.0f, 245.0f / 255.0f, 238.0f / 255.0f, 1.0f};
764  }
765 
766  static constexpr Color Sienna() {
767  return {160.0f / 255.0f, 82.0f / 255.0f, 45.0f / 255.0f, 1.0f};
768  }
769 
770  static constexpr Color Silver() {
771  return {192.0f / 255.0f, 192.0f / 255.0f, 192.0f / 255.0f, 1.0f};
772  }
773 
774  static constexpr Color SkyBlue() {
775  return {135.0f / 255.0f, 206.0f / 255.0f, 235.0f / 255.0f, 1.0f};
776  }
777 
778  static constexpr Color SlateBlue() {
779  return {106.0f / 255.0f, 90.0f / 255.0f, 205.0f / 255.0f, 1.0f};
780  }
781 
782  static constexpr Color SlateGray() {
783  return {112.0f / 255.0f, 128.0f / 255.0f, 144.0f / 255.0f, 1.0f};
784  }
785 
786  static constexpr Color SlateGrey() {
787  return {112.0f / 255.0f, 128.0f / 255.0f, 144.0f / 255.0f, 1.0f};
788  }
789 
790  static constexpr Color Snow() {
791  return {255.0f / 255.0f, 250.0f / 255.0f, 250.0f / 255.0f, 1.0f};
792  }
793 
794  static constexpr Color SpringGreen() {
795  return {0.0f / 255.0f, 255.0f / 255.0f, 127.0f / 255.0f, 1.0f};
796  }
797 
798  static constexpr Color SteelBlue() {
799  return {70.0f / 255.0f, 130.0f / 255.0f, 180.0f / 255.0f, 1.0f};
800  }
801 
802  static constexpr Color Tan() {
803  return {210.0f / 255.0f, 180.0f / 255.0f, 140.0f / 255.0f, 1.0f};
804  }
805 
806  static constexpr Color Teal() {
807  return {0.0f / 255.0f, 128.0f / 255.0f, 128.0f / 255.0f, 1.0f};
808  }
809 
810  static constexpr Color Thistle() {
811  return {216.0f / 255.0f, 191.0f / 255.0f, 216.0f / 255.0f, 1.0f};
812  }
813 
814  static constexpr Color Tomato() {
815  return {255.0f / 255.0f, 99.0f / 255.0f, 71.0f / 255.0f, 1.0f};
816  }
817 
818  static constexpr Color Turquoise() {
819  return {64.0f / 255.0f, 224.0f / 255.0f, 208.0f / 255.0f, 1.0f};
820  }
821 
822  static constexpr Color Violet() {
823  return {238.0f / 255.0f, 130.0f / 255.0f, 238.0f / 255.0f, 1.0f};
824  }
825 
826  static constexpr Color Wheat() {
827  return {245.0f / 255.0f, 222.0f / 255.0f, 179.0f / 255.0f, 1.0f};
828  }
829 
830  static constexpr Color Whitesmoke() {
831  return {245.0f / 255.0f, 245.0f / 255.0f, 245.0f / 255.0f, 1.0f};
832  }
833 
834  static constexpr Color Yellow() {
835  return {255.0f / 255.0f, 255.0f / 255.0f, 0.0f / 255.0f, 1.0f};
836  }
837 
838  static constexpr Color YellowGreen() {
839  return {154.0f / 255.0f, 205.0f / 255.0f, 50.0f / 255.0f, 1.0f};
840  }
841 
842  static Color Random() {
843  return {
844  // This method is not used for cryptographic purposes.
845  // NOLINTBEGIN(clang-analyzer-security.insecureAPI.rand)
846  static_cast<Scalar>((std::rand() % 255) / 255.0f), //
847  static_cast<Scalar>((std::rand() % 255) / 255.0f), //
848  static_cast<Scalar>((std::rand() % 255) / 255.0f), //
849  // NOLINTEND(clang-analyzer-security.insecureAPI.rand)
850  1.0f //
851 
852  };
853  }
854 
855  /// @brief Blends an unpremultiplied destination color into a given
856  /// unpremultiplied source color to form a new unpremultiplied color.
857  ///
858  /// If either the source or destination are premultiplied, the result
859  /// will be incorrect.
860  Color Blend(Color source, BlendMode blend_mode) const;
861 
862  /// @brief A color filter that transforms colors through a 4x5 color matrix.
863  ///
864  /// This filter can be used to change the saturation of pixels, convert
865  /// from YUV to RGB, etc.
866  ///
867  /// Each channel of the output color is clamped to the 0 to 1 range.
868  ///
869  /// @see `ColorMatrix`
870  Color ApplyColorMatrix(const ColorMatrix& color_matrix) const;
871 
872  /// @brief Convert the color from linear space to sRGB space.
873  ///
874  /// The color is assumed to be unpremultiplied. If the color is
875  /// premultipled, the conversion output will be incorrect.
876  Color LinearToSRGB() const;
877 
878  /// @brief Convert the color from sRGB space to linear space.
879  ///
880  /// The color is assumed to be unpremultiplied. If the color is
881  /// premultipled, the conversion output will be incorrect.
882  Color SRGBToLinear() const;
883 
884  constexpr bool IsTransparent() const { return alpha == 0.0f; }
885 
886  constexpr bool IsOpaque() const { return alpha == 1.0f; }
887 };
888 
889 template <class T, class = std::enable_if_t<std::is_arithmetic_v<T>>>
890 constexpr inline Color operator+(T value, const Color& c) {
891  return c + static_cast<Scalar>(value);
892 }
893 
894 template <class T, class = std::enable_if_t<std::is_arithmetic_v<T>>>
895 constexpr inline Color operator-(T value, const Color& c) {
896  auto v = static_cast<Scalar>(value);
897  return {v - c.red, v - c.green, v - c.blue, v - c.alpha};
898 }
899 
900 template <class T, class = std::enable_if_t<std::is_arithmetic_v<T>>>
901 constexpr inline Color operator*(T value, const Color& c) {
902  return c * static_cast<Scalar>(value);
903 }
904 
905 template <class T, class = std::enable_if_t<std::is_arithmetic_v<T>>>
906 constexpr inline Color operator/(T value, const Color& c) {
907  auto v = static_cast<Scalar>(value);
908  return {v / c.red, v / c.green, v / c.blue, v / c.alpha};
909 }
910 
911 std::string ColorToString(const Color& color);
912 
913 /**
914  * Represents a color by its constituent hue, saturation, brightness and alpha
915  */
916 struct ColorHSB {
917  /**
918  * The hue of the color (0 to 1)
919  */
921 
922  /**
923  * The saturation of the color (0 to 1)
924  */
926 
927  /**
928  * The brightness of the color (0 to 1)
929  */
931 
932  /**
933  * The alpha of the color (0 to 1)
934  */
936 
937  constexpr ColorHSB(Scalar h, Scalar s, Scalar b, Scalar a)
938  : hue(h), saturation(s), brightness(b), alpha(a) {}
939 
940  static ColorHSB FromRGB(Color rgb);
941 
942  Color ToRGBA() const;
943 };
944 
945 static_assert(sizeof(Color) == 4 * sizeof(Scalar));
946 
947 } // namespace impeller
948 
949 namespace std {
950 
951 inline std::ostream& operator<<(std::ostream& out, const impeller::Color& c) {
952  out << "(" << c.red << ", " << c.green << ", " << c.blue << ", " << c.alpha
953  << ")";
954  return out;
955 }
956 
957 } // namespace std
958 
959 #endif // FLUTTER_IMPELLER_GEOMETRY_COLOR_H_
impeller::Color::DarkMagenta
static constexpr Color DarkMagenta()
Definition: color.h:378
impeller::Color::operator/
constexpr Color operator/(T value) const
Definition: color.h:209
impeller::Color::Blue
static constexpr Color Blue()
Definition: color.h:268
impeller::Color::Navy
static constexpr Color Navy()
Definition: color.h:666
impeller::Color::SaddleBrown
static constexpr Color SaddleBrown()
Definition: color.h:746
impeller::Color::DeepPink
static constexpr Color DeepPink()
Definition: color.h:426
impeller::Color::operator*
constexpr Color operator*(T value) const
Definition: color.h:199
impeller::Color::DimGray
static constexpr Color DimGray()
Definition: color.h:434
impeller::BlendModeToString
const char * BlendModeToString(BlendMode blend_mode)
Definition: color.cc:47
impeller::Color::Beige
static constexpr Color Beige()
Definition: color.h:294
impeller::Color::Cyan
static constexpr Color Cyan()
Definition: color.h:346
impeller::Color::MediumOrchid
static constexpr Color MediumOrchid()
Definition: color.h:618
impeller::BlendMode::kDestinationATop
@ kDestinationATop
impeller::ColorToString
std::string ColorToString(const Color &color)
Definition: color.cc:410
impeller::Color::DarkSalmon
static constexpr Color DarkSalmon()
Definition: color.h:398
impeller::Color::PaleTurquoise
static constexpr Color PaleTurquoise()
Definition: color.h:702
impeller::Color::SandyBrown
static constexpr Color SandyBrown()
Definition: color.h:754
impeller::Color::YellowGreen
static constexpr Color YellowGreen()
Definition: color.h:838
impeller::Scalar
float Scalar
Definition: scalar.h:18
impeller::Color::DarkGray
static constexpr Color DarkGray()
Definition: color.h:362
impeller::Color::Seashell
static constexpr Color Seashell()
Definition: color.h:762
impeller::Color::DeepSkyBlue
static constexpr Color DeepSkyBlue()
Definition: color.h:430
impeller::Color::Red
static constexpr Color Red()
Definition: color.h:264
impeller::Color::ForestGreen
static constexpr Color ForestGreen()
Definition: color.h:454
impeller::Color::Color
constexpr Color()
Definition: color.h:145
impeller::Color::BlanchedAlmond
static constexpr Color BlanchedAlmond()
Definition: color.h:302
impeller::Color::Khaki
static constexpr Color Khaki()
Definition: color.h:510
impeller::Color::Lavender
static constexpr Color Lavender()
Definition: color.h:514
impeller::ColorHSB::brightness
Scalar brightness
Definition: color.h:930
impeller::Color::Silver
static constexpr Color Silver()
Definition: color.h:770
impeller::Color::operator+
constexpr Color operator+(T value) const
Definition: color.h:179
impeller::BlendMode
BlendMode
Definition: color.h:59
impeller::Color::MakeRGBA8
static constexpr Color MakeRGBA8(uint8_t r, uint8_t g, uint8_t b, uint8_t a)
Definition: color.h:154
impeller::Color
Definition: color.h:124
impeller::Color::MediumAquamarine
static constexpr Color MediumAquamarine()
Definition: color.h:610
impeller::Color::Indigo
static constexpr Color Indigo()
Definition: color.h:502
impeller::Color::Unpremultiply
constexpr Color Unpremultiply() const
Definition: color.h:218
impeller::Color::Tan
static constexpr Color Tan()
Definition: color.h:802
impeller::Color::IsTransparent
constexpr bool IsTransparent() const
Definition: color.h:884
impeller::Color::SlateBlue
static constexpr Color SlateBlue()
Definition: color.h:778
impeller::Color::LightSkyBlue
static constexpr Color LightSkyBlue()
Definition: color.h:570
impeller::Color::Teal
static constexpr Color Teal()
Definition: color.h:806
impeller::Color::LightSlateGrey
static constexpr Color LightSlateGrey()
Definition: color.h:578
impeller::Color::Gainsboro
static constexpr Color Gainsboro()
Definition: color.h:462
impeller::Vector4
Definition: vector.h:232
impeller::Color::MediumPurple
static constexpr Color MediumPurple()
Definition: color.h:622
impeller::BlendMode::kLuminosity
@ kLuminosity
impeller::BlendMode::kSource
@ kSource
impeller::Color::Chocolate
static constexpr Color Chocolate()
Definition: color.h:326
impeller::BlendMode::kColorDodge
@ kColorDodge
impeller::BlendMode::kDestination
@ kDestination
impeller::Color::Purple
static constexpr Color Purple()
Definition: color.h:734
impeller::BlendMode::kDarken
@ kDarken
impeller::Color::PaleGreen
static constexpr Color PaleGreen()
Definition: color.h:698
impeller::Color::Turquoise
static constexpr Color Turquoise()
Definition: color.h:818
impeller::BlendMode::kColor
@ kColor
impeller::Color::alpha
Scalar alpha
Definition: color.h:143
impeller::BlendMode::kDestinationOver
@ kDestinationOver
impeller::Color::DarkSlateGrey
static constexpr Color DarkSlateGrey()
Definition: color.h:414
impeller::BlendMode::kPlus
@ kPlus
impeller::Color::MintCream
static constexpr Color MintCream()
Definition: color.h:650
std::operator<<
std::ostream & operator<<(std::ostream &out, const impeller::Color &c)
Definition: color.h:951
impeller::Color::SlateGrey
static constexpr Color SlateGrey()
Definition: color.h:786
impeller::Color::CadetBlue
static constexpr Color CadetBlue()
Definition: color.h:318
impeller::Color::operator-
constexpr Color operator-(T value) const
Definition: color.h:189
impeller::Color::CornflowerBlue
static constexpr Color CornflowerBlue()
Definition: color.h:334
impeller::BlendMode::kOverlay
@ kOverlay
impeller::Color::LightGrey
static constexpr Color LightGrey()
Definition: color.h:554
impeller::Color::DodgerBlue
static constexpr Color DodgerBlue()
Definition: color.h:442
impeller::Color::LightCyan
static constexpr Color LightCyan()
Definition: color.h:538
impeller::Color::Yellow
static constexpr Color Yellow()
Definition: color.h:834
impeller::Color::Fuchsia
static constexpr Color Fuchsia()
Definition: color.h:458
impeller::operator*
constexpr Color operator*(T value, const Color &c)
Definition: color.h:901
impeller::Color::LightGray
static constexpr Color LightGray()
Definition: color.h:546
impeller::Color::Wheat
static constexpr Color Wheat()
Definition: color.h:826
impeller::Color::Clamp01
constexpr Color Clamp01() const
Definition: color.h:238
impeller::Color::green
Scalar green
Definition: color.h:133
impeller::Color::DarkViolet
static constexpr Color DarkViolet()
Definition: color.h:422
impeller::Color::Snow
static constexpr Color Snow()
Definition: color.h:790
impeller::Color::PapayaWhip
static constexpr Color PapayaWhip()
Definition: color.h:710
impeller::BlendMode::kModulate
@ kModulate
impeller::Color::Maroon
static constexpr Color Maroon()
Definition: color.h:606
impeller::Color::NavajoWhite
static constexpr Color NavajoWhite()
Definition: color.h:662
impeller::Color::DarkGrey
static constexpr Color DarkGrey()
Definition: color.h:370
impeller::BlendMode::kSourceOut
@ kSourceOut
impeller::BlendMode::kSaturation
@ kSaturation
impeller::Color::DarkKhaki
static constexpr Color DarkKhaki()
Definition: color.h:374
impeller::Color::LightPink
static constexpr Color LightPink()
Definition: color.h:558
impeller::Color::Ivory
static constexpr Color Ivory()
Definition: color.h:506
impeller::BlendMode::kDifference
@ kDifference
impeller::ColorHSB
Definition: color.h:916
impeller::Color::PaleGoldenrod
static constexpr Color PaleGoldenrod()
Definition: color.h:694
impeller::Color::Brown
static constexpr Color Brown()
Definition: color.h:310
impeller::Color::Magenta
static constexpr Color Magenta()
Definition: color.h:602
impeller::BlendMode::kLighten
@ kLighten
impeller::Color::MidnightBlue
static constexpr Color MidnightBlue()
Definition: color.h:646
impeller::Color::DarkSlateGray
static constexpr Color DarkSlateGray()
Definition: color.h:410
impeller::Color::Goldenrod
static constexpr Color Goldenrod()
Definition: color.h:474
impeller::Color::operator*
constexpr Color operator*(const Color &c) const
Definition: color.h:194
impeller::BlendMode::kSoftLight
@ kSoftLight
impeller::Color::PowderBlue
static constexpr Color PowderBlue()
Definition: color.h:730
impeller::Color::Gray
static constexpr Color Gray()
Definition: color.h:478
impeller::BlendMode::kColorBurn
@ kColorBurn
impeller::Color::LemonChiffon
static constexpr Color LemonChiffon()
Definition: color.h:526
impeller::Color::OrangeRed
static constexpr Color OrangeRed()
Definition: color.h:686
impeller::Color::Azure
static constexpr Color Azure()
Definition: color.h:290
impeller::BlendMode::kHardLight
@ kHardLight
impeller::Color::Firebrick
static constexpr Color Firebrick()
Definition: color.h:446
impeller::Color::operator-
constexpr Color operator-(const Color &c) const
Definition: color.h:184
impeller::Color::Gold
static constexpr Color Gold()
Definition: color.h:470
impeller::Color::ToIColor
static constexpr uint32_t ToIColor(Color color)
Convert this color to a 32-bit representation.
Definition: color.h:161
impeller::Color::PaleVioletRed
static constexpr Color PaleVioletRed()
Definition: color.h:706
impeller::Color::SRGBToLinear
Color SRGBToLinear() const
Convert the color from sRGB space to linear space.
Definition: color.cc:399
impeller::ColorHSB::alpha
Scalar alpha
Definition: color.h:935
impeller::Color::Honeydew
static constexpr Color Honeydew()
Definition: color.h:490
impeller::BlendMode::kClear
@ kClear
impeller::Color::Salmon
static constexpr Color Salmon()
Definition: color.h:750
impeller::Color::LightBlue
static constexpr Color LightBlue()
Definition: color.h:530
impeller::YUVColorSpace::kBT601FullRange
@ kBT601FullRange
impeller::Color::OldLace
static constexpr Color OldLace()
Definition: color.h:670
impeller::Color::DarkBlue
static constexpr Color DarkBlue()
Definition: color.h:350
impeller::Color::IndianRed
static constexpr Color IndianRed()
Definition: color.h:498
impeller::Color::WithAlpha
constexpr Color WithAlpha(Scalar new_alpha) const
Definition: color.h:270
impeller::Color::MediumVioletRed
static constexpr Color MediumVioletRed()
Definition: color.h:642
impeller::Color::SkyBlue
static constexpr Color SkyBlue()
Definition: color.h:774
impeller::Color::DarkSlateBlue
static constexpr Color DarkSlateBlue()
Definition: color.h:406
impeller::ColorMatrix::array
Scalar array[20]
Definition: color.h:118
impeller::Color::RoyalBlue
static constexpr Color RoyalBlue()
Definition: color.h:742
impeller::Color::LightSlateGray
static constexpr Color LightSlateGray()
Definition: color.h:574
impeller::Color::operator+
constexpr Color operator+(const Color &c) const
Definition: color.h:174
impeller::Color::ToR8G8B8A8
constexpr std::array< uint8_t, 4 > ToR8G8B8A8() const
Convert to R8G8B8A8 representation.
Definition: color.h:248
impeller::Color::red
Scalar red
Definition: color.h:128
impeller::Color::MistyRose
static constexpr Color MistyRose()
Definition: color.h:654
impeller::Color::AquaMarine
static constexpr Color AquaMarine()
Definition: color.h:286
impeller::Color::LightCoral
static constexpr Color LightCoral()
Definition: color.h:534
impeller::Color::Random
static Color Random()
Definition: color.h:842
impeller::Color::LightSteelBlue
static constexpr Color LightSteelBlue()
Definition: color.h:582
impeller::Color::Grey
static constexpr Color Grey()
Definition: color.h:486
impeller::Color::Cornsilk
static constexpr Color Cornsilk()
Definition: color.h:338
impeller::Color::White
static constexpr Color White()
Definition: color.h:256
impeller::Color::Violet
static constexpr Color Violet()
Definition: color.h:822
impeller::Color::Peachpuff
static constexpr Color Peachpuff()
Definition: color.h:714
impeller::Color::Moccasin
static constexpr Color Moccasin()
Definition: color.h:658
impeller::Color::Chartreuse
static constexpr Color Chartreuse()
Definition: color.h:322
impeller::Color::Pink
static constexpr Color Pink()
Definition: color.h:722
impeller::Color::LightYellow
static constexpr Color LightYellow()
Definition: color.h:586
impeller::Color::Peru
static constexpr Color Peru()
Definition: color.h:718
impeller::Color::OliveDrab
static constexpr Color OliveDrab()
Definition: color.h:678
impeller::Color::Green
static constexpr Color Green()
Definition: color.h:266
impeller::Color::LightGreen
static constexpr Color LightGreen()
Definition: color.h:550
impeller::Color::HotPink
static constexpr Color HotPink()
Definition: color.h:494
impeller::Color::DarkOrchid
static constexpr Color DarkOrchid()
Definition: color.h:390
impeller::Color::MediumBlue
static constexpr Color MediumBlue()
Definition: color.h:614
impeller::Color::DarkOliveGreen
static constexpr Color DarkOliveGreen()
Definition: color.h:382
impeller::Color::Linen
static constexpr Color Linen()
Definition: color.h:598
impeller::ColorHSB::FromRGB
static ColorHSB FromRGB(Color rgb)
Definition: color.cc:52
impeller::YUVColorSpace::kBT601LimitedRange
@ kBT601LimitedRange
impeller::Color::Color
constexpr Color(Scalar r, Scalar g, Scalar b, Scalar a)
Definition: color.h:151
impeller::Color::SpringGreen
static constexpr Color SpringGreen()
Definition: color.h:794
impeller::operator-
constexpr Color operator-(T value, const Color &c)
Definition: color.h:895
scalar.h
impeller::Color::AntiqueWhite
static constexpr Color AntiqueWhite()
Definition: color.h:278
impeller::ColorHSB::ToRGBA
Color ToRGBA() const
Definition: color.cc:79
impeller::Color::LightSeaGreen
static constexpr Color LightSeaGreen()
Definition: color.h:566
impeller::BlendMode::kDestinationIn
@ kDestinationIn
impeller::Color::MediumTurquoise
static constexpr Color MediumTurquoise()
Definition: color.h:638
impeller::Color::Ghostwhite
static constexpr Color Ghostwhite()
Definition: color.h:466
impeller::BlendMode::kExclusion
@ kExclusion
impeller::BlendMode::kDestinationOut
@ kDestinationOut
impeller::Color::SlateGray
static constexpr Color SlateGray()
Definition: color.h:782
impeller::Color::GreenYellow
static constexpr Color GreenYellow()
Definition: color.h:482
impeller::Color::DarkCyan
static constexpr Color DarkCyan()
Definition: color.h:354
impeller::Color::Orange
static constexpr Color Orange()
Definition: color.h:682
std
Definition: comparable.h:95
impeller::Color::SteelBlue
static constexpr Color SteelBlue()
Definition: color.h:798
impeller::Color::FloralWhite
static constexpr Color FloralWhite()
Definition: color.h:450
impeller::ColorHSB::saturation
Scalar saturation
Definition: color.h:925
type_traits.h
impeller::Color::RosyBrown
static constexpr Color RosyBrown()
Definition: color.h:738
impeller::Color::DarkTurquoise
static constexpr Color DarkTurquoise()
Definition: color.h:418
impeller::ColorHSB::ColorHSB
constexpr ColorHSB(Scalar h, Scalar s, Scalar b, Scalar a)
Definition: color.h:937
impeller::saturated::b
SI b
Definition: saturated_math.h:87
impeller::Color::LightGoldenrodYellow
static constexpr Color LightGoldenrodYellow()
Definition: color.h:542
impeller::Color::BlackTransparent
static constexpr Color BlackTransparent()
Definition: color.h:262
impeller::Color::Black
static constexpr Color Black()
Definition: color.h:258
impeller::Color::MediumSpringGreen
static constexpr Color MediumSpringGreen()
Definition: color.h:634
impeller::Color::Bisque
static constexpr Color Bisque()
Definition: color.h:298
impeller::Color::Sienna
static constexpr Color Sienna()
Definition: color.h:766
impeller::BlendMode::kSourceIn
@ kSourceIn
impeller::BlendMode::kScreen
@ kScreen
impeller::Color::Thistle
static constexpr Color Thistle()
Definition: color.h:810
impeller::Color::Olive
static constexpr Color Olive()
Definition: color.h:674
impeller::ScalarNearlyEqual
constexpr bool ScalarNearlyEqual(Scalar x, Scalar y, Scalar tolerance=kEhCloseEnough)
Definition: scalar.h:30
impeller::YUVColorSpace
YUVColorSpace
Definition: color.h:55
impeller::Color::Tomato
static constexpr Color Tomato()
Definition: color.h:814
impeller::operator/
constexpr Color operator/(T value, const Color &c)
Definition: color.h:906
impeller::Color::BlueViolet
static constexpr Color BlueViolet()
Definition: color.h:306
impeller::Color::LimeGreen
static constexpr Color LimeGreen()
Definition: color.h:594
impeller::Color::Whitesmoke
static constexpr Color Whitesmoke()
Definition: color.h:830
impeller::Color::WhiteTransparent
static constexpr Color WhiteTransparent()
Definition: color.h:260
impeller::BlendMode::kLast
@ kLast
impeller::Color::LawnGreen
static constexpr Color LawnGreen()
Definition: color.h:522
impeller::Color::operator==
constexpr bool operator==(const Color &c) const
Definition: color.h:169
impeller::Color::AliceBlue
static constexpr Color AliceBlue()
Definition: color.h:274
impeller::BlendMode::kHue
@ kHue
impeller::Color::DarkGreen
static constexpr Color DarkGreen()
Definition: color.h:366
impeller::Color::DarkOrange
static constexpr Color DarkOrange()
Definition: color.h:386
impeller::Color::DarkGoldenrod
static constexpr Color DarkGoldenrod()
Definition: color.h:358
impeller::Color::DarkRed
static constexpr Color DarkRed()
Definition: color.h:394
impeller::BlendMode::kXor
@ kXor
impeller::Color::Seagreen
static constexpr Color Seagreen()
Definition: color.h:758
impeller::Color::Lerp
constexpr static Color Lerp(Color a, Color b, Scalar t)
Return a color that is linearly interpolated between colors a and b, according to the value of t.
Definition: color.h:234
impeller::Color::IsOpaque
constexpr bool IsOpaque() const
Definition: color.h:886
impeller::Color::blue
Scalar blue
Definition: color.h:138
impeller::Color::LightSalmon
static constexpr Color LightSalmon()
Definition: color.h:562
impeller::Color::Coral
static constexpr Color Coral()
Definition: color.h:330
impeller::ColorMatrix
Definition: color.h:117
impeller::Color::ApplyColorMatrix
Color ApplyColorMatrix(const ColorMatrix &color_matrix) const
A color filter that transforms colors through a 4x5 color matrix.
Definition: color.cc:378
impeller::Color::LinearToSRGB
Color LinearToSRGB() const
Convert the color from linear space to sRGB space.
Definition: color.cc:388
impeller::Color::LavenderBlush
static constexpr Color LavenderBlush()
Definition: color.h:518
impeller::Color::operator/
constexpr Color operator/(const Color &c) const
Definition: color.h:204
impeller::Color::DarkSeagreen
static constexpr Color DarkSeagreen()
Definition: color.h:402
impeller::Color::Plum
static constexpr Color Plum()
Definition: color.h:726
impeller
Definition: aiks_blur_unittests.cc:20
impeller::Color::MediumSlateBlue
static constexpr Color MediumSlateBlue()
Definition: color.h:630
impeller::Color::DimGrey
static constexpr Color DimGrey()
Definition: color.h:438
impeller::BlendMode::kSourceATop
@ kSourceATop
impeller::BlendMode::kMultiply
@ kMultiply
impeller::Color::BurlyWood
static constexpr Color BurlyWood()
Definition: color.h:314
impeller::Color::Orchid
static constexpr Color Orchid()
Definition: color.h:690
impeller::Color::Premultiply
constexpr Color Premultiply() const
Definition: color.h:214
impeller::Color::Aqua
static constexpr Color Aqua()
Definition: color.h:282
impeller::BlendMode::kSourceOver
@ kSourceOver
impeller::Color::Lime
static constexpr Color Lime()
Definition: color.h:590
impeller::Color::MediumSeagreen
static constexpr Color MediumSeagreen()
Definition: color.h:626
impeller::Color::Crimson
static constexpr Color Crimson()
Definition: color.h:342
impeller::ColorHSB::hue
Scalar hue
Definition: color.h:920
impeller::operator+
constexpr Color operator+(T value, const Color &c)
Definition: color.h:890
impeller::Color::Blend
Color Blend(Color source, BlendMode blend_mode) const
Blends an unpremultiplied destination color into a given unpremultiplied source color to form a new u...
Definition: color.cc:234