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 window = event_loop .create_window(WindowAttributes::default().with_maximized(true)) .unwrap(); let renderer = Renderer::new(unsafe { std::mem::transmute(&window) }); self.window = Some((window, renderer)) } fn window_event( &mut self, event_loop: &ActiveEventLoop, window_id: WindowId, event: WindowEvent, ) { if let Some((win, ren)) = &self.window { match event { WindowEvent::RedrawRequested => {} _ => (), } } } } impl Drop for WindowState { fn drop(&mut self) { if let Some((win, ren)) = self.window.take() { drop(ren); drop(win); } } }