cosmic_theme/model/
cosmic_palette.rs1use palette::Srgba;
2use serde::{Deserialize, Serialize};
3use std::sync::LazyLock;
4
5pub static LIGHT_PALETTE: LazyLock<CosmicPalette> =
7 LazyLock::new(|| ron::from_str(include_str!("light.ron")).unwrap());
8
9pub static DARK_PALETTE: LazyLock<CosmicPalette> =
11 LazyLock::new(|| ron::from_str(include_str!("dark.ron")).unwrap());
12
13#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
15pub enum CosmicPalette {
16 Dark(CosmicPaletteInner),
18 Light(CosmicPaletteInner),
20 HighContrastLight(CosmicPaletteInner),
22 HighContrastDark(CosmicPaletteInner),
24}
25
26impl CosmicPalette {
27 #[inline]
29 pub fn inner(self) -> CosmicPaletteInner {
30 match self {
31 CosmicPalette::Dark(p) => p,
32 CosmicPalette::Light(p) => p,
33 CosmicPalette::HighContrastLight(p) => p,
34 CosmicPalette::HighContrastDark(p) => p,
35 }
36 }
37}
38
39impl AsMut<CosmicPaletteInner> for CosmicPalette {
40 #[inline]
41 fn as_mut(&mut self) -> &mut CosmicPaletteInner {
42 match self {
43 CosmicPalette::Dark(p) => p,
44 CosmicPalette::Light(p) => p,
45 CosmicPalette::HighContrastLight(p) => p,
46 CosmicPalette::HighContrastDark(p) => p,
47 }
48 }
49}
50
51impl AsRef<CosmicPaletteInner> for CosmicPalette {
52 #[inline]
53 fn as_ref(&self) -> &CosmicPaletteInner {
54 match self {
55 CosmicPalette::Dark(p) => p,
56 CosmicPalette::Light(p) => p,
57 CosmicPalette::HighContrastLight(p) => p,
58 CosmicPalette::HighContrastDark(p) => p,
59 }
60 }
61}
62
63impl CosmicPalette {
64 #[inline]
66 pub fn is_dark(&self) -> bool {
67 match self {
68 CosmicPalette::Dark(_) | CosmicPalette::HighContrastDark(_) => true,
69 CosmicPalette::Light(_) | CosmicPalette::HighContrastLight(_) => false,
70 }
71 }
72
73 #[inline]
75 pub fn is_high_contrast(&self) -> bool {
76 match self {
77 CosmicPalette::HighContrastLight(_) | CosmicPalette::HighContrastDark(_) => true,
78 CosmicPalette::Light(_) | CosmicPalette::Dark(_) => false,
79 }
80 }
81}
82
83impl Default for CosmicPalette {
84 #[inline]
85 fn default() -> Self {
86 CosmicPalette::Dark(Default::default())
87 }
88}
89
90#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
92pub struct CosmicPaletteInner {
93 pub name: String,
95
96 pub bright_red: Srgba,
99 pub bright_green: Srgba,
101 pub bright_orange: Srgba,
103
104 pub gray_1: Srgba,
107 pub gray_2: Srgba,
109
110 pub neutral_0: Srgba,
113 pub neutral_1: Srgba,
115 pub neutral_2: Srgba,
117 pub neutral_3: Srgba,
119 pub neutral_4: Srgba,
121 pub neutral_5: Srgba,
123 pub neutral_6: Srgba,
125 pub neutral_7: Srgba,
127 pub neutral_8: Srgba,
129 pub neutral_9: Srgba,
131 pub neutral_10: Srgba,
133
134 pub accent_blue: Srgba,
136 pub accent_indigo: Srgba,
138 pub accent_purple: Srgba,
140 pub accent_pink: Srgba,
142 pub accent_red: Srgba,
144 pub accent_orange: Srgba,
146 pub accent_yellow: Srgba,
148 pub accent_green: Srgba,
150 pub accent_warm_grey: Srgba,
152
153 pub ext_warm_grey: Srgba,
156 pub ext_orange: Srgba,
158 pub ext_yellow: Srgba,
160 pub ext_blue: Srgba,
162 pub ext_purple: Srgba,
164 pub ext_pink: Srgba,
166 pub ext_indigo: Srgba,
168}
169
170impl CosmicPalette {
171 #[inline]
173 pub fn name(&self) -> &str {
174 match &self {
175 CosmicPalette::Dark(p) => &p.name,
176 CosmicPalette::Light(p) => &p.name,
177 CosmicPalette::HighContrastLight(p) => &p.name,
178 CosmicPalette::HighContrastDark(p) => &p.name,
179 }
180 }
181}