diff options
Diffstat (limited to 'client/src/window.rs')
-rw-r--r-- | client/src/window.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/client/src/window.rs b/client/src/window.rs new file mode 100644 index 0000000..20300d5 --- /dev/null +++ b/client/src/window.rs @@ -0,0 +1,45 @@ +use crate::renderer::Renderer; +use winit::{ + application::ApplicationHandler, + event::WindowEvent, + event_loop::ActiveEventLoop, + window::{Window, WindowAttributes, WindowId}, +}; + +pub struct WindowState { + window: Option<(Window, Renderer<'static>)>, +} +impl WindowState { + pub fn new() -> Self { + Self { window: None } + } +} +impl ApplicationHandler for WindowState { + fn resumed(&mut self, event_loop: &ActiveEventLoop) { + let win = event_loop + .create_window(WindowAttributes::default().with_maximized(true)) + .unwrap(); + let ren = Renderer::new(unsafe { std::mem::transmute::<&Window, &'static Window>(&win) }) + .unwrap(); + self.window = Some((win, ren)) + } + fn window_event( + &mut self, + event_loop: &ActiveEventLoop, + _window_id: WindowId, + event: WindowEvent, + ) { + if let Some((_win, ren)) = &mut self.window { + match event { + WindowEvent::Resized(size) => { + ren.resize(size.width, size.height); + } + WindowEvent::RedrawRequested => ren.draw().unwrap(), + WindowEvent::CloseRequested => { + event_loop.exit(); + } + _ => (), + } + } + } +} |