diff --git a/crates/bevy_winit/Cargo.toml b/crates/bevy_winit/Cargo.toml index 5c7014ecbfa8a..a84539caf472d 100644 --- a/crates/bevy_winit/Cargo.toml +++ b/crates/bevy_winit/Cargo.toml @@ -22,12 +22,12 @@ bevy_window = { path = "../bevy_window", version = "0.9.0-dev" } bevy_utils = { path = "../bevy_utils", version = "0.9.0-dev" } # other -winit = { version = "0.26.0", default-features = false } +winit = { version = "0.27.3", default-features = false } approx = { version = "0.5.0", default-features = false } raw-window-handle = "0.4.2" [target.'cfg(target_arch = "wasm32")'.dependencies] -winit = { version = "0.26.0", default-features = false } +winit = { version = "0.27.3", default-features = false } wasm-bindgen = { version = "0.2" } web-sys = "0.3" crossbeam-channel = "0.5" diff --git a/crates/bevy_winit/src/lib.rs b/crates/bevy_winit/src/lib.rs index 66804c5a426b4..bbc21fa1906a5 100644 --- a/crates/bevy_winit/src/lib.rs +++ b/crates/bevy_winit/src/lib.rs @@ -34,6 +34,7 @@ use winit::{ dpi::{LogicalPosition, LogicalSize, PhysicalPosition}, event::{self, DeviceEvent, Event, StartCause, WindowEvent}, event_loop::{ControlFlow, EventLoop, EventLoopWindowTarget}, + window::CursorGrabMode, }; #[derive(Default)] @@ -138,10 +139,17 @@ fn change_window( window.set_cursor_icon(converters::convert_cursor_icon(icon)); } bevy_window::WindowCommand::SetCursorLockMode { locked } => { - let window = winit_windows.get_window(id).unwrap(); - window - .set_cursor_grab(locked) - .unwrap_or_else(|e| error!("Unable to un/grab cursor: {}", e)); + if locked { + let window = winit_windows.get_window(id).unwrap(); + window + .set_cursor_grab(CursorGrabMode::Confined) + .unwrap_or_else(|e| error!("Unable to grab cursor: {}", e)); + } else { + let window = winit_windows.get_window(id).unwrap(); + window + .set_cursor_grab(CursorGrabMode::None) + .unwrap_or_else(|e| error!("Unable to ungrab cursor: {}", e)); + } } bevy_window::WindowCommand::SetCursorVisibility { visible } => { let window = winit_windows.get_window(id).unwrap(); diff --git a/crates/bevy_winit/src/winit_windows.rs b/crates/bevy_winit/src/winit_windows.rs index 4467574874c61..ef9e471bdeb99 100644 --- a/crates/bevy_winit/src/winit_windows.rs +++ b/crates/bevy_winit/src/winit_windows.rs @@ -4,7 +4,7 @@ use bevy_window::{MonitorSelection, Window, WindowDescriptor, WindowId, WindowMo use raw_window_handle::HasRawWindowHandle; use winit::{ dpi::{LogicalPosition, LogicalSize, PhysicalPosition, PhysicalSize}, - window::Fullscreen, + window::{CursorGrabMode, Fullscreen}, }; #[derive(Debug, Default)] @@ -159,7 +159,7 @@ impl WinitWindows { } if window_descriptor.cursor_locked { - match winit_window.set_cursor_grab(true) { + match winit_window.set_cursor_grab(CursorGrabMode::Locked) { Ok(_) | Err(winit::error::ExternalError::NotSupported(_)) => {} Err(err) => Err(err).unwrap(), } @@ -241,7 +241,9 @@ pub fn get_fitting_videomode( match abs_diff(a.size().width, width).cmp(&abs_diff(b.size().width, width)) { Equal => { match abs_diff(a.size().height, height).cmp(&abs_diff(b.size().height, height)) { - Equal => b.refresh_rate().cmp(&a.refresh_rate()), + Equal => b + .refresh_rate_millihertz() + .cmp(&a.refresh_rate_millihertz()), default => default, } } @@ -258,7 +260,9 @@ pub fn get_best_videomode(monitor: &winit::monitor::MonitorHandle) -> winit::mon use std::cmp::Ordering::*; match b.size().width.cmp(&a.size().width) { Equal => match b.size().height.cmp(&a.size().height) { - Equal => b.refresh_rate().cmp(&a.refresh_rate()), + Equal => b + .refresh_rate_millihertz() + .cmp(&a.refresh_rate_millihertz()), default => default, }, default => default,