diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-19 11:28:12 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-19 11:28:12 +0100 |
commit | d39a7d62e7bdc63b2055ad93bf511cdd1e40e69d (patch) | |
tree | cf592eda16699b9d1022df3dacae563021d25324 /client/src/window.rs | |
parent | 6e49570fcf657009179b9a1b462a8ca30e824bce (diff) | |
download | twclient-d39a7d62e7bdc63b2055ad93bf511cdd1e40e69d.tar twclient-d39a7d62e7bdc63b2055ad93bf511cdd1e40e69d.tar.bz2 twclient-d39a7d62e7bdc63b2055ad93bf511cdd1e40e69d.tar.zst |
a
Diffstat (limited to 'client/src/window.rs')
-rw-r--r-- | client/src/window.rs | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/client/src/window.rs b/client/src/window.rs index f003574..d0296e7 100644 --- a/client/src/window.rs +++ b/client/src/window.rs @@ -1,3 +1,4 @@ +use crate::renderer::Renderer; use winit::{ application::ApplicationHandler, event::WindowEvent, @@ -6,7 +7,7 @@ use winit::{ }; pub struct WindowState { - window: Option<Window>, + window: Option<(Window, Renderer<'static>)>, } impl WindowState { @@ -16,11 +17,11 @@ impl WindowState { } impl ApplicationHandler for WindowState { fn resumed(&mut self, event_loop: &ActiveEventLoop) { - self.window = Some( - event_loop - .create_window(WindowAttributes::default().with_maximized(true)) - .unwrap(), - ) + 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( @@ -29,7 +30,7 @@ impl ApplicationHandler for WindowState { window_id: WindowId, event: WindowEvent, ) { - if let Some(win) = &self.window { + if let Some((win, ren)) = &self.window { match event { WindowEvent::RedrawRequested => {} _ => (), @@ -37,3 +38,12 @@ impl ApplicationHandler for WindowState { } } } + +impl Drop for WindowState { + fn drop(&mut self) { + if let Some((win, ren)) = self.window.take() { + drop(ren); + drop(win); + } + } +} |