diff options
author | Ben Bridle <bridle.benjamin@gmail.com> | 2023-12-19 21:10:42 +1300 |
---|---|---|
committer | Ben Bridle <bridle.benjamin@gmail.com> | 2023-12-19 21:17:35 +1300 |
commit | 11c29a04f33c5611de6ec79c2e8452bece1bb952 (patch) | |
tree | c4704354b18b6188e779ee487829fe2fff31acd3 /src | |
parent | 68017c61c1ec1d0657f2e22f0d4044a955b84ccc (diff) | |
download | phosphor-11c29a04f33c5611de6ec79c2e8452bece1bb952.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/window.rs | 19 |
1 files changed, 9 insertions, 10 deletions
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(); } } |