summaryrefslogtreecommitdiff
path: root/src/window.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/window.rs')
-rw-r--r--src/window.rs22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/window.rs b/src/window.rs
index 72ae143..af60ef8 100644
--- a/src/window.rs
+++ b/src/window.rs
@@ -15,6 +15,7 @@ pub struct Window {
#[allow(dead_code)] context: softbuffer::Context,
render_request: RenderRequest,
previous_cursor_position: Option<Point>,
+ previous_cursor_icon: CursorIcon,
}
impl Window {
@@ -55,6 +56,7 @@ impl Window {
context,
render_request: RenderRequest::REDRAW,
previous_cursor_position: None,
+ previous_cursor_icon: CursorIcon::Default,
}
}
@@ -68,7 +70,10 @@ impl Window {
pub fn update_cursor_icon(&mut self) {
let icon = self.controller.cursor_icon().unwrap_or(CursorIcon::Default);
- self.window.set_cursor_icon(icon);
+ if icon != self.previous_cursor_icon {
+ self.window.set_cursor_icon(icon);
+ self.previous_cursor_icon = icon;
+ }
}
/// This method only requests that the window size be changed; it does not
@@ -92,17 +97,20 @@ impl Window {
self.render_request = RenderRequest::REDRAW;
self.resize_buffer_and_surface(dimensions * pixel_scale);
} else {
+ // Prevent the window properties from being modified every frame
+ // and interrupting the actions of the window manager.
+ if pixel_scale == self.pixel_scale {
+ return;
+ }
self.window.set_resizable(true);
let size = self.controller.minimum_size().map(|d| dim_to_size(d * pixel_scale));
self.window.set_min_inner_size(size);
let size = self.controller.maximum_size().map(|d| dim_to_size(d * pixel_scale));
self.window.set_max_inner_size(size);
- if pixel_scale != self.pixel_scale {
- let increment = PhysicalSize { width: pixel_scale, height: pixel_scale };
- self.window.set_resize_increments(Some(increment));
- self.render_request = RenderRequest::REDRAW;
- self.resize_buffer_and_surface(self.surface_dimensions);
- }
+ let increment = PhysicalSize { width: pixel_scale, height: pixel_scale };
+ self.window.set_resize_increments(Some(increment));
+ self.render_request = RenderRequest::REDRAW;
+ self.resize_buffer_and_surface(self.surface_dimensions);
}
}