1#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy, Default, PartialOrd, Ord)]
2pub struct Color { pub r: u8, pub g: u8, pub b: u8, pub a: u8 }
3
4impl Color {
5 pub const fn new(r: u8, g: u8, b: u8, a: u8) -> Self { Self { r, g, b, a } }
6
7 pub const fn from_hex(hex: u32) -> Self {
8 let [r, g, b, a] = hex.to_be_bytes();
9 Self { r, g, b, a }
10 }
11
12 pub const fn r(mut self, x: u8) -> Self { self.r = x; self }
13 pub const fn g(mut self, x: u8) -> Self { self.g = x; self }
14 pub const fn b(mut self, x: u8) -> Self { self.b = x; self }
15 pub const fn a(mut self, x: u8) -> Self { self.a = x; self }
16}
17
18impl From<u32> for Color {
19 fn from(x: u32) -> Self { Self::from_hex(x) }
20}
21
22impl std::fmt::Display for Color {
23 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24 write!(f, "#{:02x}{:02x}{:02x}{:02x}", self.r, self.g, self.b, self.a)
25 }
26}
27
28macro_rules! def_colors {
29 ($($name:ident => $r:expr, $g:expr, $b:expr);+$(;)?) => {
30 $(pub static $name: Color = Color { r: $r, g: $g, b: $b, a: 0xFF };)+
31 };
32}
33
34def_colors! {
35 ALICEBLUE => 0xF0, 0xF8, 0xFF;
36 ANTIQUEWHITE => 0xFA, 0xEB, 0xD7;
37 AQUA => 0x00, 0xFF, 0xFF;
38 AQUAMARINE => 0x7F, 0xFF, 0xD4;
39 AZURE => 0xF0, 0xFF, 0xFF;
40 BEIGE => 0xF5, 0xF5, 0xDC;
41 BISQUE => 0xFF, 0xE4, 0xC4;
42 BLACK => 0x00, 0x00, 0x00;
43 BLANCHEDALMOND => 0xFF, 0xEB, 0xCD;
44 BLUE => 0x00, 0x00, 0xFF;
45 BLUEVIOLET => 0x8A, 0x2B, 0xE2;
46 BROWN => 0xA5, 0x2A, 0x2A;
47 BURLYWOOD => 0xDE, 0xB8, 0x87;
48 CADETBLUE => 0x5F, 0x9E, 0xA0;
49 CHARTREUSE => 0x7F, 0xFF, 0x00;
50 CHOCOLATE => 0xD2, 0x69, 0x1E;
51 CORAL => 0xFF, 0x7F, 0x50;
52 CORNFLOWERBLUE => 0x64, 0x95, 0xED;
53 CORNSILK => 0xFF, 0xF8, 0xDC;
54 CRIMSON => 0xDC, 0x14, 0x3C;
55 CYAN => 0x00, 0xFF, 0xFF;
56 DARKBLUE => 0x00, 0x00, 0x8B;
57 DARKCYAN => 0x00, 0x8B, 0x8B;
58 DARKGOLDENROD => 0xB8, 0x86, 0x0B;
59 DARKGRAY => 0xA9, 0xA9, 0xA9;
60 DARKGREEN => 0x00, 0x64, 0x00;
61 DARKKHAKI => 0xBD, 0xB7, 0x6B;
62 DARKMAGENTA => 0x8B, 0x00, 0x8B;
63 DARKOLIVEGREEN => 0x55, 0x6B, 0x2F;
64 DARKORANGE => 0xFF, 0x8C, 0x00;
65 DARKORCHID => 0x99, 0x32, 0xCC;
66 DARKRED => 0x8B, 0x00, 0x00;
67 DARKSALMON => 0xE9, 0x96, 0x7A;
68 DARKSEAGREEN => 0x8F, 0xBC, 0x8F;
69 DARKSLATEBLUE => 0x48, 0x3D, 0x8B;
70 DARKSLATEGRAY => 0x2F, 0x4F, 0x4F;
71 DARKTURQUOISE => 0x00, 0xCE, 0xD1;
72 DARKVIOLET => 0x94, 0x00, 0xD3;
73 DEEPPINK => 0xFF, 0x14, 0x93;
74 DEEPSKYBLUE => 0x00, 0xBF, 0xFF;
75 DIMGRAY => 0x69, 0x69, 0x69;
76 DODGERBLUE => 0x1E, 0x90, 0xFF;
77 FIREBRICK => 0xB2, 0x22, 0x22;
78 FLORALWHITE => 0xFF, 0xFA, 0xF0;
79 FORESTGREEN => 0x22, 0x8B, 0x22;
80 FUCHSIA => 0xFF, 0x00, 0xFF;
81 GAINSBORO => 0xDC, 0xDC, 0xDC;
82 GHOSTWHITE => 0xF8, 0xF8, 0xFF;
83 GOLD => 0xFF, 0xD7, 0x00;
84 GOLDENROD => 0xDA, 0xA5, 0x20;
85 GRAY => 0x80, 0x80, 0x80;
86 GREEN => 0x00, 0x80, 0x00;
87 GREENYELLOW => 0xAD, 0xFF, 0x2F;
88 HONEYDEW => 0xF0, 0xFF, 0xF0;
89 HOTPINK => 0xFF, 0x69, 0xB4;
90 INDIANRED => 0xCD, 0x5C, 0x5C;
91 INDIGO => 0x4B, 0x00, 0x82;
92 IVORY => 0xFF, 0xFF, 0xF0;
93 KHAKI => 0xF0, 0xE6, 0x8C;
94 LAVENDER => 0xE6, 0xE6, 0xFA;
95 LAVENDERBLUSH => 0xFF, 0xF0, 0xF5;
96 LAWNGREEN => 0x7C, 0xFC, 0x00;
97 LEMONCHIFFON => 0xFF, 0xFA, 0xCD;
98 LIGHTBLUE => 0xAD, 0xD8, 0xE6;
99 LIGHTCORAL => 0xF0, 0x80, 0x80;
100 LIGHTCYAN => 0xE0, 0xFF, 0xFF;
101 LIGHTGOLDENRODYELLOW => 0xFA, 0xFA, 0xD2;
102 LIGHTGREEN => 0x90, 0xEE, 0x90;
103 LIGHTGREY => 0xD3, 0xD3, 0xD3;
104 LIGHTPINK => 0xFF, 0xB6, 0xC1;
105 LIGHTSALMON => 0xFF, 0xA0, 0x7A;
106 LIGHTSEAGREEN => 0x20, 0xB2, 0xAA;
107 LIGHTSKYBLUE => 0x87, 0xCE, 0xFA;
108 LIGHTSLATEGRAY => 0x77, 0x88, 0x99;
109 LIGHTSTEELBLUE => 0xB0, 0xC4, 0xDE;
110 LIGHTYELLOW => 0xFF, 0xFF, 0xE0;
111 LIME => 0x00, 0xFF, 0x00;
112 LIMEGREEN => 0x32, 0xCD, 0x32;
113 LINEN => 0xFA, 0xF0, 0xE6;
114 MAGENTA => 0xFF, 0x00, 0xFF;
115 MAROON => 0x80, 0x00, 0x00;
116 MEDIUMAQUAMARINE => 0x66, 0xCD, 0xAA;
117 MEDIUMBLUE => 0x00, 0x00, 0xCD;
118 MEDIUMORCHID => 0xBA, 0x55, 0xD3;
119 MEDIUMPURPLE => 0x93, 0x70, 0xDB;
120 MEDIUMSEAGREEN => 0x3C, 0xB3, 0x71;
121 MEDIUMSLATEBLUE => 0x7B, 0x68, 0xEE;
122 MEDIUMSPRINGGREEN => 0x00, 0xFA, 0x9A;
123 MEDIUMTURQUOISE => 0x48, 0xD1, 0xCC;
124 MEDIUMVIOLETRED => 0xC7, 0x15, 0x85;
125 MIDNIGHTBLUE => 0x19, 0x19, 0x70;
126 MINTCREAM => 0xF5, 0xFF, 0xFA;
127 MISTYROSE => 0xFF, 0xE4, 0xE1;
128 MOCCASIN => 0xFF, 0xE4, 0xB5;
129 NAVAJOWHITE => 0xFF, 0xDE, 0xAD;
130 NAVY => 0x00, 0x00, 0x80;
131 OLDLACE => 0xFD, 0xF5, 0xE6;
132 OLIVE => 0x80, 0x80, 0x00;
133 OLIVEDRAB => 0x6B, 0x8E, 0x23;
134 ORANGE => 0xFF, 0xA5, 0x00;
135 ORANGERED => 0xFF, 0x45, 0x00;
136 ORCHID => 0xDA, 0x70, 0xD6;
137 PALEGOLDENROD => 0xEE, 0xE8, 0xAA;
138 PALEGREEN => 0x98, 0xFB, 0x98;
139 PALEVIOLETRED => 0xDB, 0x70, 0x93;
140 PAPAYAWHIP => 0xFF, 0xEF, 0xD5;
141 PEACHPUFF => 0xFF, 0xDA, 0xB9;
142 PERU => 0xCD, 0x85, 0x3F;
143 PINK => 0xFF, 0xC0, 0xCB;
144 PLUM => 0xDD, 0xA0, 0xDD;
145 POWDERBLUE => 0xB0, 0xE0, 0xE6;
146 PURPLE => 0x80, 0x00, 0x80;
147 RED => 0xFF, 0x00, 0x00;
148 ROSYBROWN => 0xBC, 0x8F, 0x8F;
149 ROYALBLUE => 0x41, 0x69, 0xE1;
150 SADDLEBROWN => 0x8B, 0x45, 0x13;
151 SALMON => 0xFA, 0x80, 0x72;
152 SANDYBROWN => 0xFA, 0xA4, 0x60;
153 SEAGREEN => 0x2E, 0x8B, 0x57;
154 SEASHELL => 0xFF, 0xF5, 0xEE;
155 SIENNA => 0xA0, 0x52, 0x2D;
156 SILVER => 0xC0, 0xC0, 0xC0;
157 SKYBLUE => 0x87, 0xCE, 0xEB;
158 SLATEBLUE => 0x6A, 0x5A, 0xCD;
159 SLATEGRAY => 0x70, 0x80, 0x90;
160 SNOW => 0xFF, 0xFA, 0xFA;
161 SPRINGGREEN => 0x00, 0xFF, 0x7F;
162 STEELBLUE => 0x46, 0x82, 0xB4;
163 TAN => 0xD2, 0xB4, 0x8C;
164 TEAL => 0x00, 0x80, 0x80;
165 THISTLE => 0xD8, 0xBF, 0xD8;
166 TOMATO => 0xFF, 0x63, 0x47;
167 TURQUOISE => 0x40, 0xE0, 0xD0;
168 VIOLET => 0xEE, 0x82, 0xEE;
169 WHEAT => 0xF5, 0xDE, 0xB3;
170 WHITE => 0xFF, 0xFF, 0xFF;
171 WHITESMOKE => 0xF5, 0xF5, 0xF5;
172 YELLOW => 0xFF, 0xFF, 0x00;
173 YELLOWGREEN => 0x9A, 0xCD, 0x32;
174}