From 5dc3258657cd5c88742e434fde487b0a8d5184f9 Mon Sep 17 00:00:00 2001
From: Quaternions <krakow20@gmail.com>
Date: Fri, 3 Jan 2025 02:20:09 -0800
Subject: [PATCH] window: match on key and state

---
 strafe-client/src/window.rs | 85 +++++++++++++++++--------------------
 1 file changed, 39 insertions(+), 46 deletions(-)

diff --git a/strafe-client/src/window.rs b/strafe-client/src/window.rs
index 4320c67..1104c30 100644
--- a/strafe-client/src/window.rs
+++ b/strafe-client/src/window.rs
@@ -43,60 +43,53 @@ impl WindowContext<'_>{
 				event:winit::event::KeyEvent{state,logical_key,repeat:false,..},
 				..
 			}=>{
-				let s=match state{
-					winit::event::ElementState::Pressed=>true,
-					winit::event::ElementState::Released=>false,
-				};
-				match logical_key{
-					winit::keyboard::Key::Named(winit::keyboard::NamedKey::Tab)=>{
-						if s{
-							self.manual_mouse_lock=false;
-							match self.window.set_cursor_position(self.get_middle_of_screen()){
-								Ok(())=>(),
-								Err(e)=>println!("Could not set cursor position: {:?}",e),
-							}
-							match self.window.set_cursor_grab(winit::window::CursorGrabMode::None){
-								Ok(())=>(),
-								Err(e)=>println!("Could not release cursor: {:?}",e),
-							}
-						}else{
-							//if cursor is outside window don't lock but apparently there's no get pos function
-							//let pos=window.get_cursor_pos();
-							match self.window.set_cursor_grab(winit::window::CursorGrabMode::Locked){
-								Ok(())=>(),
-								Err(_)=>{
-									match self.window.set_cursor_grab(winit::window::CursorGrabMode::Confined){
-										Ok(())=>(),
-										Err(e)=>{
-											self.manual_mouse_lock=true;
-											println!("Could not confine cursor: {:?}",e)
-										},
-									}
+				match (logical_key,state){
+					(winit::keyboard::Key::Named(winit::keyboard::NamedKey::Tab),winit::event::ElementState::Pressed)=>{
+						self.manual_mouse_lock=false;
+						match self.window.set_cursor_position(self.get_middle_of_screen()){
+							Ok(())=>(),
+							Err(e)=>println!("Could not set cursor position: {:?}",e),
+						}
+						match self.window.set_cursor_grab(winit::window::CursorGrabMode::None){
+							Ok(())=>(),
+							Err(e)=>println!("Could not release cursor: {:?}",e),
+						}
+						self.window.set_cursor_visible(state.is_pressed());
+					},
+					(winit::keyboard::Key::Named(winit::keyboard::NamedKey::Tab),winit::event::ElementState::Released)=>{
+						//if cursor is outside window don't lock but apparently there's no get pos function
+						//let pos=window.get_cursor_pos();
+						match self.window.set_cursor_grab(winit::window::CursorGrabMode::Locked){
+							Ok(())=>(),
+							Err(_)=>{
+								match self.window.set_cursor_grab(winit::window::CursorGrabMode::Confined){
+									Ok(())=>(),
+									Err(e)=>{
+										self.manual_mouse_lock=true;
+										println!("Could not confine cursor: {:?}",e)
+									},
 								}
 							}
 						}
-						self.window.set_cursor_visible(s);
+						self.window.set_cursor_visible(state.is_pressed());
 					},
-					winit::keyboard::Key::Named(winit::keyboard::NamedKey::F11)=>{
-						if s{
-							if self.window.fullscreen().is_some(){
-								self.window.set_fullscreen(None);
-							}else{
-								self.window.set_fullscreen(Some(winit::window::Fullscreen::Borderless(None)));
-							}
+					(winit::keyboard::Key::Named(winit::keyboard::NamedKey::F11),winit::event::ElementState::Pressed)=>{
+						if self.window.fullscreen().is_some(){
+							self.window.set_fullscreen(None);
+						}else{
+							self.window.set_fullscreen(Some(winit::window::Fullscreen::Borderless(None)));
 						}
 					},
-					winit::keyboard::Key::Named(winit::keyboard::NamedKey::Escape)=>{
-						if s{
-							self.manual_mouse_lock=false;
-							match self.window.set_cursor_grab(winit::window::CursorGrabMode::None){
-								Ok(())=>(),
-								Err(e)=>println!("Could not release cursor: {:?}",e),
-							}
-							self.window.set_cursor_visible(true);
+					(winit::keyboard::Key::Named(winit::keyboard::NamedKey::Escape),winit::event::ElementState::Pressed)=>{
+						self.manual_mouse_lock=false;
+						match self.window.set_cursor_grab(winit::window::CursorGrabMode::None){
+							Ok(())=>(),
+							Err(e)=>println!("Could not release cursor: {:?}",e),
 						}
+						self.window.set_cursor_visible(true);
 					},
-					keycode=>{
+					(keycode,state)=>{
+						let s=state.is_pressed();
 						if let Some(input_instruction)=match keycode{
 							winit::keyboard::Key::Named(winit::keyboard::NamedKey::Space)=>Some(InputInstruction::Jump(s)),
 							winit::keyboard::Key::Character(key)=>match key.as_str(){