summaryrefslogtreecommitdiffstats
path: root/winit/src
diff options
context:
space:
mode:
Diffstat (limited to 'winit/src')
-rw-r--r--winit/src/application.rs17
-rw-r--r--winit/src/multi_window.rs21
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(