mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 22:00:10 +00:00
Fix key mapping changes when moving from macOS to other platform
Removes separate `Command` key (use `Meta` instead). Adds an event flag to automatically remap `Command` <-> `Control` (cannot be set alongside `Control` or `Meta`).
This commit is contained in:
parent
6b92dbfce2
commit
6f4d233062
50 changed files with 513 additions and 494 deletions
|
|
@ -61,12 +61,16 @@ static const _KeyCodeText _keycodes[] = {
|
|||
{Key::PAGEDOWN ,"PageDown"},
|
||||
{Key::SHIFT ,"Shift"},
|
||||
{Key::CTRL ,"Ctrl"},
|
||||
#ifdef MACOS_ENABLED
|
||||
#if defined(MACOS_ENABLED)
|
||||
{Key::META ,"Command"},
|
||||
{Key::ALT ,"Option"},
|
||||
#elif defined(WINDOWS_ENABLED)
|
||||
{Key::META ,"Windows"},
|
||||
{Key::ALT ,"Alt"},
|
||||
#else
|
||||
{Key::META ,"Meta"},
|
||||
#endif
|
||||
{Key::ALT ,"Alt"},
|
||||
#endif
|
||||
{Key::CAPSLOCK ,"CapsLock"},
|
||||
{Key::NUMLOCK ,"NumLock"},
|
||||
{Key::SCROLLLOCK ,"ScrollLock"},
|
||||
|
|
@ -437,6 +441,14 @@ String keycode_get_string(Key p_code) {
|
|||
codestr += find_keycode_name(Key::ALT);
|
||||
codestr += "+";
|
||||
}
|
||||
if ((p_code & KeyModifierMask::CMD_OR_CTRL) != Key::NONE) {
|
||||
#ifdef MACOS_ENABLED
|
||||
codestr += find_keycode_name(Key::META);
|
||||
#else
|
||||
codestr += find_keycode_name(Key::CTRL);
|
||||
#endif
|
||||
codestr += "+";
|
||||
}
|
||||
if ((p_code & KeyModifierMask::CTRL) != Key::NONE) {
|
||||
codestr += find_keycode_name(Key::CTRL);
|
||||
codestr += "+";
|
||||
|
|
|
|||
|
|
@ -36,11 +36,11 @@
|
|||
enum class Key {
|
||||
NONE = 0,
|
||||
// Special key: The strategy here is similar to the one used by toolkits,
|
||||
// which consists in leaving the 24 bits unicode range for printable
|
||||
// characters, and use the upper 8 bits for special keys and modifiers.
|
||||
// which consists in leaving the 21 bits unicode range for printable
|
||||
// characters, and use the upper 11 bits for special keys and modifiers.
|
||||
// This way everything (char/keycode) can fit nicely in one 32-bit
|
||||
// integer (the enum's underlying type is `int` by default).
|
||||
SPECIAL = (1 << 24),
|
||||
SPECIAL = (1 << 22),
|
||||
/* CURSOR/FUNCTION/BROWSER/MULTIMEDIA/MISC KEYS */
|
||||
ESCAPE = SPECIAL | 0x01,
|
||||
TAB = SPECIAL | 0x02,
|
||||
|
|
@ -312,17 +312,14 @@ enum class Key {
|
|||
};
|
||||
|
||||
enum class KeyModifierMask {
|
||||
CODE_MASK = ((1 << 25) - 1), ///< Apply this mask to any keycode to remove modifiers.
|
||||
MODIFIER_MASK = (0x7F << 24), ///< Apply this mask to isolate modifiers.
|
||||
CODE_MASK = ((1 << 23) - 1), ///< Apply this mask to any keycode to remove modifiers.
|
||||
MODIFIER_MASK = (0x7F << 22), ///< Apply this mask to isolate modifiers.
|
||||
//RESERVED = (1 << 23),
|
||||
CMD_OR_CTRL = (1 << 24),
|
||||
SHIFT = (1 << 25),
|
||||
ALT = (1 << 26),
|
||||
META = (1 << 27),
|
||||
CTRL = (1 << 28),
|
||||
#ifdef APPLE_STYLE_KEYS
|
||||
CMD = META,
|
||||
#else
|
||||
CMD = CTRL,
|
||||
#endif
|
||||
KPAD = (1 << 29),
|
||||
GROUP_SWITCH = (1 << 30)
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue