hobo_css/
color.rs

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}