fix cursor grab issue (#7010)
# Objective - Set the cursor grab mode after the window is built, fix #7007, clean some conversion code. ## Solution - Set the cursor grab mode after the window is built.
This commit is contained in:
		
							parent
							
								
									717def2ccf
								
							
						
					
					
						commit
						9ff111e24c
					
				| @ -5,7 +5,7 @@ use bevy_input::{ | |||||||
|     ButtonState, |     ButtonState, | ||||||
| }; | }; | ||||||
| use bevy_math::Vec2; | use bevy_math::Vec2; | ||||||
| use bevy_window::{CursorGrabMode, CursorIcon}; | use bevy_window::CursorIcon; | ||||||
| 
 | 
 | ||||||
| pub fn convert_keyboard_input(keyboard_input: &winit::event::KeyboardInput) -> KeyboardInput { | pub fn convert_keyboard_input(keyboard_input: &winit::event::KeyboardInput) -> KeyboardInput { | ||||||
|     KeyboardInput { |     KeyboardInput { | ||||||
| @ -266,12 +266,3 @@ pub fn convert_cursor_icon(cursor_icon: CursorIcon) -> winit::window::CursorIcon | |||||||
|         CursorIcon::RowResize => winit::window::CursorIcon::RowResize, |         CursorIcon::RowResize => winit::window::CursorIcon::RowResize, | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 |  | ||||||
| /// Map [`bevy_window::CursorGrabMode`] to [`winit::window::CursorGrabMode`].
 |  | ||||||
| pub fn convert_cursor_grab_mode(mode: CursorGrabMode) -> winit::window::CursorGrabMode { |  | ||||||
|     match mode { |  | ||||||
|         CursorGrabMode::None => winit::window::CursorGrabMode::None, |  | ||||||
|         CursorGrabMode::Confined => winit::window::CursorGrabMode::Confined, |  | ||||||
|         CursorGrabMode::Locked => winit::window::CursorGrabMode::Locked, |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -1,4 +1,3 @@ | |||||||
| use crate::converters::convert_cursor_grab_mode; |  | ||||||
| use bevy_math::{DVec2, IVec2}; | use bevy_math::{DVec2, IVec2}; | ||||||
| use bevy_utils::HashMap; | use bevy_utils::HashMap; | ||||||
| use bevy_window::{ | use bevy_window::{ | ||||||
| @ -165,16 +164,6 @@ impl WinitWindows { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // Do not set the grab mode on window creation if it's none, this can fail on mobile
 |  | ||||||
|         if window_descriptor.cursor_grab_mode != CursorGrabMode::None { |  | ||||||
|             match winit_window |  | ||||||
|                 .set_cursor_grab(convert_cursor_grab_mode(window_descriptor.cursor_grab_mode)) |  | ||||||
|             { |  | ||||||
|                 Ok(_) | Err(winit::error::ExternalError::NotSupported(_)) => {} |  | ||||||
|                 Err(err) => Err(err).unwrap(), |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         winit_window.set_cursor_visible(window_descriptor.cursor_visible); |         winit_window.set_cursor_visible(window_descriptor.cursor_visible); | ||||||
| 
 | 
 | ||||||
|         self.window_id_to_winit.insert(window_id, winit_window.id()); |         self.window_id_to_winit.insert(window_id, winit_window.id()); | ||||||
| @ -207,7 +196,7 @@ impl WinitWindows { | |||||||
|             display_handle: winit_window.raw_display_handle(), |             display_handle: winit_window.raw_display_handle(), | ||||||
|         }; |         }; | ||||||
|         self.windows.insert(winit_window.id(), winit_window); |         self.windows.insert(winit_window.id(), winit_window); | ||||||
|         Window::new( |         let mut window = Window::new( | ||||||
|             window_id, |             window_id, | ||||||
|             window_descriptor, |             window_descriptor, | ||||||
|             inner_size.width, |             inner_size.width, | ||||||
| @ -215,7 +204,12 @@ impl WinitWindows { | |||||||
|             scale_factor, |             scale_factor, | ||||||
|             position, |             position, | ||||||
|             Some(raw_handle), |             Some(raw_handle), | ||||||
|         ) |         ); | ||||||
|  |         // Do not set the grab mode on window creation if it's none, this can fail on mobile
 | ||||||
|  |         if window_descriptor.cursor_grab_mode != CursorGrabMode::None { | ||||||
|  |             window.set_cursor_grab_mode(window_descriptor.cursor_grab_mode); | ||||||
|  |         } | ||||||
|  |         window | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_window(&self, id: WindowId) -> Option<&winit::window::Window> { |     pub fn get_window(&self, id: WindowId) -> Option<&winit::window::Window> { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 VitalyR
						VitalyR