diff options
author | 2022-10-06 20:38:21 +0200 | |
---|---|---|
committer | 2022-10-11 21:39:53 +0200 | |
commit | 7ea7dbef578ddbe2a9a50da6aab253ba016f1362 (patch) | |
tree | 9d74af6e938a01b99d710f8ec780dadd358ba97b | |
parent | 77c838011fe6f8f567389d5994584a1a1b8420c5 (diff) | |
download | iced-7ea7dbef578ddbe2a9a50da6aab253ba016f1362.tar.gz iced-7ea7dbef578ddbe2a9a50da6aab253ba016f1362.tar.bz2 iced-7ea7dbef578ddbe2a9a50da6aab253ba016f1362.zip |
feat: Add window drag support from winit
Exposes access to the winit window's window_drag method as an action.
-rw-r--r-- | native/src/window/action.rs | 8 | ||||
-rw-r--r-- | winit/src/application.rs | 3 | ||||
-rw-r--r-- | winit/src/window.rs | 5 |
3 files changed, 16 insertions, 0 deletions
diff --git a/native/src/window/action.rs b/native/src/window/action.rs index 73338e22..ce125144 100644 --- a/native/src/window/action.rs +++ b/native/src/window/action.rs @@ -5,6 +5,12 @@ use std::fmt; /// An operation to be performed on some window. pub enum Action<T> { + /// Moves the window with the left mouse button until the button is + /// released. + /// + /// There’s no guarantee that this will work unless the left mouse + /// button was pressed immediately before this function is called. + Drag, /// Resize the window. Resize { /// The new logical width of the window @@ -37,6 +43,7 @@ impl<T> Action<T> { T: 'static, { match self { + Self::Drag => Action::Drag, Self::Resize { width, height } => Action::Resize { width, height }, Self::Move { x, y } => Action::Move { x, y }, Self::SetMode(mode) => Action::SetMode(mode), @@ -48,6 +55,7 @@ impl<T> Action<T> { impl<T> fmt::Debug for Action<T> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { + Self::Drag => write!(f, "Action::Drag"), Self::Resize { width, height } => write!( f, "Action::Resize {{ widget: {}, height: {} }}", diff --git a/winit/src/application.rs b/winit/src/application.rs index 0496aea9..75c113bf 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -615,6 +615,9 @@ pub fn run_command<A, E>( } }, command::Action::Window(action) => match action { + window::Action::Drag => { + let _res = window.drag_window(); + } window::Action::Resize { width, height } => { window.set_inner_size(winit::dpi::LogicalSize { width, diff --git a/winit/src/window.rs b/winit/src/window.rs index 265139f7..61c9c3fe 100644 --- a/winit/src/window.rs +++ b/winit/src/window.rs @@ -4,6 +4,11 @@ use iced_native::window; pub use window::{Event, Mode}; +/// Begins dragging the window while the left mouse button is held. +pub fn drag<Message>() -> Command<Message> { + Command::single(command::Action::Window(window::Action::Drag)) +} + /// Resizes the window to the given logical dimensions. pub fn resize<Message>(width: u32, height: u32) -> Command<Message> { Command::single(command::Action::Window(window::Action::Resize { |