feat: add ThemeBuilder

This commit is contained in:
Ashley Wulber 2023-08-03 16:23:24 -04:00 committed by Ashley Wulber
parent 620c1adb74
commit 607883e4ad
8 changed files with 354 additions and 15 deletions

View file

@ -35,6 +35,29 @@ pub enum CosmicPalette<C> {
HighContrastDark(CosmicPaletteInner<C>),
}
impl<C> CosmicPalette<C> {
/// extract the inner palette
pub fn inner(self) -> CosmicPaletteInner<C> {
match self {
CosmicPalette::Dark(p) => p,
CosmicPalette::Light(p) => p,
CosmicPalette::HighContrastLight(p) => p,
CosmicPalette::HighContrastDark(p) => p,
}
}
}
impl<C> AsMut<CosmicPaletteInner<C>> for CosmicPalette<C> {
fn as_mut(&mut self) -> &mut CosmicPaletteInner<C> {
match self {
CosmicPalette::Dark(p) => p,
CosmicPalette::Light(p) => p,
CosmicPalette::HighContrastLight(p) => p,
CosmicPalette::HighContrastDark(p) => p,
}
}
}
impl<C> AsRef<CosmicPaletteInner<C>> for CosmicPalette<C>
where
C: Clone + fmt::Debug + Default + Into<Srgba> + From<Srgba> + Serialize + DeserializeOwned,
@ -85,6 +108,9 @@ pub struct CosmicPaletteInner<C> {
/// name of the palette
pub name: String,
/// the selected accent color
pub accent: C,
/// basic palette
/// blue: colors used for various points of emphasis in the UI
pub blue: C,
@ -161,6 +187,7 @@ impl From<CosmicPaletteInner<CssColor>> for CosmicPaletteInner<Srgba> {
fn from(p: CosmicPaletteInner<CssColor>) -> Self {
CosmicPaletteInner {
name: p.name,
accent: p.accent.into(),
blue: p.blue.into(),
red: p.red.into(),
green: p.green.into(),
@ -253,3 +280,14 @@ where
Ok(ron::de::from_reader(f)?)
}
}
impl Into<CosmicPalette<Srgba>> for CosmicPalette<CssColor> {
fn into(self) -> CosmicPalette<Srgba> {
match self {
CosmicPalette::Dark(p) => CosmicPalette::Dark(p.into()),
CosmicPalette::Light(p) => CosmicPalette::Light(p.into()),
CosmicPalette::HighContrastLight(p) => CosmicPalette::HighContrastLight(p.into()),
CosmicPalette::HighContrastDark(p) => CosmicPalette::HighContrastDark(p.into()),
}
}
}