pros_devices/
color.rs

1//! Generic RGB8 color type and conversion trait.
2//! The [`Rgb`] and [`IntoRgb`] types are used in multiple places in the library to represent colors.
3
4/// A trait for types that can be converted into an RGB8 color.
5pub trait IntoRgb {
6    /// Consume the value and convert it into an RGB8 color.
7    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/// An RGB8 color.
17/// The color space will almost always be assumed as sRGB in this library.
18#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
19pub struct Rgb {
20    /// Red value of the color.
21    pub r: u8,
22    /// Green value of the color.
23    pub g: u8,
24    /// Blue value of the color.
25    pub b: u8,
26}
27
28impl Rgb {
29    /// #F0F8FF color constant.
30    pub const ALICE_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_ALICE_BLUE);
31    /// #FAEBD7 color constant.
32    pub const ANTIQUE_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_ANTIQUE_WHITE);
33    /// #00FFFF color constant.
34    pub const AQUA: Rgb = Rgb::from_raw(pros_sys::COLOR_AQUA);
35    /// #7FFFD4 color constant.
36    pub const AQUAMARINE: Rgb = Rgb::from_raw(pros_sys::COLOR_AQUAMARINE);
37    /// #F0FFFF color constant.
38    pub const AZURE: Rgb = Rgb::from_raw(pros_sys::COLOR_AZURE);
39    /// #F5F5DC color constant.
40    pub const BEIGE: Rgb = Rgb::from_raw(pros_sys::COLOR_BEIGE);
41    /// #FFE4C4 color constant.
42    pub const BISQUE: Rgb = Rgb::from_raw(pros_sys::COLOR_BISQUE);
43    /// #000000 color constant.
44    pub const BLACK: Rgb = Rgb::from_raw(pros_sys::COLOR_BLACK);
45    /// #FFEBCD color constant.
46    pub const BLANCHED_ALMOND: Rgb = Rgb::from_raw(pros_sys::COLOR_BLANCHED_ALMOND);
47    /// #0000FF color constant.
48    pub const BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_BLUE);
49    /// #8A2BE2 color constant.
50    pub const BLUE_VIOLET: Rgb = Rgb::from_raw(pros_sys::COLOR_BLUE_VIOLET);
51    /// #A52A2A color constant.
52    pub const BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_BROWN);
53    /// #DEB887 color constant.
54    pub const BURLY_WOOD: Rgb = Rgb::from_raw(pros_sys::COLOR_BURLY_WOOD);
55    /// #5F9EA0 color constant.
56    pub const CADET_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_CADET_BLUE);
57    /// #7FFF00 color constant.
58    pub const CHARTREUSE: Rgb = Rgb::from_raw(pros_sys::COLOR_CHARTREUSE);
59    /// #D2691E color constant.
60    pub const CHOCOLATE: Rgb = Rgb::from_raw(pros_sys::COLOR_CHOCOLATE);
61    /// #FF7F50 color constant.
62    pub const CORAL: Rgb = Rgb::from_raw(pros_sys::COLOR_CORAL);
63    /// #6495ED color constant.
64    pub const CORNFLOWER_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_CORNFLOWER_BLUE);
65    /// #FFF8DC color constant.
66    pub const CORNSILK: Rgb = Rgb::from_raw(pros_sys::COLOR_CORNSILK);
67    /// #DC143C color constant.
68    pub const CRIMSON: Rgb = Rgb::from_raw(pros_sys::COLOR_CRIMSON);
69    /// #00FFFF color constant.
70    pub const CYAN: Rgb = Rgb::from_raw(pros_sys::COLOR_CYAN);
71    /// #00008B color constant.
72    pub const DARK_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_BLUE);
73    /// #008B8B color constant.
74    pub const DARK_CYAN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_CYAN);
75    /// #B8860B color constant.
76    pub const DARK_GOLDENROD: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GOLDENROD);
77    /// #A9A9A9 color constant.
78    pub const DARK_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GRAY);
79    /// #006400 color constant.
80    pub const DARK_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GREEN);
81    /// #BDB76B color constant.
82    pub const DARK_KHAKI: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_KHAKI);
83    /// #8B008B color constant.
84    pub const DARK_MAGENTA: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_MAGENTA);
85    /// #556B2F color constant.
86    pub const DARK_OLIVE_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_OLIVE_GREEN);
87    /// #FF8C00 color constant.
88    pub const DARK_ORANGE: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_ORANGE);
89    /// #9932CC color constant.
90    pub const DARK_ORCHID: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_ORCHID);
91    /// #8B0000 color constant.
92    pub const DARK_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_RED);
93    /// #E9967A color constant.
94    pub const DARK_SALMON: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SALMON);
95    /// #8FBC8F color constant.
96    pub const DARK_SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SEA_GREEN);
97    /// #2F4F4F color constant.
98    pub const DARK_SLATE_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SLATE_GRAY);
99    /// #00CED1 color constant.
100    pub const DARK_TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_TURQUOISE);
101    /// #9400D3 color constant.
102    pub const DARK_VIOLET: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_VIOLET);
103    /// #FF1493 color constant.
104    pub const DEEP_PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_DEEP_PINK);
105    /// #00BFFF color constant.
106    pub const DEEP_SKY_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_DEEP_SKY_BLUE);
107    /// #696969 color constant.
108    pub const DIM_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_DIM_GRAY);
109    /// #1E90FF color constant.
110    pub const DODGER_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_DODGER_BLUE);
111    /// #B22222 color constant.
112    pub const FIRE_BRICK: Rgb = Rgb::from_raw(pros_sys::COLOR_FIRE_BRICK);
113    /// #FFFAF0 color constant.
114    pub const FLORAL_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_FLORAL_WHITE);
115    /// #228B22 color constant.
116    pub const FOREST_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_FOREST_GREEN);
117    /// #FF00FF color constant.
118    pub const FUCHSIA: Rgb = Rgb::from_raw(pros_sys::COLOR_FUCHSIA);
119    /// #DCDCDC color constant.
120    pub const GAINSBORO: Rgb = Rgb::from_raw(pros_sys::COLOR_GAINSBORO);
121    /// #F8F8FF color constant.
122    pub const GHOST_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_GHOST_WHITE);
123    /// #FFD700 color constant.
124    pub const GOLD: Rgb = Rgb::from_raw(pros_sys::COLOR_GOLD);
125    /// #DAA520 color constant.
126    pub const GOLDENROD: Rgb = Rgb::from_raw(pros_sys::COLOR_GOLDENROD);
127    /// #808080 color constant.
128    pub const GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_GRAY);
129    /// #008000 color constant.
130    pub const GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_GREEN);
131    /// #ADFF2F color constant.
132    pub const GREEN_YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_GREEN_YELLOW);
133    /// #F0FFF0 color constant.
134    pub const HONEYDEW: Rgb = Rgb::from_raw(pros_sys::COLOR_HONEYDEW);
135    /// #FF69B4 color constant.
136    pub const HOT_PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_HOT_PINK);
137    /// #CD5C5C color constant.
138    pub const INDIAN_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_INDIAN_RED);
139    /// #4B0082 color constant.
140    pub const INDIGO: Rgb = Rgb::from_raw(pros_sys::COLOR_INDIGO);
141    /// #FFFFF0 color constant.
142    pub const IVORY: Rgb = Rgb::from_raw(pros_sys::COLOR_IVORY);
143    /// #F0E68C color constant.
144    pub const KHAKI: Rgb = Rgb::from_raw(pros_sys::COLOR_KHAKI);
145    /// #E6E6FA color constant.
146    pub const LAVENDER: Rgb = Rgb::from_raw(pros_sys::COLOR_LAVENDER);
147    /// #FFF0F5 color constant.
148    pub const LAVENDER_BLUSH: Rgb = Rgb::from_raw(pros_sys::COLOR_LAVENDER_BLUSH);
149    /// #7CFC00 color constant.
150    pub const LAWN_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LAWN_GREEN);
151    /// #FFFACD color constant.
152    pub const LEMON_CHIFFON: Rgb = Rgb::from_raw(pros_sys::COLOR_LEMON_CHIFFON);
153    /// #ADD8E6 color constant.
154    pub const LIGHT_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_BLUE);
155    /// #F08080 color constant.
156    pub const LIGHT_CORAL: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_CORAL);
157    /// #E0FFFF color constant.
158    pub const LIGHT_CYAN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_CYAN);
159    /// #FAFAD2 color constant.
160    pub const LIGHT_GOLDENROD_YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GOLDENROD_YELLOW);
161    /// #90EE90 color constant.
162    pub const LIGHT_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GREEN);
163    /// #D3D3D3 color constant.
164    pub const LIGHT_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GRAY);
165    /// #FFB6C1 color constant.
166    pub const LIGHT_PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_PINK);
167    /// #FFA07A color constant.
168    pub const LIGHT_SALMON: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SALMON);
169    /// #20B2AA color constant.
170    pub const LIGHT_SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SEA_GREEN);
171    /// #87CEFA color constant.
172    pub const LIGHT_SKY_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SKY_BLUE);
173    /// #778899 color constant.
174    pub const LIGHT_SLATE_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SLATE_GRAY);
175    /// #B0C4DE color constant.
176    pub const LIGHT_STEEL_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_STEEL_BLUE);
177    /// #FFFFE0 color constant.
178    pub const LIGHT_YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_YELLOW);
179    /// #00FF00 color constant.
180    pub const LIME: Rgb = Rgb::from_raw(pros_sys::COLOR_LIME);
181    /// #32CD32 color constant.
182    pub const LIME_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIME_GREEN);
183    /// #FAF0E6 color constant.
184    pub const LINEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LINEN);
185    /// #FF00FF color constant.
186    pub const MAGENTA: Rgb = Rgb::from_raw(pros_sys::COLOR_MAGENTA);
187    /// #800000 color constant.
188    pub const MAROON: Rgb = Rgb::from_raw(pros_sys::COLOR_MAROON);
189    /// #66CDAA color constant.
190    pub const MEDIUM_AQUAMARINE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_AQUAMARINE);
191    /// #0000CD color constant.
192    pub const MEDIUM_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_BLUE);
193    /// #BA55D3 color constant.
194    pub const MEDIUM_ORCHID: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_ORCHID);
195    /// #9370DB color constant.
196    pub const MEDIUM_PURPLE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_PURPLE);
197    /// #3CB371 color constant.
198    pub const MEDIUM_SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_SEA_GREEN);
199    /// #7B68EE color constant.
200    pub const MEDIUM_SLATE_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_SLATE_BLUE);
201    /// #00FA9A color constant.
202    pub const MEDIUM_SPRING_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_SPRING_GREEN);
203    /// #48D1CC color constant.
204    pub const MEDIUM_TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_TURQUOISE);
205    /// #C71585 color constant.
206    pub const MEDIUM_VIOLET_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_VIOLET_RED);
207    /// #191970 color constant.
208    pub const MIDNIGHT_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_MIDNIGHT_BLUE);
209    /// #F5FFFA color constant.
210    pub const MINT_CREAM: Rgb = Rgb::from_raw(pros_sys::COLOR_MINT_CREAM);
211    /// #FFE4E1 color constant.
212    pub const MISTY_ROSE: Rgb = Rgb::from_raw(pros_sys::COLOR_MISTY_ROSE);
213    /// #FFE4B5 color constant.
214    pub const MOCCASIN: Rgb = Rgb::from_raw(pros_sys::COLOR_MOCCASIN);
215    /// #FFDEAD color constant.
216    pub const NAVAJO_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_NAVAJO_WHITE);
217    /// #000080 color constant.
218    pub const NAVY: Rgb = Rgb::from_raw(pros_sys::COLOR_NAVY);
219    /// #FDF5E6 color constant.
220    pub const OLD_LACE: Rgb = Rgb::from_raw(pros_sys::COLOR_OLD_LACE);
221    /// #808000 color constant.
222    pub const OLIVE: Rgb = Rgb::from_raw(pros_sys::COLOR_OLIVE);
223    /// #6B8E23 color constant.
224    pub const OLIVE_DRAB: Rgb = Rgb::from_raw(pros_sys::COLOR_OLIVE_DRAB);
225    /// #FFA500 color constant.
226    pub const ORANGE: Rgb = Rgb::from_raw(pros_sys::COLOR_ORANGE);
227    /// #FF4500 color constant.
228    pub const ORANGE_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_ORANGE_RED);
229    /// #DA70D6 color constant.
230    pub const ORCHID: Rgb = Rgb::from_raw(pros_sys::COLOR_ORCHID);
231    /// #EEE8AA color constant.
232    pub const PALE_GOLDENROD: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_GOLDENROD);
233    /// #98FB98 color constant.
234    pub const PALE_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_GREEN);
235    /// #AFEEEE color constant.
236    pub const PALE_TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_TURQUOISE);
237    /// #DB7093 color constant.
238    pub const PALE_VIOLET_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_VIOLET_RED);
239    /// #FFEFD5 color constant.
240    pub const PAPAY_WHIP: Rgb = Rgb::from_raw(pros_sys::COLOR_PAPAY_WHIP);
241    /// #FFDAB9 color constant.
242    pub const PEACH_PUFF: Rgb = Rgb::from_raw(pros_sys::COLOR_PEACH_PUFF);
243    /// #CD853F color constant.
244    pub const PERU: Rgb = Rgb::from_raw(pros_sys::COLOR_PERU);
245    /// #FFC0CB color constant.
246    pub const PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_PINK);
247    /// #DDA0DD color constant.
248    pub const PLUM: Rgb = Rgb::from_raw(pros_sys::COLOR_PLUM);
249    /// #B0E0E6 color constant.
250    pub const POWDER_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_POWDER_BLUE);
251    /// #800080 color constant.
252    pub const PURPLE: Rgb = Rgb::from_raw(pros_sys::COLOR_PURPLE);
253    /// #FF0000 color constant.
254    pub const RED: Rgb = Rgb::from_raw(pros_sys::COLOR_RED);
255    /// #BC8F8F color constant.
256    pub const ROSY_BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_ROSY_BROWN);
257    /// #4169E1 color constant.
258    pub const ROYAL_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_ROYAL_BLUE);
259    /// #8B4513 color constant.
260    pub const SADDLE_BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_SADDLE_BROWN);
261    /// #FA8072 color constant.
262    pub const SALMON: Rgb = Rgb::from_raw(pros_sys::COLOR_SALMON);
263    /// #F4A460 color constant.
264    pub const SANDY_BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_SANDY_BROWN);
265    /// #2E8B57 color constant.
266    pub const SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_SEA_GREEN);
267    /// #FFF5EE color constant.
268    pub const SEASHELL: Rgb = Rgb::from_raw(pros_sys::COLOR_SEASHELL);
269    /// #A0522D color constant.
270    pub const SIENNA: Rgb = Rgb::from_raw(pros_sys::COLOR_SIENNA);
271    /// #C0C0C0 color constant.
272    pub const SILVER: Rgb = Rgb::from_raw(pros_sys::COLOR_SILVER);
273    /// #87CEEB color constant.
274    pub const SKY_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_SKY_BLUE);
275    /// #6A5ACD color constant.
276    pub const SLATE_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_SLATE_BLUE);
277    /// #708090 color constant.
278    pub const SLATE_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_SLATE_GRAY);
279    /// #FFFAFA color constant.
280    pub const SNOW: Rgb = Rgb::from_raw(pros_sys::COLOR_SNOW);
281    /// #00FF7F color constant.
282    pub const SPRING_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_SPRING_GREEN);
283    /// #4682B4 color constant.
284    pub const STEEL_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_STEEL_BLUE);
285    /// #D2B48C color constant.
286    pub const TAN: Rgb = Rgb::from_raw(pros_sys::COLOR_TAN);
287    /// #008080 color constant.
288    pub const TEAL: Rgb = Rgb::from_raw(pros_sys::COLOR_TEAL);
289    /// #D8BFD8 color constant.
290    pub const THISTLE: Rgb = Rgb::from_raw(pros_sys::COLOR_THISTLE);
291    /// #FF6347 color constant.
292    pub const TOMATO: Rgb = Rgb::from_raw(pros_sys::COLOR_TOMATO);
293    /// #40E0D0 color constant.
294    pub const TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_TURQUOISE);
295    /// #EE82EE color constant.
296    pub const VIOLET: Rgb = Rgb::from_raw(pros_sys::COLOR_VIOLET);
297    /// #F5DEB3 color constant.
298    pub const WHEAT: Rgb = Rgb::from_raw(pros_sys::COLOR_WHEAT);
299    /// #FFFFFF color constant.
300    pub const WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_WHITE);
301    /// #F5F5F5 color constant.
302    pub const WHITE_SMOKE: Rgb = Rgb::from_raw(pros_sys::COLOR_WHITE_SMOKE);
303    /// #FFFF00 color constant.
304    pub const YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_YELLOW);
305    /// #9ACD32 color constant.
306    pub const YELLOW_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_YELLOW_GREEN);
307    /// Alias to [`Self::SLATE_GRAY`].
308    pub const DARK_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GREY);
309    /// Alias to [`Self::DARK_SLATE_GRAY`].
310    pub const DARK_SLATE_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SLATE_GREY);
311    /// Alias to [`Self::DIM_GRAY`].
312    pub const DIM_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_DIM_GREY);
313    /// Alias to [`Self::GRAY`].
314    pub const GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_GREY);
315    /// Alias to [`Self::LIGHT_GRAY`].
316    pub const LIGHT_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GREY);
317    /// Alias to [`Self::LIGHT_SLATE_GRAY`].
318    pub const LIGHT_SLATE_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SLATE_GREY);
319    /// Alias to [`Self::SLATE_GREY`].
320    pub const SLATE_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_SLATE_GREY);
321
322    const BITMASK: u32 = 0b11111111;
323
324    /// Create a new RGB8 color.
325    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    /// Create a new RGB8 color from a raw u32 value.
334    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    /// Get the red value of the color.
343    pub const fn red(&self) -> u8 {
344        self.r
345    }
346
347    /// Get the green value of the color.
348    pub const fn green(&self) -> u8 {
349        self.g
350    }
351
352    /// Get the blue value of the color.
353    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}