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