From 72c23eb57070ab859ffde4f989aa85f7f2eedcf8 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 4 Jan 2025 23:32:43 +0100 Subject: tri --- client/src/window.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 client/src/window.rs (limited to 'client/src/window.rs') 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(); + } + _ => (), + } + } + } +} -- cgit v1.2.3-70-g09d2