1#[cfg(feature = "no-std")]
4use core::cmp::{Ord, Ordering, PartialOrd};
5#[cfg(not(feature = "no-std"))]
6use std::cmp::{Ord, Ordering, PartialOrd};
7
8#[cfg(feature = "no-std")]
9use core::fmt;
10#[cfg(not(feature = "no-std"))]
11use std::fmt;
12
13#[cfg(feature = "no-std")]
14use core::mem;
15#[cfg(not(feature = "no-std"))]
16use std::mem;
17
18use crate::math::ext::{uint8x4_t, uqadd8, uqsub8};
19
20#[cfg(feature = "no-std")]
21use core::ops::{
22 Add, AddAssign, BitAnd, BitAndAssign, BitOr, BitOrAssign, Div, DivAssign, Index, IndexMut, Mul,
23 MulAssign, Neg, Not, Rem, ShrAssign, Sub, SubAssign,
24};
25#[cfg(not(feature = "no-std"))]
26use std::ops::{
27 Add, AddAssign, BitAnd, BitAndAssign, BitOr, BitOrAssign, Div, DivAssign, Index, IndexMut, Mul,
28 MulAssign, Neg, Not, Rem, ShrAssign, Sub, SubAssign,
29};
30
31use crate::color_codes::*;
32use crate::math::*;
33use crate::HSV;
34
35#[repr(packed)]
37#[derive(Copy, Clone, Default, Eq, PartialEq, Debug, Hash)]
38pub struct ColorRGB {
39 pub r: u8,
41 pub g: u8,
43 pub b: u8,
45}
46
47impl ColorRGB {
48 #[inline(always)]
50 pub const fn new(r: u8, g: u8, b: u8) -> Self {
51 ColorRGB { r, g, b }
52 }
53
54 #[inline(always)]
59 pub const fn from_color_code(code: u32) -> Self {
60 ColorRGB {
61 r: (code >> 16) as u8,
62 g: (code >> 8) as u8,
63 b: code as u8,
64 }
65 }
66
67 #[inline(always)]
69 pub fn clear(&mut self) {
70 *self = ColorRGB::Black;
71 }
72
73 #[inline(always)]
75 pub fn red(self) -> u8 {
76 self.r
77 }
78 #[inline(always)]
80 pub fn green(self) -> u8 {
81 self.g
82 }
83 #[inline(always)]
85 pub fn blue(self) -> u8 {
86 self.b
87 }
88
89 #[inline]
91 pub fn modify_all<F>(&mut self, mut f: F)
92 where
93 for<'w> F: FnMut(u8) -> u8,
94 {
95 self.r = f(self.r);
96 self.g = f(self.g);
97 self.b = f(self.b);
98 }
99
100 #[inline]
102 pub fn scale(&mut self, scale: u8) {
103 nscale_u8x3(&mut self.r, &mut self.g, &mut self.b, scale);
104 }
105
106 #[inline]
108 pub fn scale_from_other(&mut self, other: ColorRGB) {
109 nscale_u8(&mut self.r, other.r);
110 nscale_u8(&mut self.g, other.g);
111 nscale_u8(&mut self.b, other.b);
112 }
113
114 #[inline]
116 pub fn fade_to_black_by(&mut self, fade: u8) {
117 nscale_u8x3(&mut self.r, &mut self.g, &mut self.b, 255 - fade);
118 }
119
120 #[inline]
122 pub fn maximize_brightness(&mut self) {
123 let maxi: u16 = u16::from(self.r.max(self.g.max(self.b)));
124 if maxi > 0 {
125 let b_factor: u16 = (maxi * 256) / maxi;
126 self.modify_all(|c| ((b_factor * u16::from(c)) / 256) as u8);
127 }
128 }
129
130 #[inline]
132 pub fn luma(self) -> u8 {
133 let mut luma: u8 = 0;
134 luma += scale_u8(self.r, 54);
135 luma += scale_u8(self.g, 183);
136 luma += scale_u8(self.b, 18);
137 luma
138 }
139
140 #[inline]
142 pub fn avg_light(self) -> u8 {
143 let mut luma: u8 = 0;
144 luma += scale_u8(self.r, 85);
145 luma += scale_u8(self.g, 85);
146 luma += scale_u8(self.b, 85);
147 luma
148 }
149
150 pub fn blend(&mut self, other: ColorRGB, amount_of_other: u8) {
156 if amount_of_other == 255 {
157 *self = other;
158 } else if amount_of_other != 0 {
159 self.r = self.r.blend(other.r, amount_of_other);
160 self.g = self.g.blend(other.g, amount_of_other);
161 self.b = self.b.blend(other.b, amount_of_other);
162 }
163 }
164}
165
166impl fmt::Display for ColorRGB {
167 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
168 write!(f, "(r: {}, g: {}, b: {})", self.r, self.g, self.b)
169 }
170}
171
172impl From<(u8, u8, u8)> for ColorRGB {
173 #[inline(always)]
174 fn from(other: (u8, u8, u8)) -> Self {
175 Self::new(other.0, other.1, other.2)
176 }
177}
178
179impl From<[u8; 3]> for ColorRGB {
180 #[inline(always)]
181 fn from(other: [u8; 3]) -> Self {
182 Self::new(other[0], other[1], other[2])
183 }
184}
185
186impl From<u32> for ColorRGB {
187 #[inline(always)]
188 fn from(other: u32) -> Self {
189 Self::from_color_code(other)
190 }
191}
192
193impl From<HSV> for ColorRGB {
194 fn from(hsv: HSV) -> Self {
195 hsv.to_rgb_rainbow()
196 }
197}
198
199impl Index<usize> for ColorRGB {
200 type Output = u8;
201 #[inline(always)]
202 fn index(&self, idx: usize) -> &u8 {
203 unsafe {
204 let arr: &[u8; 3] = &*(self as *const ColorRGB as *const [u8; 3]);
205 &arr[idx]
206 }
207 }
208}
209
210impl IndexMut<usize> for ColorRGB {
211 #[inline(always)]
212 fn index_mut(&mut self, idx: usize) -> &mut u8 {
213 unsafe {
214 let arr: &mut [u8; 3] = &mut *(self as *mut ColorRGB as *mut [u8; 3]);
215 &mut arr[idx]
216 }
217 }
218}
219
220impl AddAssign for ColorRGB {
221 #[inline(always)]
222 fn add_assign(&mut self, rhs: ColorRGB) {
223 let (other, us) = unsafe {(
224 uint8x4_t(rhs.r, rhs.g, rhs.b, mem::transmute(mem::MaybeUninit::<u8>::uninit())),
225 uint8x4_t(self.r, self.g, self.b, mem::transmute(mem::MaybeUninit::<u8>::uninit()))
226 )};
227
228 let qadd = uqadd8(us, other);
229 *self = ColorRGB {
230 r: qadd.0,
231 g: qadd.1,
232 b: qadd.2,
233 };
234 }
235}
236
237impl AddAssign<u8> for ColorRGB {
239 #[inline(always)]
240 fn add_assign(&mut self, rhs: u8) {
241 *self += mk_rgb!(rhs, rhs, rhs);
242 }
243}
244
245impl SubAssign for ColorRGB {
246 #[inline(always)]
247 fn sub_assign(&mut self, rhs: ColorRGB) {
248 let (other, us) = unsafe {(
249 uint8x4_t(rhs.r, rhs.g, rhs.b, mem::transmute(mem::MaybeUninit::<u8>::uninit())),
250 uint8x4_t(self.r, self.g, self.b, mem::transmute(mem::MaybeUninit::<u8>::uninit()))
251 )};
252 let qsub = uqsub8(us, other);
253 *self = ColorRGB {
254 r: qsub.0,
255 g: qsub.1,
256 b: qsub.2,
257 };
258 }
259}
260
261impl SubAssign<u8> for ColorRGB {
262 #[inline(always)]
263 fn sub_assign(&mut self, rhs: u8) {
264 *self -= mk_rgb!(rhs, rhs, rhs);
265 }
266}
267
268impl DivAssign<u8> for ColorRGB {
269 #[inline(always)]
270 fn div_assign(&mut self, rhs: u8) {
271 self.modify_all(|c| c / rhs)
272 }
273}
274
275impl MulAssign<u8> for ColorRGB {
276 #[inline(always)]
277 fn mul_assign(&mut self, rhs: u8) {
278 self.modify_all(|c| c.saturating_mul(rhs))
279 }
280}
281
282impl ShrAssign<u8> for ColorRGB {
283 #[inline(always)]
284 fn shr_assign(&mut self, rhs: u8) {
285 self.modify_all(|c| c >> rhs)
286 }
287}
288
289impl BitOrAssign for ColorRGB {
290 #[inline(always)]
291 fn bitor_assign(&mut self, rhs: ColorRGB) {
292 *self = ColorRGB {
293 r: self.r.max(rhs.r),
294 g: self.g.max(rhs.g),
295 b: self.b.max(rhs.b),
296 };
297 }
298}
299
300impl BitOrAssign<u8> for ColorRGB {
301 #[inline(always)]
302 fn bitor_assign(&mut self, rhs: u8) {
303 self.modify_all(|c| c.max(rhs))
304 }
305}
306
307impl BitAndAssign for ColorRGB {
308 #[inline(always)]
309 fn bitand_assign(&mut self, rhs: ColorRGB) {
310 *self = ColorRGB {
311 r: self.r.min(rhs.r),
312 g: self.g.min(rhs.g),
313 b: self.b.min(rhs.b),
314 };
315 }
316}
317
318impl BitAndAssign<u8> for ColorRGB {
319 #[inline(always)]
320 fn bitand_assign(&mut self, rhs: u8) {
321 self.modify_all(|c| c.min(rhs))
322 }
323}
324
325impl Neg for ColorRGB {
326 type Output = ColorRGB;
327
328 #[inline(always)]
329 fn neg(self) -> ColorRGB {
330 let (rev, us) = unsafe {(
331 uint8x4_t(255, 255, 255, mem::transmute(mem::MaybeUninit::<u8>::uninit())),
332 uint8x4_t(self.r, self.g, self.b, mem::transmute(mem::MaybeUninit::<u8>::uninit()))
333 )};
334 let qsub = uqsub8(rev, us);
335 ColorRGB {
336 r: qsub.0,
337 g: qsub.1,
338 b: qsub.2,
339 }
340 }
341}
342
343impl Not for ColorRGB {
344 type Output = bool;
345 #[inline(always)]
346 fn not(self) -> bool {
347 self.r != 0 || self.g != 0 || self.b != 0
348 }
349}
350
351impl PartialOrd for ColorRGB {
352 #[inline]
353 fn partial_cmp(&self, other: &ColorRGB) -> Option<Ordering> {
354 Some(self.cmp(other))
355 }
356}
357
358impl Ord for ColorRGB {
359 #[inline]
360 fn cmp(&self, rhs: &ColorRGB) -> Ordering {
361 let rhs_t: u16 = u16::from(rhs.r) + u16::from(rhs.g) + u16::from(rhs.b);
362 let lhs_t: u16 = u16::from(self.r) + u16::from(self.g) + u16::from(self.b);
363 lhs_t.cmp(&rhs_t)
364 }
365}
366
367impl Add for ColorRGB {
368 type Output = ColorRGB;
369 #[inline(always)]
370 fn add(self, other: ColorRGB) -> ColorRGB {
371 let mut cln: ColorRGB = self;
372 cln += other;
373 cln
374 }
375}
376
377impl Add<u8> for ColorRGB {
378 type Output = ColorRGB;
379 #[inline(always)]
380 fn add(self, other: u8) -> ColorRGB {
381 let mut cln: ColorRGB = self;
382 cln += other;
383 cln
384 }
385}
386
387impl Sub for ColorRGB {
388 type Output = ColorRGB;
389 #[inline(always)]
390 fn sub(self, other: ColorRGB) -> ColorRGB {
391 let mut cln: ColorRGB = self;
392 cln -= other;
393 cln
394 }
395}
396
397impl Sub<u8> for ColorRGB {
398 type Output = ColorRGB;
399 #[inline(always)]
400 fn sub(self, other: u8) -> ColorRGB {
401 let mut cln: ColorRGB = self;
402 cln -= other;
403 cln
404 }
405}
406
407impl Mul<u8> for ColorRGB {
408 type Output = ColorRGB;
409 #[inline(always)]
410 fn mul(self, rhs: u8) -> ColorRGB {
411 let mut cln: ColorRGB = self;
412 cln *= rhs;
413 cln
414 }
415}
416
417impl Div<u8> for ColorRGB {
418 type Output = ColorRGB;
419 #[inline(always)]
420 fn div(self, rhs: u8) -> ColorRGB {
421 let mut cln: ColorRGB = self;
422 cln /= rhs;
423 cln
424 }
425}
426
427impl BitAnd for ColorRGB {
428 type Output = ColorRGB;
429 #[inline(always)]
430 fn bitand(self, other: ColorRGB) -> ColorRGB {
431 let mut cln: ColorRGB = self;
432 cln &= other;
433 cln
434 }
435}
436
437impl BitOr for ColorRGB {
438 type Output = ColorRGB;
439 #[inline(always)]
440 fn bitor(self, other: ColorRGB) -> ColorRGB {
441 let mut cln: ColorRGB = self;
442 cln |= other;
443 cln
444 }
445}
446
447impl Rem<u8> for ColorRGB {
448 type Output = ColorRGB;
449 #[inline(always)]
450 fn rem(self, rhs: u8) -> ColorRGB {
451 ColorRGB {
452 r: self.r % rhs,
453 g: self.g % rhs,
454 b: self.b % rhs,
455 }
456 }
457}
458
459#[allow(non_upper_case_globals)]
461impl ColorRGB {
462 pub const AliceBlue: ColorRGB = ColorRGB::from_color_code(AliceBlue);
463 pub const Amethyst: ColorRGB = ColorRGB::from_color_code(Amethyst);
464 pub const AntiqueWhite: ColorRGB = ColorRGB::from_color_code(AntiqueWhite);
465 pub const Aqua: ColorRGB = ColorRGB::from_color_code(Aqua);
466 pub const Aquamarine: ColorRGB = ColorRGB::from_color_code(Aquamarine);
467 pub const Azure: ColorRGB = ColorRGB::from_color_code(Azure);
468 pub const Beige: ColorRGB = ColorRGB::from_color_code(Beige);
469 pub const Bisque: ColorRGB = ColorRGB::from_color_code(Bisque);
470 pub const Black: ColorRGB = ColorRGB::from_color_code(Black);
471 pub const BlanchedAlmond: ColorRGB = ColorRGB::from_color_code(BlanchedAlmond);
472 pub const Blue: ColorRGB = ColorRGB::from_color_code(Blue);
473 pub const BlueViolet: ColorRGB = ColorRGB::from_color_code(BlueViolet);
474 pub const Brown: ColorRGB = ColorRGB::from_color_code(Brown);
475 pub const BurlyWood: ColorRGB = ColorRGB::from_color_code(BurlyWood);
476 pub const CadetBlue: ColorRGB = ColorRGB::from_color_code(CadetBlue);
477 pub const Chartreuse: ColorRGB = ColorRGB::from_color_code(Chartreuse);
478 pub const Chocolate: ColorRGB = ColorRGB::from_color_code(Chocolate);
479 pub const Coral: ColorRGB = ColorRGB::from_color_code(Coral);
480 pub const CornflowerBlue: ColorRGB = ColorRGB::from_color_code(CornflowerBlue);
481 pub const Cornsilk: ColorRGB = ColorRGB::from_color_code(Cornsilk);
482 pub const Crimson: ColorRGB = ColorRGB::from_color_code(Crimson);
483 pub const Cyan: ColorRGB = ColorRGB::from_color_code(Cyan);
484 pub const DarkBlue: ColorRGB = ColorRGB::from_color_code(DarkBlue);
485 pub const DarkCyan: ColorRGB = ColorRGB::from_color_code(DarkCyan);
486 pub const DarkGoldenrod: ColorRGB = ColorRGB::from_color_code(DarkGoldenrod);
487 pub const DarkGray: ColorRGB = ColorRGB::from_color_code(DarkGray);
488 pub const DarkGrey: ColorRGB = ColorRGB::from_color_code(DarkGrey);
489 pub const DarkGreen: ColorRGB = ColorRGB::from_color_code(DarkGreen);
490 pub const DarkKhaki: ColorRGB = ColorRGB::from_color_code(DarkKhaki);
491 pub const DarkMagenta: ColorRGB = ColorRGB::from_color_code(DarkMagenta);
492 pub const DarkOliveGreen: ColorRGB = ColorRGB::from_color_code(DarkOliveGreen);
493 pub const DarkOrange: ColorRGB = ColorRGB::from_color_code(DarkOrange);
494 pub const DarkOrchid: ColorRGB = ColorRGB::from_color_code(DarkOrchid);
495 pub const DarkRed: ColorRGB = ColorRGB::from_color_code(DarkRed);
496 pub const DarkSalmon: ColorRGB = ColorRGB::from_color_code(DarkSalmon);
497 pub const DarkSeaGreen: ColorRGB = ColorRGB::from_color_code(DarkSeaGreen);
498 pub const DarkSlateBlue: ColorRGB = ColorRGB::from_color_code(DarkSlateBlue);
499 pub const DarkSlateGray: ColorRGB = ColorRGB::from_color_code(DarkSlateGray);
500 pub const DarkSlateGrey: ColorRGB = ColorRGB::from_color_code(DarkSlateGrey);
501 pub const DarkTurquoise: ColorRGB = ColorRGB::from_color_code(DarkTurquoise);
502 pub const DarkViolet: ColorRGB = ColorRGB::from_color_code(DarkViolet);
503 pub const DeepPink: ColorRGB = ColorRGB::from_color_code(DeepPink);
504 pub const DeepSkyBlue: ColorRGB = ColorRGB::from_color_code(DeepSkyBlue);
505 pub const DimGray: ColorRGB = ColorRGB::from_color_code(DimGray);
506 pub const DimGrey: ColorRGB = ColorRGB::from_color_code(DimGrey);
507 pub const DodgerBlue: ColorRGB = ColorRGB::from_color_code(DodgerBlue);
508 pub const FireBrick: ColorRGB = ColorRGB::from_color_code(FireBrick);
509 pub const FloralWhite: ColorRGB = ColorRGB::from_color_code(FloralWhite);
510 pub const ForestGreen: ColorRGB = ColorRGB::from_color_code(ForestGreen);
511 pub const Fuchsia: ColorRGB = ColorRGB::from_color_code(Fuchsia);
512 pub const Gainsboro: ColorRGB = ColorRGB::from_color_code(Gainsboro);
513 pub const GhostWhite: ColorRGB = ColorRGB::from_color_code(GhostWhite);
514 pub const Gold: ColorRGB = ColorRGB::from_color_code(Gold);
515 pub const Goldenrod: ColorRGB = ColorRGB::from_color_code(Goldenrod);
516 pub const Gray: ColorRGB = ColorRGB::from_color_code(Gray);
517 pub const Grey: ColorRGB = ColorRGB::from_color_code(Grey);
518 pub const Green: ColorRGB = ColorRGB::from_color_code(Green);
519 pub const GreenYellow: ColorRGB = ColorRGB::from_color_code(GreenYellow);
520 pub const Honeydew: ColorRGB = ColorRGB::from_color_code(Honeydew);
521 pub const HotPink: ColorRGB = ColorRGB::from_color_code(HotPink);
522 pub const IndianRed: ColorRGB = ColorRGB::from_color_code(IndianRed);
523 pub const Indigo: ColorRGB = ColorRGB::from_color_code(Indigo);
524 pub const Ivory: ColorRGB = ColorRGB::from_color_code(Ivory);
525 pub const Khaki: ColorRGB = ColorRGB::from_color_code(Khaki);
526 pub const Lavender: ColorRGB = ColorRGB::from_color_code(Lavender);
527 pub const LavenderBlush: ColorRGB = ColorRGB::from_color_code(LavenderBlush);
528 pub const LawnGreen: ColorRGB = ColorRGB::from_color_code(LawnGreen);
529 pub const LemonChiffon: ColorRGB = ColorRGB::from_color_code(LemonChiffon);
530 pub const LightBlue: ColorRGB = ColorRGB::from_color_code(LightBlue);
531 pub const LightCoral: ColorRGB = ColorRGB::from_color_code(LightCoral);
532 pub const LightCyan: ColorRGB = ColorRGB::from_color_code(LightCyan);
533 pub const LightGoldenrodYellow: ColorRGB = ColorRGB::from_color_code(LightGoldenrodYellow);
534 pub const LightGreen: ColorRGB = ColorRGB::from_color_code(LightGreen);
535 pub const LightGrey: ColorRGB = ColorRGB::from_color_code(LightGrey);
536 pub const LightPink: ColorRGB = ColorRGB::from_color_code(LightPink);
537 pub const LightSalmon: ColorRGB = ColorRGB::from_color_code(LightSalmon);
538 pub const LightSeaGreen: ColorRGB = ColorRGB::from_color_code(LightSeaGreen);
539 pub const LightSkyBlue: ColorRGB = ColorRGB::from_color_code(LightSkyBlue);
540 pub const LightSlateGray: ColorRGB = ColorRGB::from_color_code(LightSlateGray);
541 pub const LightSlateGrey: ColorRGB = ColorRGB::from_color_code(LightSlateGrey);
542 pub const LightSteelBlue: ColorRGB = ColorRGB::from_color_code(LightSteelBlue);
543 pub const LightYellow: ColorRGB = ColorRGB::from_color_code(LightYellow);
544 pub const Lime: ColorRGB = ColorRGB::from_color_code(Lime);
545 pub const LimeGreen: ColorRGB = ColorRGB::from_color_code(LimeGreen);
546 pub const Linen: ColorRGB = ColorRGB::from_color_code(Linen);
547 pub const Magenta: ColorRGB = ColorRGB::from_color_code(Magenta);
548 pub const Maroon: ColorRGB = ColorRGB::from_color_code(Maroon);
549 pub const MediumAquamarine: ColorRGB = ColorRGB::from_color_code(MediumAquamarine);
550 pub const MediumBlue: ColorRGB = ColorRGB::from_color_code(MediumBlue);
551 pub const MediumOrchid: ColorRGB = ColorRGB::from_color_code(MediumOrchid);
552 pub const MediumPurple: ColorRGB = ColorRGB::from_color_code(MediumPurple);
553 pub const MediumSeaGreen: ColorRGB = ColorRGB::from_color_code(MediumSeaGreen);
554 pub const MediumSlateBlue: ColorRGB = ColorRGB::from_color_code(MediumSlateBlue);
555 pub const MediumSpringGreen: ColorRGB = ColorRGB::from_color_code(MediumSpringGreen);
556 pub const MediumTurquoise: ColorRGB = ColorRGB::from_color_code(MediumTurquoise);
557 pub const MediumVioletRed: ColorRGB = ColorRGB::from_color_code(MediumVioletRed);
558 pub const MidnightBlue: ColorRGB = ColorRGB::from_color_code(MidnightBlue);
559 pub const MintCream: ColorRGB = ColorRGB::from_color_code(MintCream);
560 pub const MistyRose: ColorRGB = ColorRGB::from_color_code(MistyRose);
561 pub const Moccasin: ColorRGB = ColorRGB::from_color_code(Moccasin);
562 pub const NavajoWhite: ColorRGB = ColorRGB::from_color_code(NavajoWhite);
563 pub const Navy: ColorRGB = ColorRGB::from_color_code(Navy);
564 pub const OldLace: ColorRGB = ColorRGB::from_color_code(OldLace);
565 pub const Olive: ColorRGB = ColorRGB::from_color_code(Olive);
566 pub const OliveDrab: ColorRGB = ColorRGB::from_color_code(OliveDrab);
567 pub const Orange: ColorRGB = ColorRGB::from_color_code(Orange);
568 pub const OrangeRed: ColorRGB = ColorRGB::from_color_code(OrangeRed);
569 pub const Orchid: ColorRGB = ColorRGB::from_color_code(Orchid);
570 pub const PaleGoldenrod: ColorRGB = ColorRGB::from_color_code(PaleGoldenrod);
571 pub const PaleGreen: ColorRGB = ColorRGB::from_color_code(PaleGreen);
572 pub const PaleTurquoise: ColorRGB = ColorRGB::from_color_code(PaleTurquoise);
573 pub const PaleVioletRed: ColorRGB = ColorRGB::from_color_code(PaleVioletRed);
574 pub const PapayaWhip: ColorRGB = ColorRGB::from_color_code(PapayaWhip);
575 pub const PeachPuff: ColorRGB = ColorRGB::from_color_code(PeachPuff);
576 pub const Peru: ColorRGB = ColorRGB::from_color_code(Peru);
577 pub const Pink: ColorRGB = ColorRGB::from_color_code(Pink);
578 pub const Plaid: ColorRGB = ColorRGB::from_color_code(Plaid);
579 pub const Plum: ColorRGB = ColorRGB::from_color_code(Plum);
580 pub const PowderBlue: ColorRGB = ColorRGB::from_color_code(PowderBlue);
581 pub const Purple: ColorRGB = ColorRGB::from_color_code(Purple);
582 pub const Red: ColorRGB = ColorRGB::from_color_code(Red);
583 pub const RosyBrown: ColorRGB = ColorRGB::from_color_code(RosyBrown);
584 pub const RoyalBlue: ColorRGB = ColorRGB::from_color_code(RoyalBlue);
585 pub const SaddleBrown: ColorRGB = ColorRGB::from_color_code(SaddleBrown);
586 pub const Salmon: ColorRGB = ColorRGB::from_color_code(Salmon);
587 pub const SandyBrown: ColorRGB = ColorRGB::from_color_code(SandyBrown);
588 pub const SeaGreen: ColorRGB = ColorRGB::from_color_code(SeaGreen);
589 pub const Seashell: ColorRGB = ColorRGB::from_color_code(Seashell);
590 pub const Sienna: ColorRGB = ColorRGB::from_color_code(Sienna);
591 pub const Silver: ColorRGB = ColorRGB::from_color_code(Silver);
592 pub const SkyBlue: ColorRGB = ColorRGB::from_color_code(SkyBlue);
593 pub const SlateBlue: ColorRGB = ColorRGB::from_color_code(SlateBlue);
594 pub const SlateGray: ColorRGB = ColorRGB::from_color_code(SlateGray);
595 pub const SlateGrey: ColorRGB = ColorRGB::from_color_code(SlateGrey);
596 pub const Snow: ColorRGB = ColorRGB::from_color_code(Snow);
597 pub const SpringGreen: ColorRGB = ColorRGB::from_color_code(SpringGreen);
598 pub const SteelBlue: ColorRGB = ColorRGB::from_color_code(SteelBlue);
599 pub const Tan: ColorRGB = ColorRGB::from_color_code(Tan);
600 pub const Teal: ColorRGB = ColorRGB::from_color_code(Teal);
601 pub const Thistle: ColorRGB = ColorRGB::from_color_code(Thistle);
602 pub const Tomato: ColorRGB = ColorRGB::from_color_code(Tomato);
603 pub const Turquoise: ColorRGB = ColorRGB::from_color_code(Turquoise);
604 pub const Violet: ColorRGB = ColorRGB::from_color_code(Violet);
605 pub const Wheat: ColorRGB = ColorRGB::from_color_code(Wheat);
606 pub const White: ColorRGB = ColorRGB::from_color_code(White);
607 pub const WhiteSmoke: ColorRGB = ColorRGB::from_color_code(WhiteSmoke);
608 pub const Yellow: ColorRGB = ColorRGB::from_color_code(Yellow);
609 pub const YellowGreen: ColorRGB = ColorRGB::from_color_code(YellowGreen);
610}