diff --git a/examples/cosmic/src/main.rs b/examples/cosmic/src/main.rs index 6583536..21d5743 100644 --- a/examples/cosmic/src/main.rs +++ b/examples/cosmic/src/main.rs @@ -25,7 +25,7 @@ use cosmic::{ text }, iced_lazy::responsive, - iced_winit::window::drag, + iced_winit::window::{drag, maximize}, scrollable }; @@ -58,7 +58,7 @@ impl Window { self.sidebar_toggled = toggled; self } - + pub fn show_maximize(mut self, show: bool) -> Self { self.show_maximize = show; self @@ -84,7 +84,7 @@ enum Message { Close, ToggleSidebar(bool), Drag, - Minimize, + Minimize, Maximize, } @@ -122,7 +122,7 @@ impl Application for Window { Message::ToggleSidebar(toggled) => self.sidebar_toggled = toggled, Message::Drag => return drag(), Message::Minimize => {}, - Message::Maximize => {}, + Message::Maximize => return maximize(), } iced::Command::none() @@ -135,8 +135,9 @@ impl Application for Window { self.show_minimize, self.show_maximize, |toggled| Message::ToggleSidebar(toggled), - || Message::Close, - || Message::Drag + || Message::Close, + || Message::Drag, + || Message::Maximize, ).into(); if self.debug { diff --git a/src/widget/header_bar.rs b/src/widget/header_bar.rs index 964891f..386b1b9 100644 --- a/src/widget/header_bar.rs +++ b/src/widget/header_bar.rs @@ -1,9 +1,8 @@ use apply::Apply; -use iced::{self, Element, Length, widget, alignment::Vertical, theme, Renderer}; +use iced::{self, alignment::Vertical, theme, widget, Element, Length, Renderer}; use iced_lazy::Component; -pub struct HeaderBar -{ +pub struct HeaderBar { title: String, nav_title: String, sidebar_active: bool, @@ -12,6 +11,7 @@ pub struct HeaderBar on_sidebar_active: Box Message>, on_close: Box Message>, on_drag: Box Message>, + on_maximize: Box Message>, } pub fn header_bar( @@ -22,15 +22,17 @@ pub fn header_bar( on_sidebar_active: impl Fn(bool) -> Message + 'static, on_close: impl Fn() -> Message + 'static, on_drag: impl Fn() -> Message + 'static, + on_maximize: impl Fn() -> Message + 'static, ) -> HeaderBar { HeaderBar::new( - title, - toggled, + title, + toggled, show_minimize, show_maximize, - on_sidebar_active, - on_close, - on_drag + on_sidebar_active, + on_close, + on_drag, + on_maximize, ) } @@ -39,8 +41,8 @@ pub enum HeaderEvent { Close, ToggleSidebar, Drag, - Minimize, - Maximize + Minimize, + Maximize, } impl HeaderBar { @@ -52,6 +54,7 @@ impl HeaderBar { on_sidebar_active: impl Fn(bool) -> Message + 'static, on_close: impl Fn() -> Message + 'static, on_drag: impl Fn() -> Message + 'static, + on_maximize: impl Fn() -> Message + 'static, ) -> Self { Self { title: String::from(title), @@ -62,6 +65,7 @@ impl HeaderBar { on_sidebar_active: Box::new(on_sidebar_active), on_close: Box::new(on_close), on_drag: Box::new(on_drag), + on_maximize: Box::new(on_maximize), } } @@ -91,31 +95,28 @@ impl HeaderBar { } } -impl Component for HeaderBar -{ +impl Component for HeaderBar { type State = (); type Event = HeaderEvent; - fn update( - &mut self, - _state: &mut Self::State, - event: Self::Event, - ) -> Option { + fn update(&mut self, _state: &mut Self::State, event: Self::Event) -> Option { match event { HeaderEvent::Close => Some((self.on_close)()), HeaderEvent::ToggleSidebar => { self.sidebar_active = !self.sidebar_active; Some((self.on_sidebar_active)(self.sidebar_active)) - }, + } HeaderEvent::Drag => Some((self.on_drag)()), - HeaderEvent::Minimize => None, - HeaderEvent::Maximize => None, + // HeaderEvent::Minimize => { + // Some((self.on_minimize())) + // }, + HeaderEvent::Maximize => Some((self.on_maximize)()), + _ => None, } } - fn view(&self, _state: &Self::State) -> Element - { + fn view(&self, _state: &Self::State) -> Element { let nav_button = { let text = widget::text(&self.nav_title) .vertical_alignment(Vertical::Center) @@ -151,7 +152,7 @@ impl Component for HeaderBar .width(Length::Fill) .height(Length::Fill) .into(); - + let window_controls = { let mut widgets: Vec> = Vec::with_capacity(3); @@ -163,20 +164,14 @@ impl Component for HeaderBar }; if self.show_minimize { - widgets.push( - icon("window-minimize-symbolic", 16, HeaderEvent::Minimize).into() - ); + widgets.push(icon("window-minimize-symbolic", 16, HeaderEvent::Minimize).into()); } if self.show_maximize { - widgets.push( - icon("window-maximize-symbolic", 16, HeaderEvent::Maximize).into() - ); + widgets.push(icon("window-maximize-symbolic", 16, HeaderEvent::Maximize).into()); } - widgets.push( - icon("window-close-symbolic", 16, HeaderEvent::Close).into() - ); + widgets.push(icon("window-close-symbolic", 16, HeaderEvent::Close).into()); widget::row(widgets) .spacing(8) @@ -192,13 +187,13 @@ impl Component for HeaderBar .apply(widget::event_container) .center_y() .on_press(HeaderEvent::Drag) + .on_release(HeaderEvent::Maximize) .into() } } -impl<'a, Message: Clone + 'a> From> for Element<'a, Message> -{ +impl<'a, Message: Clone + 'a> From> for Element<'a, Message> { fn from(header_bar: HeaderBar) -> Self { iced_lazy::component(header_bar) } -} \ No newline at end of file +}