summaryrefslogtreecommitdiffstats
path: root/native/src/window/action.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-08-18 14:39:15 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-08-18 14:39:15 +0200
commit11f5527d7645619f49b030e30485f24ac637efbd (patch)
tree489f7cfbb134b8736290f30010fe680a31c90423 /native/src/window/action.rs
parent277b848ad8df1e8d038e33707548a45d63a601db (diff)
downloadiced-11f5527d7645619f49b030e30485f24ac637efbd.tar.gz
iced-11f5527d7645619f49b030e30485f24ac637efbd.tar.bz2
iced-11f5527d7645619f49b030e30485f24ac637efbd.zip
Implement `SetMode` and `FetchMode` window actions
Diffstat (limited to 'native/src/window/action.rs')
-rw-r--r--native/src/window/action.rs47
1 files changed, 45 insertions, 2 deletions
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<T> {
/// 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<dyn FnOnce(Mode) -> T + 'static>),
+}
+
+impl<T> Action<T> {
+ /// Maps the output of a window [`Action`] using the provided closure.
+ pub fn map<A>(
+ self,
+ f: impl Fn(T) -> A + 'static + MaybeSend + Sync,
+ ) -> Action<A>
+ 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<T> fmt::Debug for Action<T> {
+ 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"),
+ }
+ }
}