diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/window.rs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/window.rs b/src/window.rs index c33f5aa..72ae143 100644 --- a/src/window.rs +++ b/src/window.rs @@ -13,7 +13,7 @@ pub struct Window { surface: softbuffer::Surface, surface_dimensions: Dimensions, #[allow(dead_code)] context: softbuffer::Context, - current_render_hint: RenderHint, + render_request: RenderRequest, previous_cursor_position: Option<Point>, } @@ -53,7 +53,7 @@ impl Window { surface, surface_dimensions: Dimensions::ZERO, context, - current_render_hint: RenderHint::Redraw, + render_request: RenderRequest::REDRAW, previous_cursor_position: None, } } @@ -89,7 +89,7 @@ impl Window { self.window.set_min_inner_size(Some(size)); self.window.set_max_inner_size(Some(size)); self.window.set_inner_size(size); - self.current_render_hint = RenderHint::Redraw; + self.render_request = RenderRequest::REDRAW; self.resize_buffer_and_surface(dimensions * pixel_scale); } else { self.window.set_resizable(true); @@ -100,7 +100,7 @@ impl Window { if pixel_scale != self.pixel_scale { let increment = PhysicalSize { width: pixel_scale, height: pixel_scale }; self.window.set_resize_increments(Some(increment)); - self.current_render_hint = RenderHint::Redraw; + self.render_request = RenderRequest::REDRAW; self.resize_buffer_and_surface(self.surface_dimensions); } } @@ -121,7 +121,7 @@ impl Window { if logical_dimensions != self.buffer.dimensions() { self.buffer.resize(logical_dimensions); self.controller.on_resize(logical_dimensions); - self.current_render_hint = RenderHint::Redraw; + self.render_request = RenderRequest::REDRAW; } } @@ -139,9 +139,9 @@ impl Window { pub fn handle_render_request(&mut self) { if let RenderRequest::Render(hint) = self.controller.render_request() { - self.current_render_hint &= hint; + self.render_request &= RenderRequest::Render(hint); self.window.request_redraw(); - } else if self.current_render_hint.is_redraw() { + } else if let RenderRequest::Render(_) = self.render_request { self.window.request_redraw(); } } @@ -157,7 +157,15 @@ impl Window { let scale = self.pixel_scale as usize; let physical_dim = self.surface_dimensions; let logical_dim = self.buffer.dimensions(); - self.controller.on_render(&mut self.buffer, self.current_render_hint); + + // Return early if this render wasn't requested by us. Unrequested + // renders have been observed under Windows 10. + if let RenderRequest::Render(hint) = self.render_request { + self.controller.on_render(&mut self.buffer, hint); + } else { + return; + } + let buffer = self.buffer.as_u32_slice(); let mut surface = self.surface.buffer_mut().unwrap(); @@ -199,8 +207,8 @@ impl Window { } surface.present().unwrap(); - // Reset current_render_hint back to the lowest variant for the next frame. - self.current_render_hint = RenderHint::Update; + // Reset render_request back to the lowest variant for the next frame. + self.render_request = RenderRequest::None; } } |