aboutsummaryrefslogtreecommitdiff
path: root/client/src/window.rs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/window.rs')
-rw-r--r--client/src/window.rs24
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);
+ }
+ }
+}