Skip to main content

gled_model/asset/scene/
color.rs

1use serde::{Deserialize, Serialize};
2use strum::{Display, EnumIter, EnumString};
3
4/// A scene's colour. It reads as its lowercase name ("pink"), as OSC sends
5/// it, and parses from its name in any case.
6#[derive(
7    Debug,
8    Clone,
9    Default,
10    Copy,
11    PartialEq,
12    Eq,
13    Serialize,
14    Deserialize,
15    Display,
16    EnumString,
17    EnumIter,
18)]
19#[strum(serialize_all = "lowercase", ascii_case_insensitive)]
20pub enum SceneInstanceColor {
21    Red,
22    Green,
23    Blue,
24    White,
25    Orange,
26    Yellow,
27    Purple,
28    #[default]
29    Pink,
30    Black,
31}
32
33impl SceneInstanceColor {
34    /// 8 bit RGB, as the UI shows it.
35    pub fn rgb8(self) -> [u8; 3] {
36        match self {
37            Self::Red => [139, 0, 0],       // Dark Red
38            Self::Green => [0, 100, 0],     // Dark Green
39            Self::Blue => [0, 0, 139],      // Dark Blue
40            Self::White => [169, 169, 169], // Dark Gray (instead of white)
41            Self::Orange => [255, 140, 0],  // Dark Orange
42            Self::Yellow => [204, 204, 0],  // Dark Yellow
43            Self::Purple => [75, 0, 130],   // Dark Purple (Indigo)
44            Self::Pink => [231, 84, 128],   // Dark Pink
45            Self::Black => [0, 0, 0],       // Black
46        }
47    }
48}