From 80dd8dd9a456d13086e4601256af4db5b62aaabf Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Mon, 6 May 2024 14:23:28 +0200 Subject: [PATCH] Make `Viewer` optional This is preparation for making `Window` optional too, which I need to do to avoid using a deprecated method. --- crates/fj-window/src/display.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/fj-window/src/display.rs b/crates/fj-window/src/display.rs index 480d3eba8..9134cf15d 100644 --- a/crates/fj-window/src/display.rs +++ b/crates/fj-window/src/display.rs @@ -22,13 +22,12 @@ use crate::window::{self, Window}; pub fn display(model: Model, invert_zoom: bool) -> Result<(), Error> { let event_loop = EventLoop::new()?; let window = Window::new(&event_loop)?; - let viewer = block_on(Viewer::new(&window))?; let mut display_state = DisplayState { model: Some(model), invert_zoom, window, - viewer, + viewer: None, held_mouse_button: None, new_size: None, stop_drawing: false, @@ -59,7 +58,7 @@ struct DisplayState { model: Option, invert_zoom: bool, window: Window, - viewer: Viewer, + viewer: Option, held_mouse_button: Option, new_size: Option, stop_drawing: bool, @@ -67,8 +66,12 @@ struct DisplayState { impl ApplicationHandler for DisplayState { fn resumed(&mut self, _: &ActiveEventLoop) { + let viewer = self.viewer.get_or_insert_with(|| { + block_on(Viewer::new(&self.window)).unwrap() + }); + if let Some(model) = self.model.take() { - self.viewer.handle_model_update(model); + viewer.handle_model_update(model); } } @@ -78,7 +81,9 @@ impl ApplicationHandler for DisplayState { _: WindowId, event: WindowEvent, ) { - let viewer = &mut self.viewer; + let Some(viewer) = &mut self.viewer else { + return; + }; let input_event = input_event( &event,