From 11f5527d7645619f49b030e30485f24ac637efbd Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 18 Aug 2022 14:39:15 +0200 Subject: Implement `SetMode` and `FetchMode` window actions --- native/src/window/action.rs | 47 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'native/src/window/action.rs') diff --git a/native/src/window/action.rs b/native/src/window/action.rs index 01294e83..d891c6ac 100644 --- a/native/src/window/action.rs +++ b/native/src/window/action.rs @@ -1,6 +1,10 @@ +use crate::window::Mode; + +use iced_futures::MaybeSend; +use std::fmt; + /// An operation to be performed on some window. -#[derive(Debug)] -pub enum Action { +pub enum Action { /// Resize the window. Resize { /// The new logical width of the window @@ -15,4 +19,43 @@ pub enum Action { /// The new logical y location of the window y: i32, }, + /// Set the [`Mode`] of the window. + SetMode(Mode), + /// Fetch the current [`Mode`] of the window. + FetchMode(Box T + 'static>), +} + +impl Action { + /// Maps the output of a window [`Action`] using the provided closure. + pub fn map( + self, + f: impl Fn(T) -> A + 'static + MaybeSend + Sync, + ) -> Action + where + T: 'static, + { + match self { + Self::Resize { width, height } => Action::Resize { width, height }, + Self::Move { x, y } => Action::Move { x, y }, + Self::SetMode(mode) => Action::SetMode(mode), + Self::FetchMode(o) => Action::FetchMode(Box::new(move |s| f(o(s)))), + } + } +} + +impl fmt::Debug for Action { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Resize { width, height } => write!( + f, + "Action::Resize {{ widget: {}, height: {} }}", + width, height + ), + Self::Move { x, y } => { + write!(f, "Action::Move {{ x: {}, y: {} }}", x, y) + } + Self::SetMode(mode) => write!(f, "Action::SetMode({:?})", mode), + Self::FetchMode(_) => write!(f, "Action::FetchMode"), + } + } } -- cgit