|
@@ -765,9 +765,41 @@ static void _mouseDownEvent(NSEvent *event, int index, int mask, bool pressed) {
|
|
|
[super updateTrackingAreas];
|
|
|
}
|
|
|
|
|
|
+static bool isNumpadKey(unsigned int key) {
|
|
|
+
|
|
|
+ static const unsigned int table[] = {
|
|
|
+ 0x41, /* kVK_ANSI_KeypadDecimal */
|
|
|
+ 0x43, /* kVK_ANSI_KeypadMultiply */
|
|
|
+ 0x45, /* kVK_ANSI_KeypadPlus */
|
|
|
+ 0x47, /* kVK_ANSI_KeypadClear */
|
|
|
+ 0x4b, /* kVK_ANSI_KeypadDivide */
|
|
|
+ 0x4c, /* kVK_ANSI_KeypadEnter */
|
|
|
+ 0x4e, /* kVK_ANSI_KeypadMinus */
|
|
|
+ 0x51, /* kVK_ANSI_KeypadEquals */
|
|
|
+ 0x52, /* kVK_ANSI_Keypad0 */
|
|
|
+ 0x53, /* kVK_ANSI_Keypad1 */
|
|
|
+ 0x54, /* kVK_ANSI_Keypad2 */
|
|
|
+ 0x55, /* kVK_ANSI_Keypad3 */
|
|
|
+ 0x56, /* kVK_ANSI_Keypad4 */
|
|
|
+ 0x57, /* kVK_ANSI_Keypad5 */
|
|
|
+ 0x58, /* kVK_ANSI_Keypad6 */
|
|
|
+ 0x59, /* kVK_ANSI_Keypad7 */
|
|
|
+ 0x5b, /* kVK_ANSI_Keypad8 */
|
|
|
+ 0x5c, /* kVK_ANSI_Keypad9 */
|
|
|
+ 0x5f, /* kVK_JIS_KeypadComma */
|
|
|
+ 0x00
|
|
|
+ };
|
|
|
+ for (int i = 0; table[i] != 0; i++) {
|
|
|
+ if (key == table[i])
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
// Translates a OS X keycode to a Godot keycode
|
|
|
//
|
|
|
static int translateKey(unsigned int key) {
|
|
|
+
|
|
|
// Keyboard symbol translation table
|
|
|
static const unsigned int table[128] = {
|
|
|
/* 00 */ KEY_A,
|
|
@@ -780,7 +812,7 @@ static int translateKey(unsigned int key) {
|
|
|
/* 07 */ KEY_X,
|
|
|
/* 08 */ KEY_C,
|
|
|
/* 09 */ KEY_V,
|
|
|
- /* 0a */ KEY_UNKNOWN,
|
|
|
+ /* 0a */ KEY_SECTION, /* ISO Section */
|
|
|
/* 0b */ KEY_B,
|
|
|
/* 0c */ KEY_Q,
|
|
|
/* 0d */ KEY_W,
|
|
@@ -834,7 +866,7 @@ static int translateKey(unsigned int key) {
|
|
|
/* 3d */ KEY_ALT,
|
|
|
/* 3e */ KEY_CONTROL,
|
|
|
/* 3f */ KEY_UNKNOWN, /* Function */
|
|
|
- /* 40 */ KEY_UNKNOWN,
|
|
|
+ /* 40 */ KEY_UNKNOWN, /* F17 */
|
|
|
/* 41 */ KEY_KP_PERIOD,
|
|
|
/* 42 */ KEY_UNKNOWN,
|
|
|
/* 43 */ KEY_KP_MULTIPLY,
|
|
@@ -842,16 +874,16 @@ static int translateKey(unsigned int key) {
|
|
|
/* 45 */ KEY_KP_ADD,
|
|
|
/* 46 */ KEY_UNKNOWN,
|
|
|
/* 47 */ KEY_NUMLOCK, /* Really KeypadClear... */
|
|
|
- /* 48 */ KEY_UNKNOWN, /* VolumeUp */
|
|
|
- /* 49 */ KEY_UNKNOWN, /* VolumeDown */
|
|
|
- /* 4a */ KEY_UNKNOWN, /* Mute */
|
|
|
+ /* 48 */ KEY_VOLUMEUP, /* VolumeUp */
|
|
|
+ /* 49 */ KEY_VOLUMEDOWN, /* VolumeDown */
|
|
|
+ /* 4a */ KEY_VOLUMEMUTE, /* Mute */
|
|
|
/* 4b */ KEY_KP_DIVIDE,
|
|
|
/* 4c */ KEY_KP_ENTER,
|
|
|
/* 4d */ KEY_UNKNOWN,
|
|
|
/* 4e */ KEY_KP_SUBTRACT,
|
|
|
- /* 4f */ KEY_UNKNOWN,
|
|
|
- /* 50 */ KEY_UNKNOWN,
|
|
|
- /* 51 */ KEY_EQUAL, //wtf equal?
|
|
|
+ /* 4f */ KEY_UNKNOWN, /* F18 */
|
|
|
+ /* 50 */ KEY_UNKNOWN, /* F19 */
|
|
|
+ /* 51 */ KEY_EQUAL, /* KeypadEqual */
|
|
|
/* 52 */ KEY_KP_0,
|
|
|
/* 53 */ KEY_KP_1,
|
|
|
/* 54 */ KEY_KP_2,
|
|
@@ -860,27 +892,27 @@ static int translateKey(unsigned int key) {
|
|
|
/* 57 */ KEY_KP_5,
|
|
|
/* 58 */ KEY_KP_6,
|
|
|
/* 59 */ KEY_KP_7,
|
|
|
- /* 5a */ KEY_UNKNOWN,
|
|
|
+ /* 5a */ KEY_UNKNOWN, /* F20 */
|
|
|
/* 5b */ KEY_KP_8,
|
|
|
/* 5c */ KEY_KP_9,
|
|
|
- /* 5d */ KEY_UNKNOWN,
|
|
|
- /* 5e */ KEY_UNKNOWN,
|
|
|
- /* 5f */ KEY_UNKNOWN,
|
|
|
+ /* 5d */ KEY_YEN, /* JIS Yen */
|
|
|
+ /* 5e */ KEY_UNDERSCORE, /* JIS Underscore */
|
|
|
+ /* 5f */ KEY_COMMA, /* JIS KeypadComma */
|
|
|
/* 60 */ KEY_F5,
|
|
|
/* 61 */ KEY_F6,
|
|
|
/* 62 */ KEY_F7,
|
|
|
/* 63 */ KEY_F3,
|
|
|
/* 64 */ KEY_F8,
|
|
|
/* 65 */ KEY_F9,
|
|
|
- /* 66 */ KEY_UNKNOWN,
|
|
|
+ /* 66 */ KEY_UNKNOWN, /* JIS Eisu */
|
|
|
/* 67 */ KEY_F11,
|
|
|
- /* 68 */ KEY_UNKNOWN,
|
|
|
+ /* 68 */ KEY_UNKNOWN, /* JIS Kana */
|
|
|
/* 69 */ KEY_F13,
|
|
|
/* 6a */ KEY_F16,
|
|
|
/* 6b */ KEY_F14,
|
|
|
/* 6c */ KEY_UNKNOWN,
|
|
|
/* 6d */ KEY_F10,
|
|
|
- /* 6e */ KEY_UNKNOWN,
|
|
|
+ /* 6e */ KEY_MENU,
|
|
|
/* 6f */ KEY_F12,
|
|
|
/* 70 */ KEY_UNKNOWN,
|
|
|
/* 71 */ KEY_F15,
|
|
@@ -971,6 +1003,9 @@ static const _KeyCodeMap _keycodes[55] = {
|
|
|
|
|
|
static int remapKey(unsigned int key) {
|
|
|
|
|
|
+ if (isNumpadKey(key))
|
|
|
+ return translateKey(key);
|
|
|
+
|
|
|
TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource();
|
|
|
if (!currentKeyboard)
|
|
|
return translateKey(key);
|