Add get_scale_factor task to window module

This commit is contained in:
Héctor Ramón Jiménez 2024-08-30 13:02:49 +02:00
parent 043f030214
commit 0dcec519be
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
3 changed files with 22 additions and 1 deletions

View file

@ -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)))

View file

@ -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(

View file

@ -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)
}