summaryrefslogtreecommitdiff
path: root/client/src/window.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-04 23:32:43 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-04 23:32:43 +0100
commit72c23eb57070ab859ffde4f989aa85f7f2eedcf8 (patch)
tree963a0b346d8ddb8baa8cacdec31784b3f442eadc /client/src/window.rs
parent2707f03617478e2a5e521961c46c9c6511d5088d (diff)
downloadweareserver-72c23eb57070ab859ffde4f989aa85f7f2eedcf8.tar
weareserver-72c23eb57070ab859ffde4f989aa85f7f2eedcf8.tar.bz2
weareserver-72c23eb57070ab859ffde4f989aa85f7f2eedcf8.tar.zst
tri
Diffstat (limited to 'client/src/window.rs')
-rw-r--r--client/src/window.rs45
1 files changed, 45 insertions, 0 deletions
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();
+ }
+ _ => (),
+ }
+ }
+ }
+}