diff options
Diffstat (limited to 'theme_test')
| -rw-r--r-- | theme_test/Cargo.toml | 4 | ||||
| -rw-r--r-- | theme_test/src/main.rs | 184 |
2 files changed, 121 insertions, 67 deletions
diff --git a/theme_test/Cargo.toml b/theme_test/Cargo.toml index 34008eb..5ccbefa 100644 --- a/theme_test/Cargo.toml +++ b/theme_test/Cargo.toml @@ -5,4 +5,6 @@ edition = "2024" [dependencies] iced.workspace = true -material_theme = { path = "../material_theme" } +iced_anim.workspace = true +iced_dialog.workspace = true +material_theme = { path = "../material_theme", features = ["dialog", "animate"] } diff --git a/theme_test/src/main.rs b/theme_test/src/main.rs index 26358c8..9826fe9 100644 --- a/theme_test/src/main.rs +++ b/theme_test/src/main.rs @@ -1,9 +1,9 @@ use iced::Element; -use iced::widget::{button, column, container, row, text}; -use material_theme::Theme; -use material_theme::button::{ - elevated, filled_tonal, outlined, text as text_style, -}; +use iced::Length::Fill; +use iced::widget::{button, column, container, pick_list, row}; +use iced_anim::{Animated, Animation, Event}; +use iced_dialog::dialog; +use material_theme::button::{elevated, filled_tonal, outlined, text}; use material_theme::container::{ error, error_container, inverse_surface, primary, primary_container, secondary, secondary_container, surface, surface_container, @@ -11,78 +11,130 @@ use material_theme::container::{ surface_container_lowest, tertiary, tertiary_container, }; use material_theme::text::surface_variant; +use material_theme::{DARK, LIGHT, Theme}; fn main() -> iced::Result { - iced::application(|| {}, (), view) - .theme(|_| material_theme::LIGHT.clone()) + iced::application(State::default, State::update, State::view) + .theme(|state| state.theme.value().clone()) .run() } +#[allow(dead_code)] #[derive(Debug, Clone)] enum Message { Noop, + OpenDialog, + CloseDialog, + SwitchTheme(Event<Theme>), } -fn view(_: &()) -> Element<'_, Message, Theme> { - container( - row![ - column![ - button("Disabled"), - button("Filled").on_press(Message::Noop), - button("Filled Tonal") - .on_press(Message::Noop) - .style(filled_tonal), - button("Elevated").on_press(Message::Noop).style(elevated), - button("Outlined").on_press(Message::Noop).style(outlined), - button("Text").on_press(Message::Noop).style(text_style), - button("Text Disabled").style(text_style), - ] - .spacing(10), - column![ - text("None"), - container("Primary").padding(8).style(primary), - container("Primary Container") - .padding(8) - .style(primary_container), - container("Secondary").padding(8).style(secondary), - container("Secondary Container") - .padding(8) - .style(secondary_container), - container("Tertiary").padding(8).style(tertiary), - container("Tertiary Container") - .padding(8) - .style(tertiary_container), - container("Error").padding(8).style(error), - container("Error Container") - .padding(8) - .style(error_container), - container("Surface").padding(8).style(surface), - container(text("Surface Variant").style(surface_variant)) +#[derive(Debug, Default)] +pub struct State { + show_dialog: bool, + theme: Animated<Theme>, +} + +impl State { + fn update(&mut self, message: Message) { + match message { + Message::Noop => {} + Message::OpenDialog => { + self.show_dialog = true; + } + Message::CloseDialog => { + self.show_dialog = false; + } + Message::SwitchTheme(event) => { + self.theme.update(event); + } + } + } + fn view(&self) -> Element<'_, Message, Theme> { + let base = container( + row![ + column![ + button("Disabled"), + button("Filled").on_press(Message::Noop), + button("Filled Tonal") + .on_press(Message::Noop) + .style(filled_tonal), + button("Elevated").on_press(Message::Noop).style(elevated), + button("Outlined").on_press(Message::Noop).style(outlined), + button("Text").on_press(Message::Noop).style(text), + button("Text Disabled").style(text), + ] + .spacing(10), + column![ + container("None").padding(8), + container("Primary").padding(8).style(primary), + container("Primary Container") + .padding(8) + .style(primary_container), + container("Secondary").padding(8).style(secondary), + container("Secondary Container") + .padding(8) + .style(secondary_container), + container("Tertiary").padding(8).style(tertiary), + container("Tertiary Container") + .padding(8) + .style(tertiary_container), + container("Error").padding(8).style(error), + container("Error Container") + .padding(8) + .style(error_container), + container("Surface").padding(8).style(surface), + container( + iced::widget::text("Surface Variant") + .style(surface_variant) + ) .padding(8) .style(surface), - container("Inverse Surface") - .padding(8) - .style(inverse_surface), - container("Surface Container Lowest") - .padding(8) - .style(surface_container_lowest), - container("Surface Container Low") - .padding(8) - .style(surface_container_low), - container("Surface Container") - .padding(8) - .style(surface_container), - container("Surface Container High") - .padding(8) - .style(surface_container_high), - container("Surface Container Highest") - .padding(8) - .style(surface_container_highest), + container("Inverse Surface") + .padding(8) + .style(inverse_surface), + container("Surface Container Lowest") + .padding(8) + .style(surface_container_lowest), + container("Surface Container Low") + .padding(8) + .style(surface_container_low), + container("Surface Container") + .padding(8) + .style(surface_container), + container("Surface Container High") + .padding(8) + .style(surface_container_high), + container("Surface Container Highest") + .padding(8) + .style(surface_container_highest), + ] + .spacing(10), + pick_list( + [LIGHT.clone(), DARK.clone()], + Some(self.theme.target()), + |theme| Message::SwitchTheme(theme.into()) + ) + .placeholder("Select a theme..."), + button("Open Dialog").on_press(Message::OpenDialog) ] - .spacing(10) - ] - .spacing(20), - ) - .padding(12) - .into() + .spacing(20), + ) + .width(Fill) + .height(Fill) + .padding(12); + + let dialog = + dialog(self.show_dialog, base, iced::widget::text("Say Hi!")) + .title("This is a Dialog.") + .push_button( + iced_dialog::button("Hi!").on_press(Message::CloseDialog), + ) + .backdrop(|theme| theme.colorscheme.scrim) + .width(280) + .height(187); + + Animation::new(&self.theme, dialog) + .on_update(Message::SwitchTheme) + .into() + } } |
