summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--runtime/src/window.rs10
-rw-r--r--winit/src/program.rs9
-rw-r--r--winit/src/program/window_manager.rs4
3 files changed, 22 insertions, 1 deletions
diff --git a/runtime/src/window.rs b/runtime/src/window.rs
index cd27cdfe..ce6fd1b6 100644
--- a/runtime/src/window.rs
+++ b/runtime/src/window.rs
@@ -63,6 +63,9 @@ pub enum Action {
/// Get the current logical coordinates of the window.
GetPosition(Id, oneshot::Sender<Option<Point>>),
+ /// Get the current scale factor (DPI) of the window.
+ GetScaleFactor(Id, oneshot::Sender<f32>),
+
/// Move the window to the given logical coordinates.
///
/// Unsupported on Wayland.
@@ -292,6 +295,13 @@ pub fn get_position(id: Id) -> Task<Option<Point>> {
})
}
+/// Gets the scale factor of the window with the given [`Id`].
+pub fn get_scale_factor(id: Id) -> Task<f32> {
+ task::oneshot(move |channel| {
+ crate::Action::Window(Action::GetScaleFactor(id, channel))
+ })
+}
+
/// Moves the window to the given logical coordinates.
pub fn move_to<T>(id: Id, position: Point) -> Task<T> {
task::effect(crate::Action::Window(Action::Move(id, position)))
diff --git a/winit/src/program.rs b/winit/src/program.rs
index c5c3133d..54221c68 100644
--- a/winit/src/program.rs
+++ b/winit/src/program.rs
@@ -1291,7 +1291,7 @@ fn run_action<P, C>(
}
}
window::Action::GetPosition(id, channel) => {
- if let Some(window) = window_manager.get_mut(id) {
+ if let Some(window) = window_manager.get(id) {
let position = window
.raw
.inner_position()
@@ -1306,6 +1306,13 @@ fn run_action<P, C>(
let _ = channel.send(position);
}
}
+ window::Action::GetScaleFactor(id, channel) => {
+ if let Some(window) = window_manager.get_mut(id) {
+ let scale_factor = window.raw.scale_factor();
+
+ let _ = channel.send(scale_factor as f32);
+ }
+ }
window::Action::Move(id, position) => {
if let Some(window) = window_manager.get_mut(id) {
window.raw.set_outer_position(
diff --git a/winit/src/program/window_manager.rs b/winit/src/program/window_manager.rs
index fcbf79f6..8cd9fab7 100644
--- a/winit/src/program/window_manager.rs
+++ b/winit/src/program/window_manager.rs
@@ -80,6 +80,10 @@ where
self.entries.iter_mut().map(|(k, v)| (*k, v))
}
+ pub fn get(&self, id: Id) -> Option<&Window<P, C>> {
+ self.entries.get(&id)
+ }
+
pub fn get_mut(&mut self, id: Id) -> Option<&mut Window<P, C>> {
self.entries.get_mut(&id)
}