1pub trait IntoRgb {
6 fn into_rgb(self) -> Rgb;
8}
9
10impl<T: Into<u32>> IntoRgb for T {
11 fn into_rgb(self: T) -> Rgb {
12 Rgb::from_raw(self.into())
13 }
14}
15
16#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
19pub struct Rgb {
20 pub r: u8,
22 pub g: u8,
24 pub b: u8,
26}
27
28impl Rgb {
29 pub const ALICE_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_ALICE_BLUE);
31 pub const ANTIQUE_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_ANTIQUE_WHITE);
33 pub const AQUA: Rgb = Rgb::from_raw(pros_sys::COLOR_AQUA);
35 pub const AQUAMARINE: Rgb = Rgb::from_raw(pros_sys::COLOR_AQUAMARINE);
37 pub const AZURE: Rgb = Rgb::from_raw(pros_sys::COLOR_AZURE);
39 pub const BEIGE: Rgb = Rgb::from_raw(pros_sys::COLOR_BEIGE);
41 pub const BISQUE: Rgb = Rgb::from_raw(pros_sys::COLOR_BISQUE);
43 pub const BLACK: Rgb = Rgb::from_raw(pros_sys::COLOR_BLACK);
45 pub const BLANCHED_ALMOND: Rgb = Rgb::from_raw(pros_sys::COLOR_BLANCHED_ALMOND);
47 pub const BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_BLUE);
49 pub const BLUE_VIOLET: Rgb = Rgb::from_raw(pros_sys::COLOR_BLUE_VIOLET);
51 pub const BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_BROWN);
53 pub const BURLY_WOOD: Rgb = Rgb::from_raw(pros_sys::COLOR_BURLY_WOOD);
55 pub const CADET_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_CADET_BLUE);
57 pub const CHARTREUSE: Rgb = Rgb::from_raw(pros_sys::COLOR_CHARTREUSE);
59 pub const CHOCOLATE: Rgb = Rgb::from_raw(pros_sys::COLOR_CHOCOLATE);
61 pub const CORAL: Rgb = Rgb::from_raw(pros_sys::COLOR_CORAL);
63 pub const CORNFLOWER_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_CORNFLOWER_BLUE);
65 pub const CORNSILK: Rgb = Rgb::from_raw(pros_sys::COLOR_CORNSILK);
67 pub const CRIMSON: Rgb = Rgb::from_raw(pros_sys::COLOR_CRIMSON);
69 pub const CYAN: Rgb = Rgb::from_raw(pros_sys::COLOR_CYAN);
71 pub const DARK_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_BLUE);
73 pub const DARK_CYAN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_CYAN);
75 pub const DARK_GOLDENROD: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GOLDENROD);
77 pub const DARK_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GRAY);
79 pub const DARK_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GREEN);
81 pub const DARK_KHAKI: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_KHAKI);
83 pub const DARK_MAGENTA: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_MAGENTA);
85 pub const DARK_OLIVE_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_OLIVE_GREEN);
87 pub const DARK_ORANGE: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_ORANGE);
89 pub const DARK_ORCHID: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_ORCHID);
91 pub const DARK_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_RED);
93 pub const DARK_SALMON: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SALMON);
95 pub const DARK_SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SEA_GREEN);
97 pub const DARK_SLATE_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SLATE_GRAY);
99 pub const DARK_TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_TURQUOISE);
101 pub const DARK_VIOLET: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_VIOLET);
103 pub const DEEP_PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_DEEP_PINK);
105 pub const DEEP_SKY_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_DEEP_SKY_BLUE);
107 pub const DIM_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_DIM_GRAY);
109 pub const DODGER_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_DODGER_BLUE);
111 pub const FIRE_BRICK: Rgb = Rgb::from_raw(pros_sys::COLOR_FIRE_BRICK);
113 pub const FLORAL_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_FLORAL_WHITE);
115 pub const FOREST_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_FOREST_GREEN);
117 pub const FUCHSIA: Rgb = Rgb::from_raw(pros_sys::COLOR_FUCHSIA);
119 pub const GAINSBORO: Rgb = Rgb::from_raw(pros_sys::COLOR_GAINSBORO);
121 pub const GHOST_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_GHOST_WHITE);
123 pub const GOLD: Rgb = Rgb::from_raw(pros_sys::COLOR_GOLD);
125 pub const GOLDENROD: Rgb = Rgb::from_raw(pros_sys::COLOR_GOLDENROD);
127 pub const GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_GRAY);
129 pub const GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_GREEN);
131 pub const GREEN_YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_GREEN_YELLOW);
133 pub const HONEYDEW: Rgb = Rgb::from_raw(pros_sys::COLOR_HONEYDEW);
135 pub const HOT_PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_HOT_PINK);
137 pub const INDIAN_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_INDIAN_RED);
139 pub const INDIGO: Rgb = Rgb::from_raw(pros_sys::COLOR_INDIGO);
141 pub const IVORY: Rgb = Rgb::from_raw(pros_sys::COLOR_IVORY);
143 pub const KHAKI: Rgb = Rgb::from_raw(pros_sys::COLOR_KHAKI);
145 pub const LAVENDER: Rgb = Rgb::from_raw(pros_sys::COLOR_LAVENDER);
147 pub const LAVENDER_BLUSH: Rgb = Rgb::from_raw(pros_sys::COLOR_LAVENDER_BLUSH);
149 pub const LAWN_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LAWN_GREEN);
151 pub const LEMON_CHIFFON: Rgb = Rgb::from_raw(pros_sys::COLOR_LEMON_CHIFFON);
153 pub const LIGHT_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_BLUE);
155 pub const LIGHT_CORAL: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_CORAL);
157 pub const LIGHT_CYAN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_CYAN);
159 pub const LIGHT_GOLDENROD_YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GOLDENROD_YELLOW);
161 pub const LIGHT_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GREEN);
163 pub const LIGHT_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GRAY);
165 pub const LIGHT_PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_PINK);
167 pub const LIGHT_SALMON: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SALMON);
169 pub const LIGHT_SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SEA_GREEN);
171 pub const LIGHT_SKY_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SKY_BLUE);
173 pub const LIGHT_SLATE_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SLATE_GRAY);
175 pub const LIGHT_STEEL_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_STEEL_BLUE);
177 pub const LIGHT_YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_YELLOW);
179 pub const LIME: Rgb = Rgb::from_raw(pros_sys::COLOR_LIME);
181 pub const LIME_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIME_GREEN);
183 pub const LINEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LINEN);
185 pub const MAGENTA: Rgb = Rgb::from_raw(pros_sys::COLOR_MAGENTA);
187 pub const MAROON: Rgb = Rgb::from_raw(pros_sys::COLOR_MAROON);
189 pub const MEDIUM_AQUAMARINE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_AQUAMARINE);
191 pub const MEDIUM_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_BLUE);
193 pub const MEDIUM_ORCHID: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_ORCHID);
195 pub const MEDIUM_PURPLE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_PURPLE);
197 pub const MEDIUM_SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_SEA_GREEN);
199 pub const MEDIUM_SLATE_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_SLATE_BLUE);
201 pub const MEDIUM_SPRING_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_SPRING_GREEN);
203 pub const MEDIUM_TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_TURQUOISE);
205 pub const MEDIUM_VIOLET_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_VIOLET_RED);
207 pub const MIDNIGHT_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_MIDNIGHT_BLUE);
209 pub const MINT_CREAM: Rgb = Rgb::from_raw(pros_sys::COLOR_MINT_CREAM);
211 pub const MISTY_ROSE: Rgb = Rgb::from_raw(pros_sys::COLOR_MISTY_ROSE);
213 pub const MOCCASIN: Rgb = Rgb::from_raw(pros_sys::COLOR_MOCCASIN);
215 pub const NAVAJO_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_NAVAJO_WHITE);
217 pub const NAVY: Rgb = Rgb::from_raw(pros_sys::COLOR_NAVY);
219 pub const OLD_LACE: Rgb = Rgb::from_raw(pros_sys::COLOR_OLD_LACE);
221 pub const OLIVE: Rgb = Rgb::from_raw(pros_sys::COLOR_OLIVE);
223 pub const OLIVE_DRAB: Rgb = Rgb::from_raw(pros_sys::COLOR_OLIVE_DRAB);
225 pub const ORANGE: Rgb = Rgb::from_raw(pros_sys::COLOR_ORANGE);
227 pub const ORANGE_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_ORANGE_RED);
229 pub const ORCHID: Rgb = Rgb::from_raw(pros_sys::COLOR_ORCHID);
231 pub const PALE_GOLDENROD: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_GOLDENROD);
233 pub const PALE_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_GREEN);
235 pub const PALE_TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_TURQUOISE);
237 pub const PALE_VIOLET_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_VIOLET_RED);
239 pub const PAPAY_WHIP: Rgb = Rgb::from_raw(pros_sys::COLOR_PAPAY_WHIP);
241 pub const PEACH_PUFF: Rgb = Rgb::from_raw(pros_sys::COLOR_PEACH_PUFF);
243 pub const PERU: Rgb = Rgb::from_raw(pros_sys::COLOR_PERU);
245 pub const PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_PINK);
247 pub const PLUM: Rgb = Rgb::from_raw(pros_sys::COLOR_PLUM);
249 pub const POWDER_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_POWDER_BLUE);
251 pub const PURPLE: Rgb = Rgb::from_raw(pros_sys::COLOR_PURPLE);
253 pub const RED: Rgb = Rgb::from_raw(pros_sys::COLOR_RED);
255 pub const ROSY_BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_ROSY_BROWN);
257 pub const ROYAL_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_ROYAL_BLUE);
259 pub const SADDLE_BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_SADDLE_BROWN);
261 pub const SALMON: Rgb = Rgb::from_raw(pros_sys::COLOR_SALMON);
263 pub const SANDY_BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_SANDY_BROWN);
265 pub const SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_SEA_GREEN);
267 pub const SEASHELL: Rgb = Rgb::from_raw(pros_sys::COLOR_SEASHELL);
269 pub const SIENNA: Rgb = Rgb::from_raw(pros_sys::COLOR_SIENNA);
271 pub const SILVER: Rgb = Rgb::from_raw(pros_sys::COLOR_SILVER);
273 pub const SKY_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_SKY_BLUE);
275 pub const SLATE_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_SLATE_BLUE);
277 pub const SLATE_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_SLATE_GRAY);
279 pub const SNOW: Rgb = Rgb::from_raw(pros_sys::COLOR_SNOW);
281 pub const SPRING_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_SPRING_GREEN);
283 pub const STEEL_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_STEEL_BLUE);
285 pub const TAN: Rgb = Rgb::from_raw(pros_sys::COLOR_TAN);
287 pub const TEAL: Rgb = Rgb::from_raw(pros_sys::COLOR_TEAL);
289 pub const THISTLE: Rgb = Rgb::from_raw(pros_sys::COLOR_THISTLE);
291 pub const TOMATO: Rgb = Rgb::from_raw(pros_sys::COLOR_TOMATO);
293 pub const TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_TURQUOISE);
295 pub const VIOLET: Rgb = Rgb::from_raw(pros_sys::COLOR_VIOLET);
297 pub const WHEAT: Rgb = Rgb::from_raw(pros_sys::COLOR_WHEAT);
299 pub const WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_WHITE);
301 pub const WHITE_SMOKE: Rgb = Rgb::from_raw(pros_sys::COLOR_WHITE_SMOKE);
303 pub const YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_YELLOW);
305 pub const YELLOW_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_YELLOW_GREEN);
307 pub const DARK_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GREY);
309 pub const DARK_SLATE_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SLATE_GREY);
311 pub const DIM_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_DIM_GREY);
313 pub const GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_GREY);
315 pub const LIGHT_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GREY);
317 pub const LIGHT_SLATE_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SLATE_GREY);
319 pub const SLATE_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_SLATE_GREY);
321
322 const BITMASK: u32 = 0b11111111;
323
324 pub const fn new(red: u8, green: u8, blue: u8) -> Self {
326 Self {
327 r: red,
328 g: green,
329 b: blue,
330 }
331 }
332
333 pub const fn from_raw(raw: u32) -> Self {
335 Self {
336 r: ((raw >> 16) & Self::BITMASK) as _,
337 g: ((raw >> 8) & Self::BITMASK) as _,
338 b: (raw & Self::BITMASK) as _,
339 }
340 }
341
342 pub const fn red(&self) -> u8 {
344 self.r
345 }
346
347 pub const fn green(&self) -> u8 {
349 self.g
350 }
351
352 pub const fn blue(&self) -> u8 {
354 self.b
355 }
356}
357
358impl From<(u8, u8, u8)> for Rgb {
359 fn from(tuple: (u8, u8, u8)) -> Self {
360 Self {
361 r: tuple.0,
362 g: tuple.1,
363 b: tuple.2,
364 }
365 }
366}
367
368impl From<Rgb> for (u8, u8, u8) {
369 fn from(value: Rgb) -> (u8, u8, u8) {
370 (value.r, value.g, value.b)
371 }
372}
373
374impl From<Rgb> for u32 {
375 fn from(value: Rgb) -> u32 {
376 ((value.r as u32) << 16) + ((value.g as u32) << 8) + value.b as u32
377 }
378}
379
380impl From<u32> for Rgb {
381 fn from(value: u32) -> Self {
382 Self::from_raw(value)
383 }
384}