use retroglyph_core::Color;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Theme {
pub bg: Color,
pub panel_bg: Color,
pub border: Color,
pub title_bg: Color,
pub fg: Color,
pub accent: Color,
pub hover_bg: Color,
pub press_bg: Color,
pub dim: Color,
}
impl Theme {
pub const DARK: Self = Self {
bg: Color::Rgb {
r: 16,
g: 16,
b: 24,
},
panel_bg: Color::Rgb {
r: 22,
g: 22,
b: 32,
},
border: Color::Rgb {
r: 70,
g: 74,
b: 96,
},
title_bg: Color::Rgb {
r: 30,
g: 32,
b: 48,
},
fg: Color::Rgb {
r: 190,
g: 192,
b: 208,
},
accent: Color::Rgb {
r: 90,
g: 170,
b: 250,
},
hover_bg: Color::Rgb {
r: 40,
g: 44,
b: 64,
},
press_bg: Color::Rgb {
r: 60,
g: 110,
b: 170,
},
dim: Color::Rgb {
r: 110,
g: 112,
b: 130,
},
};
pub const LIGHT: Self = Self {
bg: Color::Rgb {
r: 240,
g: 240,
b: 246,
},
panel_bg: Color::Rgb {
r: 255,
g: 255,
b: 255,
},
border: Color::Rgb {
r: 160,
g: 164,
b: 180,
},
title_bg: Color::Rgb {
r: 224,
g: 226,
b: 240,
},
fg: Color::Rgb {
r: 20,
g: 22,
b: 32,
},
accent: Color::Rgb {
r: 20,
g: 100,
b: 210,
},
hover_bg: Color::Rgb {
r: 230,
g: 236,
b: 248,
},
press_bg: Color::Rgb {
r: 160,
g: 194,
b: 240,
},
dim: Color::Rgb {
r: 130,
g: 132,
b: 150,
},
};
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn dark_and_light_are_distinct() {
assert_ne!(Theme::DARK, Theme::LIGHT);
}
#[test]
fn dark_background_is_darker_than_light_background() {
let Color::Rgb {
r: dr,
g: dg,
b: db,
} = Theme::DARK.bg
else {
unreachable!()
};
let Color::Rgb {
r: lr,
g: lg,
b: lb,
} = Theme::LIGHT.bg
else {
unreachable!()
};
let dark_luma = u32::from(dr) + u32::from(dg) + u32::from(db);
let light_luma = u32::from(lr) + u32::from(lg) + u32::from(lb);
assert!(dark_luma < light_luma);
}
}