From eea6c89ce603d452985581ebea3d42543142ab85 Mon Sep 17 00:00:00 2001 From: pml68 Date: Sun, 16 Feb 2025 15:32:11 +0100 Subject: feat!: add name to `Theme`, `is_dark` -> `dark` --- src/theme.rs | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) (limited to 'src/theme.rs') diff --git a/src/theme.rs b/src/theme.rs index db16372..7cb51c1 100644 --- a/src/theme.rs +++ b/src/theme.rs @@ -5,6 +5,9 @@ use iced::Color; use crate::config::Config; +const DEFAULT_THEME_CONTENT: &str = + include_str!("../assets/themes/rose_pine.toml"); + pub fn theme_index(theme_name: &str, slice: &[iced::Theme]) -> Option { slice .iter() @@ -166,20 +169,41 @@ pub struct Appearance { impl Default for Appearance { fn default() -> Self { Self { - selected: iced::Theme::default(), - all: iced::Theme::ALL.into(), + selected: Theme::default().into(), + all: { + let mut themes = iced::Theme::ALL.to_owned(); + themes.push(Theme::default().into()); + themes.into() + }, } } } -#[derive(Debug, Default, serde::Deserialize)] +#[derive(Debug, serde::Deserialize)] pub struct Theme { + name: String, palette: ThemePalette, - is_dark: Option, + dark: Option, #[serde(flatten)] extended: Option, } +impl From for iced::Theme { + fn from(value: Theme) -> Self { + iced::Theme::custom_with_fn( + value.name.clone(), + value.palette.clone().into(), + |_| value.into(), + ) + } +} + +impl Default for Theme { + fn default() -> Self { + toml::from_str(DEFAULT_THEME_CONTENT).expect("parse default theme") + } +} + #[derive(Debug, Clone, serde::Deserialize)] pub struct ThemePalette { #[serde(with = "color_serde")] @@ -194,14 +218,6 @@ pub struct ThemePalette { danger: Color, } -impl Theme { - pub fn into_iced_theme(self, name: String) -> iced::Theme { - iced::Theme::custom_with_fn(name, self.palette.clone().into(), |_| { - self.into() - }) - } -} - impl Default for ThemePalette { fn default() -> Self { let palette = iced::Theme::default().palette(); @@ -231,7 +247,7 @@ impl From for Extended { fn from(theme: Theme) -> Self { let mut extended = Extended::generate(theme.palette.into()); - if let Some(is_dark) = theme.is_dark { + if let Some(is_dark) = theme.dark { extended.is_dark = is_dark; } -- cgit v1.2.3