diff options
-rw-r--r-- | examples/styling/Cargo.toml | 1 | ||||
-rw-r--r-- | examples/styling/src/main.rs | 24 | ||||
-rw-r--r-- | native/src/widget/helpers.rs | 2 | ||||
-rw-r--r-- | native/src/widget/radio.rs | 2 | ||||
-rw-r--r-- | style/src/theme.rs | 9 | ||||
-rw-r--r-- | style/src/theme/palette.rs | 8 |
6 files changed, 39 insertions, 7 deletions
diff --git a/examples/styling/Cargo.toml b/examples/styling/Cargo.toml index f771708c..344cd0d6 100644 --- a/examples/styling/Cargo.toml +++ b/examples/styling/Cargo.toml @@ -7,3 +7,4 @@ publish = false [dependencies] iced = { path = "../.." } +once_cell = "1.14.0"
\ No newline at end of file diff --git a/examples/styling/src/main.rs b/examples/styling/src/main.rs index cda53e87..36ab0c0c 100644 --- a/examples/styling/src/main.rs +++ b/examples/styling/src/main.rs @@ -1,14 +1,28 @@ +use iced::theme::Palette; +use iced::theme::palette::Extended; use iced::widget::{ button, checkbox, column, container, horizontal_rule, progress_bar, radio, row, scrollable, slider, text, text_input, toggler, vertical_rule, vertical_space, }; -use iced::{Alignment, Element, Length, Sandbox, Settings, Theme}; +use iced::{Alignment, Element, Length, Sandbox, Settings, Theme, Color}; +use once_cell::sync::OnceCell; pub fn main() -> iced::Result { + let palette = Palette { + background: Color::from_rgb(1.0, 0.9, 1.0), + text: Color::BLACK, + primary: Color::from_rgb(0.5, 0.5, 0.0), + success: Color::from_rgb(0.0, 1.0, 0.0), + danger: Color::from_rgb(1.0, 0.0, 0.0), + }; + let extended = Extended::generate(palette); + CUSTOM_THEME.set(Theme::Custom { palette, extended }).unwrap(); Styling::run(Settings::default()) } +static CUSTOM_THEME: OnceCell<Theme> = OnceCell::new(); + #[derive(Default)] struct Styling { theme: Theme, @@ -51,11 +65,15 @@ impl Sandbox for Styling { } fn view(&self) -> Element<Message> { - let choose_theme = [Theme::Light, Theme::Dark].iter().fold( + let choose_theme = [Theme::Light, Theme::Dark, *CUSTOM_THEME.get().unwrap()].iter().fold( column![text("Choose a theme:")].spacing(10), |column, theme| { column.push(radio( - format!("{:?}", theme), + match theme { + Theme::Light => "Light", + Theme::Dark => "Dark", + Theme::Custom { .. } => "Custom", + }, *theme, Some(self.theme), Message::ThemeChanged, diff --git a/native/src/widget/helpers.rs b/native/src/widget/helpers.rs index 79751878..7dbe8538 100644 --- a/native/src/widget/helpers.rs +++ b/native/src/widget/helpers.rs @@ -143,7 +143,7 @@ where Message: Clone, Renderer: crate::text::Renderer, Renderer::Theme: widget::radio::StyleSheet, - V: Copy + Eq, + V: Copy + PartialEq, { widget::Radio::new(value, label, selected, on_click) } diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs index cb83f745..204247f8 100644 --- a/native/src/widget/radio.rs +++ b/native/src/widget/radio.rs @@ -84,7 +84,7 @@ where f: F, ) -> Self where - V: Eq + Copy, + V: PartialEq + Copy, F: FnOnce(V) -> Message, { Radio { diff --git a/style/src/theme.rs b/style/src/theme.rs index ea538c3a..7d47f1a1 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -1,5 +1,6 @@ pub mod palette; +use self::palette::Extended; pub use self::palette::Palette; use crate::application; @@ -20,10 +21,14 @@ use crate::toggler; use iced_core::{Background, Color}; -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, Clone, Copy, PartialEq)] pub enum Theme { Light, Dark, + Custom { + palette: Palette, + extended: Extended + } } impl Theme { @@ -31,6 +36,7 @@ impl Theme { match self { Self::Light => Palette::LIGHT, Self::Dark => Palette::DARK, + Self::Custom { palette, .. } => palette } } @@ -38,6 +44,7 @@ impl Theme { match self { Self::Light => &palette::EXTENDED_LIGHT, Self::Dark => &palette::EXTENDED_DARK, + Self::Custom { extended, .. } => extended, } } } diff --git a/style/src/theme/palette.rs b/style/src/theme/palette.rs index 4fb5e4c8..b3a10d28 100644 --- a/style/src/theme/palette.rs +++ b/style/src/theme/palette.rs @@ -58,6 +58,7 @@ impl Palette { }; } +#[derive(Debug, Clone, Copy, PartialEq)] pub struct Extended { pub background: Background, pub primary: Primary, @@ -95,7 +96,7 @@ impl Extended { } } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq)] pub struct Pair { pub color: Color, pub text: Color, @@ -110,6 +111,7 @@ impl Pair { } } +#[derive(Debug, Clone, Copy, PartialEq)] pub struct Background { pub base: Pair, pub weak: Pair, @@ -129,6 +131,7 @@ impl Background { } } +#[derive(Debug, Clone, Copy, PartialEq)] pub struct Primary { pub base: Pair, pub weak: Pair, @@ -148,6 +151,7 @@ impl Primary { } } +#[derive(Debug, Clone, Copy, PartialEq)] pub struct Secondary { pub base: Pair, pub weak: Pair, @@ -168,6 +172,7 @@ impl Secondary { } } +#[derive(Debug, Clone, Copy, PartialEq)] pub struct Success { pub base: Pair, pub weak: Pair, @@ -187,6 +192,7 @@ impl Success { } } +#[derive(Debug, Clone, Copy, PartialEq)] pub struct Danger { pub base: Pair, pub weak: Pair, |