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(); } _ => (), } } } }