From 8e42dc46eae072ffd054d1c4a35a1cf39020fe56 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 30 Sep 2022 09:57:11 -0600 Subject: [PATCH] Move list_view to libcosmic --- examples/cosmic/src/main.rs | 162 +++++++++++++++++------------------- src/widget/list_view.rs | 25 ++++-- src/widget/mod.rs | 2 +- 3 files changed, 97 insertions(+), 92 deletions(-) diff --git a/examples/cosmic/src/main.rs b/examples/cosmic/src/main.rs index 391ddb84..80cdfa2a 100644 --- a/examples/cosmic/src/main.rs +++ b/examples/cosmic/src/main.rs @@ -3,8 +3,8 @@ use cosmic::{ widget::{ button, icon, + list_view, nav_bar, - list_view_style, }, settings, iced::{theme, Alignment, Color, Element, Length, Sandbox, Theme}, @@ -123,97 +123,87 @@ impl Sandbox for Window { , vertical_space(Length::Units(16)), text("Buttons").font(FONT_SEMIBOLD), - container( - column![ - row![ - button!("Primary") - .style(theme::Button::Primary) - .on_press(Message::ButtonPressed) - , - button!("Secondary") - .style(theme::Button::Secondary) - .on_press(Message::ButtonPressed) - , - button!("Positive") - .style(theme::Button::Positive) - .on_press(Message::ButtonPressed) - , - button!("Destructive") - .style(theme::Button::Destructive) - .on_press(Message::ButtonPressed) - , - button!("Text") - .style(theme::Button::Text) - .on_press(Message::ButtonPressed) - , - ].spacing(12), - horizontal_rule(12), - row![ - button!("Primary") - .style(theme::Button::Primary) - .padding([8, 16]) - , - button!("Secondary") - .style(theme::Button::Secondary) - .padding([8, 16]) - , - button!("Positive") - .style(theme::Button::Positive) - .padding([8, 16]) - , - button!("Destructive") - .style(theme::Button::Destructive) - .padding([8, 16]) - , - button!("Text") - .style(theme::Button::Text) - .padding([8, 16]) - , - ].spacing(12), - ] - .padding([12, 16]) - .spacing(12) + list_view!( + row![ + button!("Primary") + .style(theme::Button::Primary) + .on_press(Message::ButtonPressed) + , + button!("Secondary") + .style(theme::Button::Secondary) + .on_press(Message::ButtonPressed) + , + button!("Positive") + .style(theme::Button::Positive) + .on_press(Message::ButtonPressed) + , + button!("Destructive") + .style(theme::Button::Destructive) + .on_press(Message::ButtonPressed) + , + button!("Text") + .style(theme::Button::Text) + .on_press(Message::ButtonPressed) + , + ].spacing(12), + horizontal_rule(12), + row![ + button!("Primary") + .style(theme::Button::Primary) + .padding([8, 16]) + , + button!("Secondary") + .style(theme::Button::Secondary) + .padding([8, 16]) + , + button!("Positive") + .style(theme::Button::Positive) + .padding([8, 16]) + , + button!("Destructive") + .style(theme::Button::Destructive) + .padding([8, 16]) + , + button!("Text") + .style(theme::Button::Text) + .padding([8, 16]) + , + ].spacing(12), ) - .style(theme::Container::Custom(list_view_style)) , vertical_space(Length::Units(16)), text("Controls").font(FONT_SEMIBOLD), - container( - column![ - row![ - text("Toggler"), - horizontal_space(Length::Fill), - toggler(None, self.toggler_value, Message::TogglerToggled) - .size(24) - .width(Length::Shrink), - ] - .padding([0, 8]) - , - horizontal_rule(12), - row![ - text("Slider"), - horizontal_space(Length::Fill), - slider(0.0..=100.0, self.slider_value, Message::SliderChanged) - .width(Length::Units(250)), - ] - .padding([0, 8]) - , - horizontal_rule(12), - row![ - text("Progress"), - horizontal_space(Length::Fill), - progress_bar(0.0..=100.0, self.slider_value).height(Length::Units(4)) - .width(Length::Units(250)), - ] - .padding([0, 8]) - , - horizontal_rule(12), - checkbox("Checkbox", self.checkbox_value, Message::CheckboxToggled), + list_view!( + row![ + text("Toggler"), + horizontal_space(Length::Fill), + toggler(None, self.toggler_value, Message::TogglerToggled) + .size(24) + .width(Length::Shrink), ] - .padding([12, 16]) - .spacing(12) + .padding([0, 8]) + , + horizontal_rule(12), + row![ + text("Slider"), + horizontal_space(Length::Fill), + slider(0.0..=100.0, self.slider_value, Message::SliderChanged) + .width(Length::Units(250)), + ] + .padding([0, 8]) + , + horizontal_rule(12), + row![ + text("Progress"), + horizontal_space(Length::Fill), + progress_bar(0.0..=100.0, self.slider_value).height(Length::Units(4)) + .width(Length::Units(250)), + ] + .padding([0, 8]) + , + horizontal_rule(12), + checkbox("Checkbox", self.checkbox_value, Message::CheckboxToggled), ) - .style(theme::Container::Custom(list_view_style)) ] .spacing(8) .padding(24) diff --git a/src/widget/list_view.rs b/src/widget/list_view.rs index 55c249d0..61633f2f 100644 --- a/src/widget/list_view.rs +++ b/src/widget/list_view.rs @@ -2,13 +2,28 @@ use iced::{ Background, Color, Theme, - widget::{ - container, - }, + widget, }; -pub fn list_view_style(theme: &Theme) -> container::Appearance { - container::Appearance { +#[macro_export] +macro_rules! list_view { + ($($x:expr),+ $(,)?) => ( + $crate::iced::widget::Container::new( + $crate::iced::widget::Column::with_children( + vec![$($crate::iced::Element::from($x)),+] + ) + .spacing(12) + ) + .padding([12, 16]) + .style(theme::Container::Custom( + $crate::widget::list_view_style + )) + ); +} +pub use list_view; + +pub fn list_view_style(theme: &Theme) -> widget::container::Appearance { + widget::container::Appearance { text_color: None, background: Some(Background::Color( match theme { diff --git a/src/widget/mod.rs b/src/widget/mod.rs index 971d2dc1..fb3089b0 100644 --- a/src/widget/mod.rs +++ b/src/widget/mod.rs @@ -16,7 +16,7 @@ mod icon; pub use self::icon::icon; mod list_view; -pub use list_view::list_view_style; +pub use list_view::{list_view, list_view_style}; mod nav_bar; pub use nav_bar::{nav_bar, nav_bar_style};