From 11c29a04f33c5611de6ec79c2e8452bece1bb952 Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Tue, 19 Dec 2023 21:10:42 +1300 Subject: Redraw the window when the logical dimensions change Previously the window would only be redrawn when the physical dimensions changed, which meant that the effects of a pixel scale change would not be visible until the application requested a re-render. --- src/window.rs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/window.rs b/src/window.rs index b01795e..a7932de 100644 --- a/src/window.rs +++ b/src/window.rs @@ -109,20 +109,17 @@ impl Window { /// Resize the frame buffer and screen surface to the new size of the window. pub fn resize_buffer_and_surface(&mut self, physical_dimensions: Dimensions) { - if self.surface_dimensions == physical_dimensions { - return; - } if let Some((width, height)) = dim_to_nonzero_size(physical_dimensions) { self.surface.resize(width, height).unwrap(); self.surface_dimensions = physical_dimensions; }; - let pixel_scale = self.controller.pixel_scale().get(); - let logical_dimensions = physical_dimensions / pixel_scale; - self.buffer.resize(logical_dimensions); - self.controller.on_resize(logical_dimensions); - - self.pixel_scale = pixel_scale; - self.current_render_hint = RenderHint::Redraw; + self.pixel_scale = self.controller.pixel_scale().get(); + let logical_dimensions = physical_dimensions / self.pixel_scale; + if logical_dimensions != self.buffer.dimensions() { + self.buffer.resize(logical_dimensions); + self.controller.on_resize(logical_dimensions); + self.current_render_hint = RenderHint::Redraw; + } } pub fn move_cursor(&mut self, position: Point) { @@ -141,6 +138,8 @@ impl Window { if let RenderRequest::Render(hint) = self.controller.render_request() { self.current_render_hint &= hint; self.window.request_redraw(); + } else if self.current_render_hint.is_redraw() { + self.window.request_redraw(); } } -- cgit v1.2.3-70-g09d2