diff options
Diffstat (limited to 'winit/src')
-rw-r--r-- | winit/src/application.rs | 17 | ||||
-rw-r--r-- | winit/src/multi_window.rs | 21 |
2 files changed, 36 insertions, 2 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs index 1fd51d82..05a4f070 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -10,7 +10,7 @@ use crate::core::renderer; use crate::core::time::Instant; use crate::core::widget::operation; use crate::core::window; -use crate::core::{Event, Size}; +use crate::core::{Event, Point, Size}; use crate::futures::futures; use crate::futures::{Executor, Runtime, Subscription}; use crate::graphics::compositor::{self, Compositor}; @@ -767,6 +767,21 @@ pub fn run_command<A, C, E>( window::Action::Minimize(_id, minimized) => { window.set_minimized(minimized); } + window::Action::FetchPosition(_id, callback) => { + let position = window + .inner_position() + .map(|position| { + let position = position + .to_logical::<f32>(window.scale_factor()); + + Point::new(position.x, position.y) + }) + .ok(); + + proxy + .send_event(callback(position)) + .expect("Send message to event loop"); + } window::Action::Move(_id, position) => { window.set_outer_position(winit::dpi::LogicalPosition { x: position.x, diff --git a/winit/src/multi_window.rs b/winit/src/multi_window.rs index c63dd433..03066d6c 100644 --- a/winit/src/multi_window.rs +++ b/winit/src/multi_window.rs @@ -10,7 +10,7 @@ use crate::core::mouse; use crate::core::renderer; use crate::core::widget::operation; use crate::core::window; -use crate::core::Size; +use crate::core::{Point, Size}; use crate::futures::futures::channel::mpsc; use crate::futures::futures::{task, Future, StreamExt}; use crate::futures::{Executor, Runtime, Subscription}; @@ -993,6 +993,25 @@ fn run_command<A, C, E>( window.raw.set_minimized(minimized); } } + window::Action::FetchPosition(id, callback) => { + if let Some(window) = window_manager.get_mut(id) { + let position = window + .raw + .inner_position() + .map(|position| { + let position = position.to_logical::<f32>( + window.raw.scale_factor(), + ); + + Point::new(position.x, position.y) + }) + .ok(); + + proxy + .send_event(callback(position)) + .expect("Send message to event loop"); + } + } window::Action::Move(id, position) => { if let Some(window) = window_manager.get_mut(id) { window.raw.set_outer_position( |