Merge pull request #3796 from fufesou/refact/simplify_keyboard_lock_modifiers
simplify keyboard lock modifiers
This commit is contained in:
commit
7675be024f
@ -366,22 +366,37 @@ pub fn get_keyboard_mode_enum() -> KeyboardMode {
|
|||||||
#[inline]
|
#[inline]
|
||||||
fn is_numpad_key(event: &Event) -> bool {
|
fn is_numpad_key(event: &Event) -> bool {
|
||||||
matches!(event.event_type, EventType::KeyPress(key) | EventType::KeyRelease(key) if match key {
|
matches!(event.event_type, EventType::KeyPress(key) | EventType::KeyRelease(key) if match key {
|
||||||
Key::Kp0 | Key::Kp1 | Key::Kp2 | Key::Kp3| Key::Kp4| Key::Kp5| Key::Kp6|
|
Key::Kp0 | Key::Kp1 | Key::Kp2 | Key::Kp3 | Key::Kp4 | Key::Kp5 | Key::Kp6 | Key::Kp7 | Key::Kp8 |
|
||||||
Key::Kp7| Key::Kp8| Key::Kp9 | Key::KpMinus | Key::KpMultiply |
|
Key::Kp9 | Key::KpMinus | Key::KpMultiply | Key::KpDivide | Key::KpPlus | Key::KpDecimal => true,
|
||||||
Key::KpDivide | Key::KpPlus | Key::KpDecimal => true,
|
_ => false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn is_letter_key(event: &Event) -> bool {
|
||||||
|
matches!(event.event_type, EventType::KeyPress(key) | EventType::KeyRelease(key) if match key {
|
||||||
|
Key::KeyA | Key::KeyB | Key::KeyC | Key::KeyD | Key::KeyE | Key::KeyF | Key::KeyG | Key::KeyH |
|
||||||
|
Key::KeyI | Key::KeyJ | Key::KeyK | Key::KeyL | Key::KeyM | Key::KeyN | Key::KeyO | Key::KeyP |
|
||||||
|
Key::KeyQ | Key::KeyR | Key::KeyS | Key::KeyT | Key::KeyU | Key::KeyV | Key::KeyW | Key::KeyX |
|
||||||
|
Key::KeyY | Key::KeyZ => true,
|
||||||
_ => false
|
_ => false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
fn parse_add_lock_modes_modifiers(key_event: &mut KeyEvent, lock_modes: i32, is_numpad_key: bool) {
|
fn parse_add_lock_modes_modifiers(
|
||||||
|
key_event: &mut KeyEvent,
|
||||||
|
lock_modes: i32,
|
||||||
|
is_numpad_key: bool,
|
||||||
|
is_letter_key: bool,
|
||||||
|
) {
|
||||||
const CAPS_LOCK: i32 = 1;
|
const CAPS_LOCK: i32 = 1;
|
||||||
const NUM_LOCK: i32 = 2;
|
const NUM_LOCK: i32 = 2;
|
||||||
// const SCROLL_LOCK: i32 = 3;
|
// const SCROLL_LOCK: i32 = 3;
|
||||||
if !is_numpad_key && (lock_modes & (1 << CAPS_LOCK) != 0) {
|
if is_letter_key && (lock_modes & (1 << CAPS_LOCK) != 0) {
|
||||||
key_event.modifiers.push(ControlKey::CapsLock.into());
|
key_event.modifiers.push(ControlKey::CapsLock.into());
|
||||||
}
|
}
|
||||||
if is_numpad_key && (lock_modes & (1 << NUM_LOCK) != 0) {
|
if is_numpad_key && lock_modes & (1 << NUM_LOCK) != 0 {
|
||||||
key_event.modifiers.push(ControlKey::NumLock.into());
|
key_event.modifiers.push(ControlKey::NumLock.into());
|
||||||
}
|
}
|
||||||
// if lock_modes & (1 << SCROLL_LOCK) != 0 {
|
// if lock_modes & (1 << SCROLL_LOCK) != 0 {
|
||||||
@ -390,8 +405,8 @@ fn parse_add_lock_modes_modifiers(key_event: &mut KeyEvent, lock_modes: i32, is_
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
fn add_lock_modes_modifiers(key_event: &mut KeyEvent, is_numpad_key: bool) {
|
fn add_lock_modes_modifiers(key_event: &mut KeyEvent, is_numpad_key: bool, is_letter_key: bool) {
|
||||||
if !is_numpad_key && get_key_state(enigo::Key::CapsLock) {
|
if is_letter_key && get_key_state(enigo::Key::CapsLock) {
|
||||||
key_event.modifiers.push(ControlKey::CapsLock.into());
|
key_event.modifiers.push(ControlKey::CapsLock.into());
|
||||||
}
|
}
|
||||||
if is_numpad_key && get_key_state(enigo::Key::NumLock) {
|
if is_numpad_key && get_key_state(enigo::Key::NumLock) {
|
||||||
@ -480,12 +495,13 @@ pub fn event_to_key_events(
|
|||||||
|
|
||||||
if keyboard_mode != KeyboardMode::Translate {
|
if keyboard_mode != KeyboardMode::Translate {
|
||||||
let is_numpad_key = is_numpad_key(&event);
|
let is_numpad_key = is_numpad_key(&event);
|
||||||
|
let is_letter_key = is_letter_key(&event);
|
||||||
for key_event in &mut key_events {
|
for key_event in &mut key_events {
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
if let Some(lock_modes) = lock_modes {
|
if let Some(lock_modes) = lock_modes {
|
||||||
parse_add_lock_modes_modifiers(key_event, lock_modes, is_numpad_key);
|
parse_add_lock_modes_modifiers(key_event, lock_modes, is_numpad_key, is_letter_key);
|
||||||
} else {
|
} else {
|
||||||
add_lock_modes_modifiers(key_event, is_numpad_key);
|
add_lock_modes_modifiers(key_event, is_numpad_key, is_letter_key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user