mirror of
https://github.com/rust-windowing/winit.git
synced 2026-06-27 07:03:15 -04:00
@@ -90,6 +90,7 @@ pub struct CursorManager {
|
||||
locked_pointers: Vec<ZwpLockedPointerV1>,
|
||||
cursor_visible: bool,
|
||||
current_cursor: CursorIcon,
|
||||
scale_factor: u32,
|
||||
}
|
||||
|
||||
impl CursorManager {
|
||||
@@ -101,6 +102,7 @@ impl CursorManager {
|
||||
locked_pointers: Vec::new(),
|
||||
cursor_visible: true,
|
||||
current_cursor: CursorIcon::default(),
|
||||
scale_factor: 1,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,6 +147,11 @@ impl CursorManager {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update_scale_factor(&mut self, scale: u32) {
|
||||
self.scale_factor = scale;
|
||||
self.reload_cursor_style();
|
||||
}
|
||||
|
||||
fn set_cursor_icon_impl(&mut self, cursor: CursorIcon) {
|
||||
let cursor = match cursor {
|
||||
CursorIcon::Alias => "link",
|
||||
@@ -193,7 +200,7 @@ impl CursorManager {
|
||||
for pointer in self.pointers.iter() {
|
||||
// Ignore erros, since we don't want to fail hard in case we can't find a proper cursor
|
||||
// in a given theme.
|
||||
let _ = pointer.set_cursor(cursor, None);
|
||||
let _ = pointer.set_cursor_with_scale(cursor, self.scale_factor, None);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -728,6 +735,13 @@ impl<T> EventLoop<T> {
|
||||
}
|
||||
|
||||
if let Some(dpi) = window.new_dpi {
|
||||
// Update cursor scale factor
|
||||
{
|
||||
self.cursor_manager
|
||||
.lock()
|
||||
.unwrap()
|
||||
.update_scale_factor(dpi as u32);
|
||||
};
|
||||
let dpi = dpi as f64;
|
||||
let logical_size = LogicalSize::<f64>::from(*window.size);
|
||||
let mut new_inner_size = logical_size.to_physical(dpi);
|
||||
@@ -742,6 +756,8 @@ impl<T> EventLoop<T> {
|
||||
|
||||
let (w, h) = new_inner_size.to_logical::<u32>(dpi).into();
|
||||
frame.resize(w, h);
|
||||
// Refresh frame to rescale decorations
|
||||
frame.refresh();
|
||||
*window.size = (w, h);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user