From 7434c754b0be4951562cec135d0fd5d4d34553f3 Mon Sep 17 00:00:00 2001 From: Shute052 Date: Sun, 4 Feb 2024 10:17:49 +0800 Subject: [PATCH 1/6] Use `key_without_modifiers` --- crates/bevy_winit/src/converters.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/bevy_winit/src/converters.rs b/crates/bevy_winit/src/converters.rs index 5cc2c03475528..651ce7ea4956d 100644 --- a/crates/bevy_winit/src/converters.rs +++ b/crates/bevy_winit/src/converters.rs @@ -1,3 +1,6 @@ +use winit::keyboard::{Key, NamedKey, NativeKey}; +use winit::platform::modifier_supplement::KeyEventExtModifierSupplement; + use bevy_ecs::entity::Entity; use bevy_input::{ keyboard::{KeyCode, KeyboardInput, NativeKeyCode}, @@ -7,7 +10,6 @@ use bevy_input::{ }; use bevy_math::Vec2; use bevy_window::{CursorIcon, EnabledButtons, WindowLevel, WindowTheme}; -use winit::keyboard::{Key, NamedKey, NativeKey}; pub fn convert_keyboard_input( keyboard_input: &winit::event::KeyEvent, @@ -16,7 +18,7 @@ pub fn convert_keyboard_input( KeyboardInput { state: convert_element_state(keyboard_input.state), key_code: convert_physical_key_code(keyboard_input.physical_key), - logical_key: convert_logical_key(&keyboard_input.logical_key), + logical_key: convert_logical_key(&keyboard_input.key_without_modifiers()), window, } } From 192f8ff50eea376530bfebb3b1f7e1f39e2dc5af Mon Sep 17 00:00:00 2001 From: Shute052 Date: Sun, 4 Feb 2024 10:34:45 +0800 Subject: [PATCH 2/6] Bad auto fmt --- crates/bevy_winit/src/converters.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/bevy_winit/src/converters.rs b/crates/bevy_winit/src/converters.rs index 651ce7ea4956d..850151919f27a 100644 --- a/crates/bevy_winit/src/converters.rs +++ b/crates/bevy_winit/src/converters.rs @@ -1,6 +1,3 @@ -use winit::keyboard::{Key, NamedKey, NativeKey}; -use winit::platform::modifier_supplement::KeyEventExtModifierSupplement; - use bevy_ecs::entity::Entity; use bevy_input::{ keyboard::{KeyCode, KeyboardInput, NativeKeyCode}, @@ -10,6 +7,8 @@ use bevy_input::{ }; use bevy_math::Vec2; use bevy_window::{CursorIcon, EnabledButtons, WindowLevel, WindowTheme}; +use winit::keyboard::{Key, NamedKey, NativeKey}; +use winit::platform::modifier_supplement::KeyEventExtModifierSupplement; pub fn convert_keyboard_input( keyboard_input: &winit::event::KeyEvent, From d6fd3be346d0877613aae91e58d5c04996d5b5e4 Mon Sep 17 00:00:00 2001 From: Shute052 Date: Sun, 4 Feb 2024 10:46:24 +0800 Subject: [PATCH 3/6] Use `to_uppercase` --- crates/bevy_winit/src/converters.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/bevy_winit/src/converters.rs b/crates/bevy_winit/src/converters.rs index 850151919f27a..b0844baa62042 100644 --- a/crates/bevy_winit/src/converters.rs +++ b/crates/bevy_winit/src/converters.rs @@ -8,7 +8,6 @@ use bevy_input::{ use bevy_math::Vec2; use bevy_window::{CursorIcon, EnabledButtons, WindowLevel, WindowTheme}; use winit::keyboard::{Key, NamedKey, NativeKey}; -use winit::platform::modifier_supplement::KeyEventExtModifierSupplement; pub fn convert_keyboard_input( keyboard_input: &winit::event::KeyEvent, @@ -17,7 +16,7 @@ pub fn convert_keyboard_input( KeyboardInput { state: convert_element_state(keyboard_input.state), key_code: convert_physical_key_code(keyboard_input.physical_key), - logical_key: convert_logical_key(&keyboard_input.key_without_modifiers()), + logical_key: convert_logical_key(&keyboard_input.logical_key), window, } } @@ -288,7 +287,9 @@ pub fn convert_physical_key_code(virtual_key_code: winit::keyboard::PhysicalKey) pub fn convert_logical_key(logical_key_code: &winit::keyboard::Key) -> bevy_input::keyboard::Key { match logical_key_code { - Key::Character(s) => bevy_input::keyboard::Key::Character(s.clone()), + Key::Character(s) => { + bevy_input::keyboard::Key::Character(s.to_string().to_uppercase().into()) + } Key::Unidentified(nk) => bevy_input::keyboard::Key::Unidentified(convert_native_key(nk)), Key::Dead(c) => bevy_input::keyboard::Key::Dead(c.to_owned()), Key::Named(NamedKey::Alt) => bevy_input::keyboard::Key::Alt, From dd029a9fdec50c672faf107e0f0f2efb46f7956a Mon Sep 17 00:00:00 2001 From: Shute052 Date: Sun, 4 Feb 2024 11:33:17 +0800 Subject: [PATCH 4/6] Use `to_uppercase_character` --- crates/bevy_input/src/keyboard.rs | 13 +++++++++++++ crates/bevy_winit/src/converters.rs | 4 +--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/crates/bevy_input/src/keyboard.rs b/crates/bevy_input/src/keyboard.rs index 3465403871f45..c0b97d087804f 100644 --- a/crates/bevy_input/src/keyboard.rs +++ b/crates/bevy_input/src/keyboard.rs @@ -1441,3 +1441,16 @@ pub enum Key { /// General-purpose function key. F35, } + +impl Key { + /// Returns a `Key` with uppercase character if `self` is `Key::Character`. + /// Otherwise, returns a `Clone` of `self`. + pub fn to_uppercase_character(&self) -> Self { + match self.clone() { + Key::Character(character) => { + Self::Character(character.to_string().to_uppercase().into()) + } + other_kind => other_kind, + } + } +} diff --git a/crates/bevy_winit/src/converters.rs b/crates/bevy_winit/src/converters.rs index b0844baa62042..5cc2c03475528 100644 --- a/crates/bevy_winit/src/converters.rs +++ b/crates/bevy_winit/src/converters.rs @@ -287,9 +287,7 @@ pub fn convert_physical_key_code(virtual_key_code: winit::keyboard::PhysicalKey) pub fn convert_logical_key(logical_key_code: &winit::keyboard::Key) -> bevy_input::keyboard::Key { match logical_key_code { - Key::Character(s) => { - bevy_input::keyboard::Key::Character(s.to_string().to_uppercase().into()) - } + Key::Character(s) => bevy_input::keyboard::Key::Character(s.clone()), Key::Unidentified(nk) => bevy_input::keyboard::Key::Unidentified(convert_native_key(nk)), Key::Dead(c) => bevy_input::keyboard::Key::Dead(c.to_owned()), Key::Named(NamedKey::Alt) => bevy_input::keyboard::Key::Alt, From 453e8f91c7c003568532d08637ad9531f5880b41 Mon Sep 17 00:00:00 2001 From: Shute052 Date: Sun, 4 Feb 2024 20:06:09 +0800 Subject: [PATCH 5/6] Add `Key::eq_ignore_ascii_case()` --- crates/bevy_input/src/keyboard.rs | 33 ++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/crates/bevy_input/src/keyboard.rs b/crates/bevy_input/src/keyboard.rs index c0b97d087804f..9d2f9fc6d087c 100644 --- a/crates/bevy_input/src/keyboard.rs +++ b/crates/bevy_input/src/keyboard.rs @@ -1443,8 +1443,18 @@ pub enum Key { } impl Key { - /// Returns a `Key` with uppercase character if `self` is `Key::Character`. + /// Returns an uppercase version if `self` is a `Key::Character`. /// Otherwise, returns a `Clone` of `self`. + /// + /// # Examples + /// + /// ``` + /// use bevy_input::keyboard::Key; + /// + /// assert_eq!(Key::Character("B".into()).to_uppercase_character(), Key::Character("B".into())); + /// assert_eq!(Key::Character("b".into()).to_uppercase_character(), Key::Character("B".into())); + /// assert_eq!(Key::ArrowUp.to_uppercase_character(), Key::ArrowUp); + /// ``` pub fn to_uppercase_character(&self) -> Self { match self.clone() { Key::Character(character) => { @@ -1453,4 +1463,25 @@ impl Key { other_kind => other_kind, } } + + /// Returns true if `self` is a `Key::Character(character_self)` + /// and `character_self` is an ASCII case-insensitive match with the given `character`. + /// Otherwise, it means they are not matched or if `self` is not a `Key::Character`. + /// + /// # Examples + /// + /// ``` + /// use bevy_input::keyboard::Key; + /// + /// assert!(Key::Character("B".into()).eq_ignore_ascii_case("B")); + /// assert!(Key::Character("b".into()).eq_ignore_ascii_case("B")); + /// assert!(!Key::ArrowUp.eq_ignore_ascii_case("B")); + /// ``` + pub fn eq_ignore_ascii_case(&self, character: impl AsRef) -> bool { + if let Key::Character(character_self) = self { + character_self.eq_ignore_ascii_case(character.as_ref()) + } else { + false + } + } } From 30f521b7b038ef688d6d3796f4bc9c2e8e0f00e2 Mon Sep 17 00:00:00 2001 From: Shute052 Date: Sun, 4 Feb 2024 20:08:31 +0800 Subject: [PATCH 6/6] typo --- crates/bevy_input/src/keyboard.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_input/src/keyboard.rs b/crates/bevy_input/src/keyboard.rs index 9d2f9fc6d087c..f9e6e8d6bf351 100644 --- a/crates/bevy_input/src/keyboard.rs +++ b/crates/bevy_input/src/keyboard.rs @@ -1466,7 +1466,7 @@ impl Key { /// Returns true if `self` is a `Key::Character(character_self)` /// and `character_self` is an ASCII case-insensitive match with the given `character`. - /// Otherwise, it means they are not matched or if `self` is not a `Key::Character`. + /// Otherwise, it means they are not matched or `self` is not a `Key::Character`. /// /// # Examples ///