Move more code to libcosmic

This commit is contained in:
Jeremy Soller 2022-09-30 09:51:00 -06:00
parent 5ad54bd3b1
commit bfcaf829eb
No known key found for this signature in database
GPG key ID: 87F211AF2BE4C2FE
4 changed files with 56 additions and 41 deletions

View file

@ -3,8 +3,8 @@ use cosmic::{
widget::{ widget::{
button, button,
icon, icon,
nav_bar,
list_view_style, list_view_style,
nav_bar_style,
}, },
settings, settings,
iced::{theme, Alignment, Color, Element, Length, Sandbox, Theme}, iced::{theme, Alignment, Color, Element, Length, Sandbox, Theme},
@ -67,40 +67,34 @@ impl Sandbox for Window {
} }
fn view(&self) -> Element<Message> { fn view(&self) -> Element<Message> {
let sidebar: Element<_> = container( let sidebar: Element<_> = nav_bar!(
column![ //TODO: Support symbolic icons
//TODO: Support symbolic icons button!(
button!( icon("network-wireless", 16),
icon("network-wireless", 16).width(Length::Units(16)), text("Wi-Fi"),
text("Wi-Fi"), horizontal_space(Length::Fill),
horizontal_space(Length::Fill), )
) .on_press(Message::Page(0))
.on_press(Message::Page(0)) .style(if self.page == 0 { theme::Button::Primary } else { theme::Button::Text })
.style(if self.page == 0 { theme::Button::Primary } else { theme::Button::Text }) ,
, button!(
button!( icon("preferences-desktop", 16),
icon("preferences-desktop", 16).width(Length::Units(16)), text("Desktop"),
text("Desktop"), horizontal_space(Length::Fill),
horizontal_space(Length::Fill), )
) .on_press(Message::Page(1))
.on_press(Message::Page(1)) .style(if self.page == 1 { theme::Button::Primary } else { theme::Button::Text })
.style(if self.page == 1 { theme::Button::Primary } else { theme::Button::Text }) ,
, button!(
button!( icon("system-software-update", 16),
icon("system-software-update", 16).width(Length::Units(16)), text("OS Upgrade & Recovery"),
text("OS Upgrade & Recovery"), horizontal_space(Length::Fill),
horizontal_space(Length::Fill), )
) .on_press(Message::Page(2))
.on_press(Message::Page(2)) .style(if self.page == 2 { theme::Button::Primary } else { theme::Button::Text })
.style(if self.page == 2 { theme::Button::Primary } else { theme::Button::Text }) ,
, vertical_space(Length::Fill),
vertical_space(Length::Fill),
]
.spacing(12)
.padding(12)
.max_width(300)
) )
.style(theme::Container::Custom(nav_bar_style))
.into(); .into();
let choose_theme = [Theme::Light, Theme::Dark].iter().fold( let choose_theme = [Theme::Light, Theme::Dark].iter().fold(

View file

@ -1,4 +1,7 @@
use iced::widget::svg; use iced::{
Length,
widget::svg,
};
pub fn icon(name: &str, size: u16) -> svg::Svg { pub fn icon(name: &str, size: u16) -> svg::Svg {
let handle = match freedesktop_icons::lookup(name) let handle = match freedesktop_icons::lookup(name)
@ -15,4 +18,6 @@ pub fn icon(name: &str, size: u16) -> svg::Svg {
}, },
}; };
svg::Svg::new(handle) svg::Svg::new(handle)
.width(Length::Units(size))
.height(Length::Units(size))
} }

View file

@ -19,4 +19,4 @@ mod list_view;
pub use list_view::list_view_style; pub use list_view::list_view_style;
mod nav_bar; mod nav_bar;
pub use nav_bar::nav_bar_style; pub use nav_bar::{nav_bar, nav_bar_style};

View file

@ -2,13 +2,29 @@ use iced::{
Background, Background,
Color, Color,
Theme, Theme,
widget::{ widget
container,
},
}; };
pub fn nav_bar_style(theme: &Theme) -> container::Appearance { #[macro_export]
container::Appearance { macro_rules! nav_bar {
($($x:expr),+ $(,)?) => (
$crate::iced::widget::Container::new(
$crate::iced::widget::Column::with_children(
vec![$($crate::iced::Element::from($x)),+]
)
.spacing(12)
)
.max_width(300)
.padding(12)
.style(theme::Container::Custom(
$crate::widget::nav_bar_style
))
);
}
pub use nav_bar;
pub fn nav_bar_style(theme: &Theme) -> widget::container::Appearance {
widget::container::Appearance {
text_color: None, text_color: None,
background: Some(Background::Color( background: Some(Background::Color(
match theme { match theme {