use embedded_graphics::{
pixelcolor::{
Bgr555, Bgr565, Bgr666, Bgr888, BinaryColor, Gray2, Gray4, Gray8, GrayColor as _, Rgb555,
Rgb565, Rgb666, Rgb888, RgbColor as _,
},
prelude::PixelColor,
};
#[derive(Clone, Copy, PartialEq, Eq)]
pub struct Theme<C>
where
C: PixelColor,
{
pub background: C,
pub foreground: C,
}
impl<C> Theme<C>
where
C: PixelColor,
{
pub const fn new(background: C, foreground: C) -> Self {
Self { background, foreground }
}
}
macro_rules! impl_rgb_theme {
($($color:ty),+ $(,)?) => {
$(
impl Default for Theme<$color> {
fn default() -> Self {
Self::new(<$color>::BLACK, <$color>::WHITE)
}
}
)+
};
}
impl_rgb_theme!(Rgb555, Bgr555, Rgb565, Bgr565, Rgb666, Bgr666, Rgb888, Bgr888);
macro_rules! impl_gray_theme {
($($color:ty),+ $(,)?) => {
$(
impl Default for Theme<$color> {
fn default() -> Self {
Self::new(<$color>::BLACK, <$color>::WHITE)
}
}
)+
};
}
impl_gray_theme!(Gray2, Gray4, Gray8);
impl Default for Theme<BinaryColor> {
fn default() -> Self {
Self::new(BinaryColor::Off, BinaryColor::On)
}
}