You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-04 17:04:49 +00:00
Merge pull request #18020 from bruvzg/input_fix_non_latin_and_add_hw_scancodes
Fix non-latin layout scancodes on Linux, adds access to physical scancodes.
This commit is contained in:
@@ -218,7 +218,7 @@
|
||||
#define DOM_VK_PA1 0xFD
|
||||
#define DOM_VK_WIN_OEM_CLEAR 0xFE
|
||||
|
||||
int dom2godot_scancode(int dom_keycode) {
|
||||
int dom2godot_keycode(int dom_keycode) {
|
||||
|
||||
if (DOM_VK_0 <= dom_keycode && dom_keycode <= DOM_VK_Z) {
|
||||
// ASCII intersection
|
||||
|
||||
@@ -250,7 +250,8 @@ static Ref<InputEventKey> setup_key_event(const EmscriptenKeyboardEvent *emscrip
|
||||
ev.instance();
|
||||
ev->set_echo(emscripten_event->repeat);
|
||||
dom2godot_mod(emscripten_event, ev);
|
||||
ev->set_scancode(dom2godot_scancode(emscripten_event->keyCode));
|
||||
ev->set_keycode(dom2godot_keycode(emscripten_event->keyCode));
|
||||
ev->set_physical_keycode(dom2godot_keycode(emscripten_event->keyCode));
|
||||
|
||||
String unicode = String::utf8(emscripten_event->key);
|
||||
// Check if empty or multi-character (e.g. `CapsLock`).
|
||||
@@ -270,7 +271,7 @@ EM_BOOL OS_JavaScript::keydown_callback(int p_event_type, const EmscriptenKeyboa
|
||||
OS_JavaScript *os = get_singleton();
|
||||
Ref<InputEventKey> ev = setup_key_event(p_event);
|
||||
ev->set_pressed(true);
|
||||
if (ev->get_unicode() == 0 && keycode_has_unicode(ev->get_scancode())) {
|
||||
if (ev->get_unicode() == 0 && keycode_has_unicode(ev->get_keycode())) {
|
||||
// Defer to keypress event for legacy unicode retrieval.
|
||||
os->deferred_key_event = ev;
|
||||
// Do not suppress keypress event.
|
||||
@@ -295,7 +296,7 @@ EM_BOOL OS_JavaScript::keyup_callback(int p_event_type, const EmscriptenKeyboard
|
||||
Ref<InputEventKey> ev = setup_key_event(p_event);
|
||||
ev->set_pressed(false);
|
||||
get_singleton()->input->parse_input_event(ev);
|
||||
return ev->get_scancode() != KEY_UNKNOWN && ev->get_scancode() != 0;
|
||||
return ev->get_keycode() != KEY_UNKNOWN && ev->get_keycode() != 0;
|
||||
}
|
||||
|
||||
// Mouse
|
||||
|
||||
Reference in New Issue
Block a user