| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #include <cstdlib> |
| #include <ostream> |
| |
| #include "impeller/geometry/scalar.h" |
| |
| namespace impeller { |
| |
| struct ColorHSB; |
| |
| /** |
| * Represents a RGBA color |
| */ |
| struct Color { |
| /** |
| * The red color component (0 to 1) |
| */ |
| Scalar red = 0.0; |
| |
| /** |
| * The green color component (0 to 1) |
| */ |
| Scalar green = 0.0; |
| |
| /** |
| * The blue color component (0 to 1) |
| */ |
| Scalar blue = 0.0; |
| |
| /** |
| * The alpha component of the color (0 to 1) |
| */ |
| Scalar alpha = 0.0; |
| |
| constexpr Color() {} |
| |
| Color(const ColorHSB& hsbColor); |
| |
| constexpr Color(Scalar r, Scalar g, Scalar b, Scalar a) |
| : red(r), green(g), blue(b), alpha(a) {} |
| |
| constexpr bool operator==(const Color& c) const { |
| return red == c.red && green == c.green && blue == c.blue && |
| alpha == c.alpha; |
| } |
| |
| constexpr Color Premultiply() const { |
| return {red * alpha, green * alpha, blue * alpha, alpha}; |
| } |
| |
| constexpr Color Unpremultiply() const { |
| if (ScalarNearlyEqual(alpha, 0.0)) { |
| return Color::BlackTransparent(); |
| } |
| return {red / alpha, green / alpha, blue / alpha, alpha}; |
| } |
| |
| static constexpr Color White() { return {1.0, 1.0, 1.0, 1.0}; } |
| |
| static constexpr Color Black() { return {0.0, 0.0, 0.0, 1.0}; } |
| |
| static constexpr Color WhiteTransparent() { return {1.0, 1.0, 1.0, 0.0}; } |
| |
| static constexpr Color BlackTransparent() { return {0.0, 0.0, 0.0, 0.0}; } |
| |
| static constexpr Color Red() { return {1.0, 0.0, 0.0, 1.0}; } |
| |
| static constexpr Color Green() { return {0.0, 1.0, 0.0, 1.0}; } |
| |
| static constexpr Color Blue() { return {0.0, 0.0, 1.0, 1.0}; } |
| |
| constexpr Color WithAlpha(Scalar new_alpha) const { |
| return {red, green, blue, new_alpha}; |
| } |
| |
| static constexpr Color AliceBlue() { |
| return {240.0 / 255.0, 248.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color AntiqueWhite() { |
| return {250.0 / 255.0, 235.0 / 255.0, 215.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Aqua() { |
| return {0.0 / 255.0, 255.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color AquaMarine() { |
| return {127.0 / 255.0, 255.0 / 255.0, 212.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Azure() { |
| return {240.0 / 255.0, 255.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Beige() { |
| return {245.0 / 255.0, 245.0 / 255.0, 220.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Bisque() { |
| return {255.0 / 255.0, 228.0 / 255.0, 196.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color BlanchedAlmond() { |
| return {255.0 / 255.0, 235.0 / 255.0, 205.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color BlueViolet() { |
| return {138.0 / 255.0, 43.0 / 255.0, 226.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Brown() { |
| return {165.0 / 255.0, 42.0 / 255.0, 42.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color BurlyWood() { |
| return {222.0 / 255.0, 184.0 / 255.0, 135.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color CadetBlue() { |
| return {95.0 / 255.0, 158.0 / 255.0, 160.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Chartreuse() { |
| return {127.0 / 255.0, 255.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Chocolate() { |
| return {210.0 / 255.0, 105.0 / 255.0, 30.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Coral() { |
| return {255.0 / 255.0, 127.0 / 255.0, 80.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color CornflowerBlue() { |
| return {100.0 / 255.0, 149.0 / 255.0, 237.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Cornsilk() { |
| return {255.0 / 255.0, 248.0 / 255.0, 220.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Crimson() { |
| return {220.0 / 255.0, 20.0 / 255.0, 60.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Cyan() { |
| return {0.0 / 255.0, 255.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkBlue() { |
| return {0.0 / 255.0, 0.0 / 255.0, 139.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkCyan() { |
| return {0.0 / 255.0, 139.0 / 255.0, 139.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkGoldenrod() { |
| return {184.0 / 255.0, 134.0 / 255.0, 11.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkGray() { |
| return {169.0 / 255.0, 169.0 / 255.0, 169.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkGreen() { |
| return {0.0 / 255.0, 100.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkGrey() { |
| return {169.0 / 255.0, 169.0 / 255.0, 169.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkKhaki() { |
| return {189.0 / 255.0, 183.0 / 255.0, 107.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkMagenta() { |
| return {139.0 / 255.0, 0.0 / 255.0, 139.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkOliveGreen() { |
| return {85.0 / 255.0, 107.0 / 255.0, 47.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkOrange() { |
| return {255.0 / 255.0, 140.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkOrchid() { |
| return {153.0 / 255.0, 50.0 / 255.0, 204.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkRed() { |
| return {139.0 / 255.0, 0.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkSalmon() { |
| return {233.0 / 255.0, 150.0 / 255.0, 122.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkSeagreen() { |
| return {143.0 / 255.0, 188.0 / 255.0, 143.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkSlateBlue() { |
| return {72.0 / 255.0, 61.0 / 255.0, 139.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkSlateGray() { |
| return {47.0 / 255.0, 79.0 / 255.0, 79.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkSlateGrey() { |
| return {47.0 / 255.0, 79.0 / 255.0, 79.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkTurquoise() { |
| return {0.0 / 255.0, 206.0 / 255.0, 209.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DarkViolet() { |
| return {148.0 / 255.0, 0.0 / 255.0, 211.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DeepPink() { |
| return {255.0 / 255.0, 20.0 / 255.0, 147.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DeepSkyBlue() { |
| return {0.0 / 255.0, 191.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DimGray() { |
| return {105.0 / 255.0, 105.0 / 255.0, 105.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DimGrey() { |
| return {105.0 / 255.0, 105.0 / 255.0, 105.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color DodgerBlue() { |
| return {30.0 / 255.0, 144.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Firebrick() { |
| return {178.0 / 255.0, 34.0 / 255.0, 34.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color FloralWhite() { |
| return {255.0 / 255.0, 250.0 / 255.0, 240.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color ForestGreen() { |
| return {34.0 / 255.0, 139.0 / 255.0, 34.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Fuchsia() { |
| return {255.0 / 255.0, 0.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Gainsboro() { |
| return {220.0 / 255.0, 220.0 / 255.0, 220.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Ghostwhite() { |
| return {248.0 / 255.0, 248.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Gold() { |
| return {255.0 / 255.0, 215.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Goldenrod() { |
| return {218.0 / 255.0, 165.0 / 255.0, 32.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Gray() { |
| return {128.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color GreenYellow() { |
| return {173.0 / 255.0, 255.0 / 255.0, 47.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Grey() { |
| return {128.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Honeydew() { |
| return {240.0 / 255.0, 255.0 / 255.0, 240.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color HotPink() { |
| return {255.0 / 255.0, 105.0 / 255.0, 180.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color IndianRed() { |
| return {205.0 / 255.0, 92.0 / 255.0, 92.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Indigo() { |
| return {75.0 / 255.0, 0.0 / 255.0, 130.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Ivory() { |
| return {255.0 / 255.0, 255.0 / 255.0, 240.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Khaki() { |
| return {240.0 / 255.0, 230.0 / 255.0, 140.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Lavender() { |
| return {230.0 / 255.0, 230.0 / 255.0, 250.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LavenderBlush() { |
| return {255.0 / 255.0, 240.0 / 255.0, 245.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LawnGreen() { |
| return {124.0 / 255.0, 252.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LemonChiffon() { |
| return {255.0 / 255.0, 250.0 / 255.0, 205.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightBlue() { |
| return {173.0 / 255.0, 216.0 / 255.0, 230.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightCoral() { |
| return {240.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightCyan() { |
| return {224.0 / 255.0, 255.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightGoldenrodYellow() { |
| return {50.0 / 255.0, 250.0 / 255.0, 210.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightGray() { |
| return {211.0 / 255.0, 211.0 / 255.0, 211.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightGreen() { |
| return {144.0 / 255.0, 238.0 / 255.0, 144.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightGrey() { |
| return {211.0 / 255.0, 211.0 / 255.0, 211.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightPink() { |
| return {255.0 / 255.0, 182.0 / 255.0, 193.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightSalmon() { |
| return {255.0 / 255.0, 160.0 / 255.0, 122.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightSeaGreen() { |
| return {32.0 / 255.0, 178.0 / 255.0, 170.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightSkyBlue() { |
| return {135.0 / 255.0, 206.0 / 255.0, 250.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightSlateGray() { |
| return {119.0 / 255.0, 136.0 / 255.0, 153.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightSlateGrey() { |
| return {119.0 / 255.0, 136.0 / 255.0, 153.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightSteelBlue() { |
| return {176.0 / 255.0, 196.0 / 255.0, 222.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LightYellow() { |
| return {255.0 / 255.0, 255.0 / 255.0, 224.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Lime() { |
| return {0.0 / 255.0, 255.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color LimeGreen() { |
| return {50.0 / 255.0, 205.0 / 255.0, 50.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Linen() { |
| return {250.0 / 255.0, 240.0 / 255.0, 230.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Magenta() { |
| return {255.0 / 255.0, 0.0 / 255.0, 255.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Maroon() { |
| return {128.0 / 255.0, 0.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MediumAquamarine() { |
| return {102.0 / 255.0, 205.0 / 255.0, 170.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MediumBlue() { |
| return {0.0 / 255.0, 0.0 / 255.0, 205.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MediumOrchid() { |
| return {186.0 / 255.0, 85.0 / 255.0, 211.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MediumPurple() { |
| return {147.0 / 255.0, 112.0 / 255.0, 219.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MediumSeagreen() { |
| return {60.0 / 255.0, 179.0 / 255.0, 113.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MediumSlateBlue() { |
| return {123.0 / 255.0, 104.0 / 255.0, 238.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MediumSpringGreen() { |
| return {0.0 / 255.0, 250.0 / 255.0, 154.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MediumTurquoise() { |
| return {72.0 / 255.0, 209.0 / 255.0, 204.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MediumVioletRed() { |
| return {199.0 / 255.0, 21.0 / 255.0, 133.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MidnightBlue() { |
| return {25.0 / 255.0, 25.0 / 255.0, 112.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MintCream() { |
| return {245.0 / 255.0, 255.0 / 255.0, 250.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color MistyRose() { |
| return {255.0 / 255.0, 228.0 / 255.0, 225.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Moccasin() { |
| return {255.0 / 255.0, 228.0 / 255.0, 181.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color NavajoWhite() { |
| return {255.0 / 255.0, 222.0 / 255.0, 173.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Navy() { |
| return {0.0 / 255.0, 0.0 / 255.0, 128.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color OldLace() { |
| return {253.0 / 255.0, 245.0 / 255.0, 230.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Olive() { |
| return {128.0 / 255.0, 128.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color OliveDrab() { |
| return {107.0 / 255.0, 142.0 / 255.0, 35.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Orange() { |
| return {255.0 / 255.0, 165.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color OrangeRed() { |
| return {255.0 / 255.0, 69.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Orchid() { |
| return {218.0 / 255.0, 112.0 / 255.0, 214.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color PaleGoldenrod() { |
| return {238.0 / 255.0, 232.0 / 255.0, 170.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color PaleGreen() { |
| return {152.0 / 255.0, 251.0 / 255.0, 152.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color PaleTurquoise() { |
| return {175.0 / 255.0, 238.0 / 255.0, 238.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color PaleVioletRed() { |
| return {219.0 / 255.0, 112.0 / 255.0, 147.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color PapayaWhip() { |
| return {255.0 / 255.0, 239.0 / 255.0, 213.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Peachpuff() { |
| return {255.0 / 255.0, 218.0 / 255.0, 185.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Peru() { |
| return {205.0 / 255.0, 133.0 / 255.0, 63.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Pink() { |
| return {255.0 / 255.0, 192.0 / 255.0, 203.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Plum() { |
| return {221.0 / 255.0, 160.0 / 255.0, 221.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color PowderBlue() { |
| return {176.0 / 255.0, 224.0 / 255.0, 230.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Purple() { |
| return {128.0 / 255.0, 0.0 / 255.0, 128.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color RosyBrown() { |
| return {188.0 / 255.0, 143.0 / 255.0, 143.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color RoyalBlue() { |
| return {65.0 / 255.0, 105.0 / 255.0, 225.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color SaddleBrown() { |
| return {139.0 / 255.0, 69.0 / 255.0, 19.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Salmon() { |
| return {250.0 / 255.0, 128.0 / 255.0, 114.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color SandyBrown() { |
| return {244.0 / 255.0, 164.0 / 255.0, 96.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Seagreen() { |
| return {46.0 / 255.0, 139.0 / 255.0, 87.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Seashell() { |
| return {255.0 / 255.0, 245.0 / 255.0, 238.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Sienna() { |
| return {160.0 / 255.0, 82.0 / 255.0, 45.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Silver() { |
| return {192.0 / 255.0, 192.0 / 255.0, 192.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color SkyBlue() { |
| return {135.0 / 255.0, 206.0 / 255.0, 235.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color SlateBlue() { |
| return {106.0 / 255.0, 90.0 / 255.0, 205.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color SlateGray() { |
| return {112.0 / 255.0, 128.0 / 255.0, 144.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color SlateGrey() { |
| return {112.0 / 255.0, 128.0 / 255.0, 144.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Snow() { |
| return {255.0 / 255.0, 250.0 / 255.0, 250.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color SpringGreen() { |
| return {0.0 / 255.0, 255.0 / 255.0, 127.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color SteelBlue() { |
| return {70.0 / 255.0, 130.0 / 255.0, 180.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Tan() { |
| return {210.0 / 255.0, 180.0 / 255.0, 140.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Teal() { |
| return {0.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Thistle() { |
| return {216.0 / 255.0, 191.0 / 255.0, 216.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Tomato() { |
| return {255.0 / 255.0, 99.0 / 255.0, 71.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Turquoise() { |
| return {64.0 / 255.0, 224.0 / 255.0, 208.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Violet() { |
| return {238.0 / 255.0, 130.0 / 255.0, 238.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Wheat() { |
| return {245.0 / 255.0, 222.0 / 255.0, 179.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Whitesmoke() { |
| return {245.0 / 255.0, 245.0 / 255.0, 245.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color Yellow() { |
| return {255.0 / 255.0, 255.0 / 255.0, 0.0 / 255.0, 1.0}; |
| } |
| |
| static constexpr Color YellowGreen() { |
| return {154.0 / 255.0, 205.0 / 255.0, 50.0 / 255.0, 1.0}; |
| } |
| |
| static Color Random() { |
| return { |
| static_cast<Scalar>((std::rand() % 255) / 255.0), // |
| static_cast<Scalar>((std::rand() % 255) / 255.0), // |
| static_cast<Scalar>((std::rand() % 255) / 255.0), // |
| 1.0 // |
| }; |
| } |
| |
| constexpr bool IsTransparent() const { return alpha == 0.0; } |
| |
| constexpr bool IsOpaque() const { return alpha == 1.0; } |
| }; |
| |
| /** |
| * Represents a color by its constituent hue, saturation, brightness and alpha |
| */ |
| struct ColorHSB { |
| /** |
| * The hue of the color (0 to 1) |
| */ |
| Scalar hue; |
| |
| /** |
| * The saturation of the color (0 to 1) |
| */ |
| Scalar saturation; |
| |
| /** |
| * The brightness of the color (0 to 1) |
| */ |
| Scalar brightness; |
| |
| /** |
| * The alpha of the color (0 to 1) |
| */ |
| Scalar alpha; |
| |
| constexpr ColorHSB(Scalar h, Scalar s, Scalar b, Scalar a) |
| : hue(h), saturation(s), brightness(b), alpha(a) {} |
| |
| static ColorHSB FromRGB(Color rgb); |
| |
| Color ToRGBA() const; |
| }; |
| |
| static_assert(sizeof(Color) == 4 * sizeof(Scalar)); |
| |
| } // namespace impeller |
| |
| namespace std { |
| |
| inline std::ostream& operator<<(std::ostream& out, const impeller::Color& c) { |
| out << "(" << c.red << ", " << c.green << ", " << c.blue << ", " << c.alpha |
| << ")"; |
| return out; |
| } |
| |
| } // namespace std |