Skip to content

Commit

Permalink
Add get_scale_factor task to window module
Browse files Browse the repository at this point in the history
  • Loading branch information
hecrj committed Aug 30, 2024
1 parent 043f030 commit 0dcec51
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
10 changes: 10 additions & 0 deletions runtime/src/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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)))
Expand Down
9 changes: 8 additions & 1 deletion winit/src/program.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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(
Expand Down
4 changes: 4 additions & 0 deletions winit/src/program/window_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down

0 comments on commit 0dcec51

Please sign in to comment.