[retro-gtk/wip/aplazas/kbd] keyboard: Map keycode directly
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [retro-gtk/wip/aplazas/kbd] keyboard: Map keycode directly
- Date: Mon, 13 Apr 2020 21:22:22 +0000 (UTC)
commit 770d4c5a15eb96183ac1143e3b7d4b4d12ca24fc
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Tue Apr 7 21:52:06 2020 +0500
keyboard: Map keycode directly
Don't try to guess it from keyval. The mapping is based on RetroArch.
retro-gtk/retro-core.c | 2 +-
retro-gtk/retro-keyboard-private.h | 2 +-
retro-gtk/retro-keyboard.c | 417 +++++++++++++++++++++++++------------
3 files changed, 290 insertions(+), 131 deletions(-)
---
diff --git a/retro-gtk/retro-core.c b/retro-gtk/retro-core.c
index e44719d..04e2284 100644
--- a/retro-gtk/retro-core.c
+++ b/retro-gtk/retro-core.c
@@ -645,7 +645,7 @@ key_event_cb (GtkWidget *widget,
return FALSE;
pressed = event->type == GDK_KEY_PRESS;
- retro_key = retro_keyboard_key_converter (event->keyval);
+ retro_key = retro_keyboard_key_converter (event->hardware_keycode);
retro_modifier_key = retro_keyboard_modifier_key_converter (event->keyval, event->state);
character = gdk_keyval_to_unicode (event->keyval);
diff --git a/retro-gtk/retro-keyboard-private.h b/retro-gtk/retro-keyboard-private.h
index d69c90b..cf34ba3 100644
--- a/retro-gtk/retro-keyboard-private.h
+++ b/retro-gtk/retro-keyboard-private.h
@@ -13,7 +13,7 @@ G_BEGIN_DECLS
RetroKeyboardModifierKey retro_keyboard_modifier_key_converter (guint keyval,
GdkModifierType modifiers);
-RetroKeyboardKey retro_keyboard_key_converter (guint keyval);
+RetroKeyboardKey retro_keyboard_key_converter (guint16 keycode);
guint retro_keyboard_key_to_val_converter (RetroKeyboardKey key);
G_END_DECLS
diff --git a/retro-gtk/retro-keyboard.c b/retro-gtk/retro-keyboard.c
index 41b022c..dc0cfbc 100644
--- a/retro-gtk/retro-keyboard.c
+++ b/retro-gtk/retro-keyboard.c
@@ -2,6 +2,8 @@
#include "retro-keyboard-private.h"
+#include <linux/input-event-codes.h>
+
RetroKeyboardModifierKey
retro_keyboard_modifier_key_converter (guint keyval,
GdkModifierType modifiers)
@@ -26,145 +28,302 @@ retro_keyboard_modifier_key_converter (guint keyval,
return retro_modifiers;
}
+
RetroKeyboardKey
-retro_keyboard_key_converter (guint keyval)
+retro_keyboard_key_converter (guint16 keycode)
{
- /*
- * US-ASCII codes
- *
- * Both GDK_KEY_* and RETRO_KEYBOARD_KEY_* start with the US-ASCII codes,
- * implementing common letters, digits and symbols.
- *
- * If the key is uppercase, turn it lower case as Libretro doesn't make a
- * distinction between these.
- */
- if (keyval < 0x80)
- return (keyval >= GDK_KEY_A && keyval <= GDK_KEY_Z) ?
- keyval + (GDK_KEY_a - GDK_KEY_A) : keyval;
-
- /*
- * Function keys
- *
- * Both GDK_KEY_F* and RETRO_KEYBOARD_KEY_F* implement function keys 1—15 in a
- * consecutive manner. GDK_KEY_F* actually implements more function keys but
- * RETRO_KEYBOARD_KEY_F* doesn't.
+ /* Mappings of the 0x100 first Linux input event key codes to the corresponding
+ * Libretro keyboard code.
*/
- if (keyval >= GDK_KEY_F1 && keyval <= GDK_KEY_F15)
- return RETRO_KEYBOARD_KEY_F1 + (keyval - GDK_KEY_F1);
-
- /*
- * Keypad digits
- *
- * Both GDK_KEY_KP_* and RETRO_KEYBOARD_KEY_KP* implement keypad digits 0–9 in
- * a consecutive manner.
- */
- if (keyval >= GDK_KEY_KP_0 && keyval <= GDK_KEY_KP_9)
- return RETRO_KEYBOARD_KEY_KP0 + (keyval - GDK_KEY_KP_0);
-
- /*
- * Various keys
- *
- * FIXME: The following keys are unimplemented because I couldn't find the
- * right GDK_KEY_* equivalent:
+ /* FIXME The following RetroKeyboardKey values are not mapped:
+ * - RETRO_KEYBOARD_KEY_AMPERSAND
+ * - RETRO_KEYBOARD_KEY_ASTERISK
+ * - RETRO_KEYBOARD_KEY_AT
+ * - RETRO_KEYBOARD_KEY_BAR
+ * - RETRO_KEYBOARD_KEY_BREAK
+ * - RETRO_KEYBOARD_KEY_CARET
+ * - RETRO_KEYBOARD_KEY_CLEAR
+ * - RETRO_KEYBOARD_KEY_COLON
+ * - RETRO_KEYBOARD_KEY_DOLLAR
+ * - RETRO_KEYBOARD_KEY_EURO
+ * - RETRO_KEYBOARD_KEY_EXCLAIM
+ * - RETRO_KEYBOARD_KEY_GREATER
+ * - RETRO_KEYBOARD_KEY_HASH
+ * - RETRO_KEYBOARD_KEY_LAST
+ * - RETRO_KEYBOARD_KEY_LEFTBRACKET
+ * - RETRO_KEYBOARD_KEY_LESS
+ * - RETRO_KEYBOARD_KEY_LMETA
* - RETRO_KEYBOARD_KEY_MODE
- * - RETRO_KEYBOARD_KEY_COMPOSE
- * - RETRO_KEYBOARD_KEY_POWER
+ * - RETRO_KEYBOARD_KEY_PLUS
+ * - RETRO_KEYBOARD_KEY_QUOTEDBL
+ * - RETRO_KEYBOARD_KEY_RIGHTBRACKET
+ * - RETRO_KEYBOARD_KEY_RMETA
+ * - RETRO_KEYBOARD_KEY_TILDE
+ * - RETRO_KEYBOARD_KEY_UNDERSCORE
*/
- switch (keyval) {
- case GDK_KEY_BackSpace:
- return RETRO_KEYBOARD_KEY_BACKSPACE;
- case GDK_KEY_Tab:
- return RETRO_KEYBOARD_KEY_TAB;
- case GDK_KEY_Clear:
- return RETRO_KEYBOARD_KEY_CLEAR;
- case GDK_KEY_Return:
- return RETRO_KEYBOARD_KEY_RETURN;
- case GDK_KEY_Pause:
- return RETRO_KEYBOARD_KEY_PAUSE;
- case GDK_KEY_Escape:
- return RETRO_KEYBOARD_KEY_ESCAPE;
- case GDK_KEY_Delete:
- return RETRO_KEYBOARD_KEY_DELETE;
+ static const RetroKeyboardKey keycode_mappings[] = {
+ RETRO_KEYBOARD_KEY_FIRST, /* KEY_RESERVED */
+ RETRO_KEYBOARD_KEY_ESCAPE, /* KEY_ESC */
+ RETRO_KEYBOARD_KEY_ONE, /* KEY_1 */
+ RETRO_KEYBOARD_KEY_TWO, /* KEY_2 */
+ RETRO_KEYBOARD_KEY_THREE, /* KEY_3 */
+ RETRO_KEYBOARD_KEY_FOUR, /* KEY_4 */
+ RETRO_KEYBOARD_KEY_FIVE, /* KEY_5 */
+ RETRO_KEYBOARD_KEY_SIX, /* KEY_6 */
+ RETRO_KEYBOARD_KEY_SEVEN, /* KEY_7 */
+ RETRO_KEYBOARD_KEY_EIGHT, /* KEY_8 */
+ RETRO_KEYBOARD_KEY_NINE, /* KEY_9 */
+ RETRO_KEYBOARD_KEY_ZERO, /* KEY_0 */
+ RETRO_KEYBOARD_KEY_MINUS, /* KEY_MINUS */
+ RETRO_KEYBOARD_KEY_EQUALS, /* KEY_EQUAL */
+ RETRO_KEYBOARD_KEY_BACKSPACE, /* KEY_BACKSPACE */
+ RETRO_KEYBOARD_KEY_TAB, /* KEY_TAB */
+ RETRO_KEYBOARD_KEY_q, /* KEY_Q */
+ RETRO_KEYBOARD_KEY_w, /* KEY_W */
+ RETRO_KEYBOARD_KEY_e, /* KEY_E */
+ RETRO_KEYBOARD_KEY_r, /* KEY_R */
+ RETRO_KEYBOARD_KEY_t, /* KEY_T */
+ RETRO_KEYBOARD_KEY_y, /* KEY_Y */
+ RETRO_KEYBOARD_KEY_u, /* KEY_U */
+ RETRO_KEYBOARD_KEY_i, /* KEY_I */
+ RETRO_KEYBOARD_KEY_o, /* KEY_O */
+ RETRO_KEYBOARD_KEY_p, /* KEY_P */
+ RETRO_KEYBOARD_KEY_LEFTBRACE, /* KEY_LEFTBRACE */
+ RETRO_KEYBOARD_KEY_RIGHTBRACE, /* KEY_RIGHTBRACE */
+ RETRO_KEYBOARD_KEY_RETURN, /* KEY_ENTER */
+ RETRO_KEYBOARD_KEY_LCTRL, /* KEY_LEFTCTRL */
+ RETRO_KEYBOARD_KEY_a, /* KEY_A */
+ RETRO_KEYBOARD_KEY_s, /* KEY_S */
+ RETRO_KEYBOARD_KEY_d, /* KEY_D */
+ RETRO_KEYBOARD_KEY_f, /* KEY_F */
+ RETRO_KEYBOARD_KEY_g, /* KEY_G */
+ RETRO_KEYBOARD_KEY_h, /* KEY_H */
+ RETRO_KEYBOARD_KEY_j, /* KEY_J */
+ RETRO_KEYBOARD_KEY_k, /* KEY_K */
+ RETRO_KEYBOARD_KEY_l, /* KEY_L */
+ RETRO_KEYBOARD_KEY_SEMICOLON, /* KEY_SEMICOLON */
+ RETRO_KEYBOARD_KEY_QUOTE, /* KEY_APOSTROPHE */
+ RETRO_KEYBOARD_KEY_BACKQUOTE, /* KEY_GRAVE */
+ RETRO_KEYBOARD_KEY_LSHIFT, /* KEY_LEFTSHIFT */
+ RETRO_KEYBOARD_KEY_BACKSLASH, /* KEY_BACKSLASH */
+ RETRO_KEYBOARD_KEY_z, /* KEY_Z */
+ RETRO_KEYBOARD_KEY_x, /* KEY_X */
+ RETRO_KEYBOARD_KEY_c, /* KEY_C */
+ RETRO_KEYBOARD_KEY_v, /* KEY_V */
+ RETRO_KEYBOARD_KEY_b, /* KEY_B */
+ RETRO_KEYBOARD_KEY_n, /* KEY_N */
+ RETRO_KEYBOARD_KEY_m, /* KEY_M */
+ RETRO_KEYBOARD_KEY_COMMA, /* KEY_COMMA */
+ RETRO_KEYBOARD_KEY_PERIOD, /* KEY_DOT */
+ RETRO_KEYBOARD_KEY_SLASH, /* KEY_SLASH */
+ RETRO_KEYBOARD_KEY_RSHIFT, /* KEY_RIGHTSHIFT */
+ RETRO_KEYBOARD_KEY_KP_MULTIPLY, /* KEY_KPASTERISK */
+ RETRO_KEYBOARD_KEY_LALT, /* KEY_LEFTALT */
+ RETRO_KEYBOARD_KEY_SPACE, /* KEY_SPACE */
+ RETRO_KEYBOARD_KEY_CAPSLOCK, /* KEY_CAPSLOCK */
+ RETRO_KEYBOARD_KEY_F1, /* KEY_F1 */
+ RETRO_KEYBOARD_KEY_F2, /* KEY_F2 */
+ RETRO_KEYBOARD_KEY_F3, /* KEY_F3 */
+ RETRO_KEYBOARD_KEY_F4, /* KEY_F4 */
+ RETRO_KEYBOARD_KEY_F5, /* KEY_F5 */
+ RETRO_KEYBOARD_KEY_F6, /* KEY_F6 */
+ RETRO_KEYBOARD_KEY_F7, /* KEY_F7 */
+ RETRO_KEYBOARD_KEY_F8, /* KEY_F8 */
+ RETRO_KEYBOARD_KEY_F9, /* KEY_F9 */
+ RETRO_KEYBOARD_KEY_F10, /* KEY_F10 */
+ RETRO_KEYBOARD_KEY_NUMLOCK, /* KEY_NUMLOCK */
+ RETRO_KEYBOARD_KEY_SCROLLOCK, /* KEY_SCROLLLOCK */
+ RETRO_KEYBOARD_KEY_KP7, /* KEY_KP7 */
+ RETRO_KEYBOARD_KEY_KP8, /* KEY_KP8 */
+ RETRO_KEYBOARD_KEY_KP9, /* KEY_KP9 */
+ RETRO_KEYBOARD_KEY_KP_MINUS, /* KEY_KPMINUS */
+ RETRO_KEYBOARD_KEY_KP4, /* KEY_KP4 */
+ RETRO_KEYBOARD_KEY_KP5, /* KEY_KP5 */
+ RETRO_KEYBOARD_KEY_KP6, /* KEY_KP6 */
+ RETRO_KEYBOARD_KEY_KP_PLUS, /* KEY_KPPLUS */
+ RETRO_KEYBOARD_KEY_KP1, /* KEY_KP1 */
+ RETRO_KEYBOARD_KEY_KP2, /* KEY_KP2 */
+ RETRO_KEYBOARD_KEY_KP3, /* KEY_KP3 */
+ RETRO_KEYBOARD_KEY_KP0, /* KEY_KP0 */
+ RETRO_KEYBOARD_KEY_KP_PERIOD, /* KEY_KPDOT */
+ RETRO_KEYBOARD_KEY_UNKNOWN,
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_ZENKAKUHANKAKU */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_102ND */
+ RETRO_KEYBOARD_KEY_F11, /* KEY_F11 */
+ RETRO_KEYBOARD_KEY_F12, /* KEY_F12 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_RO */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_KATAKANA */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_HIRAGANA */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_HENKAN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_KATAKANAHIRAGANA */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_MUHENKAN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_KPJPCOMMA */
+ RETRO_KEYBOARD_KEY_KP_ENTER, /* KEY_KPENTER */
+ RETRO_KEYBOARD_KEY_RCTRL, /* KEY_RIGHTCTRL */
+ RETRO_KEYBOARD_KEY_KP_DIVIDE, /* KEY_KPSLASH */
+ RETRO_KEYBOARD_KEY_SYSREQ, /* KEY_SYSRQ */
+ RETRO_KEYBOARD_KEY_RALT, /* KEY_RIGHTALT */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_LINEFEED */
+ RETRO_KEYBOARD_KEY_HOME, /* KEY_HOME */
+ RETRO_KEYBOARD_KEY_UP, /* KEY_UP */
+ RETRO_KEYBOARD_KEY_PAGEUP, /* KEY_PAGEUP */
+ RETRO_KEYBOARD_KEY_LEFT, /* KEY_LEFT */
+ RETRO_KEYBOARD_KEY_RIGHT, /* KEY_RIGHT */
+ RETRO_KEYBOARD_KEY_END, /* KEY_END */
+ RETRO_KEYBOARD_KEY_DOWN, /* KEY_DOWN */
+ RETRO_KEYBOARD_KEY_PAGEDOWN, /* KEY_PAGEDOWN */
+ RETRO_KEYBOARD_KEY_INSERT, /* KEY_INSERT */
+ RETRO_KEYBOARD_KEY_DELETE, /* KEY_DELETE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_MACRO */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_MUTE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_VOLUMEDOWN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_VOLUMEUP */
+ RETRO_KEYBOARD_KEY_POWER, /* KEY_POWER */
+ RETRO_KEYBOARD_KEY_KP_EQUALS, /* KEY_KPEQUAL */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_KPPLUSMINUS */
+ RETRO_KEYBOARD_KEY_PAUSE, /* KEY_PAUSE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SCALE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_KPCOMMA */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_HANGEUL, KEY_HANGUEL */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_HANJA */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_YEN */
+ RETRO_KEYBOARD_KEY_LSUPER, /* KEY_LEFTMETA */
+ RETRO_KEYBOARD_KEY_RSUPER, /* KEY_RIGHTMETA */
+ RETRO_KEYBOARD_KEY_COMPOSE, /* KEY_COMPOSE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_STOP */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_AGAIN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PROPS */
+ RETRO_KEYBOARD_KEY_UNDO, /* KEY_UNDO */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_FRONT */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_COPY */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_OPEN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PASTE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_FIND */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CUT */
+ RETRO_KEYBOARD_KEY_HELP, /* KEY_HELP */
+ RETRO_KEYBOARD_KEY_MENU, /* KEY_MENU */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CALC */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SETUP */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SLEEP */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_WAKEUP */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_FILE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SENDFILE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_DELETEFILE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_XFER */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PROG1 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PROG2 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_WWW */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_MSDOS */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_COFFEE, KEY_SCREENLOCK */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_ROTATE_DISPLAY, KEY_DIRECTION */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CYCLEWINDOWS */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_MAIL */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_BOOKMARKS */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_COMPUTER */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_BACK */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_FORWARD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CLOSECD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_EJECTCD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_EJECTCLOSECD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_NEXTSONG */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PLAYPAUSE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PREVIOUSSONG */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_STOPCD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_RECORD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_REWIND */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PHONE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_ISO */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CONFIG */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_HOMEPAGE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_REFRESH */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_EXIT */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_MOVE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_EDIT */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SCROLLUP */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SCROLLDOWN */
+ /* FIXME Check the values for KEY_KPLEFTPAREN and KEY_KPRIGHTPAREN are correct. */
+ RETRO_KEYBOARD_KEY_LEFTPAREN, /* KEY_KPLEFTPAREN */
+ RETRO_KEYBOARD_KEY_RIGHTPAREN, /* KEY_KPRIGHTPAREN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_NEW */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_REDO */
+ RETRO_KEYBOARD_KEY_F13, /* KEY_F13 */
+ RETRO_KEYBOARD_KEY_F14, /* KEY_F14 */
+ RETRO_KEYBOARD_KEY_F15, /* KEY_F15 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_F16 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_F17 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_F18 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_F19 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_F20 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_F21 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_F22 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_F23 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_F24 */
+ RETRO_KEYBOARD_KEY_UNKNOWN,
+ RETRO_KEYBOARD_KEY_UNKNOWN,
+ RETRO_KEYBOARD_KEY_UNKNOWN,
+ RETRO_KEYBOARD_KEY_UNKNOWN,
+ RETRO_KEYBOARD_KEY_UNKNOWN,
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PLAYCD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PAUSECD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PROG3 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PROG4 */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_DASHBOARD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SUSPEND */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CLOSE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_PLAY */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_FASTFORWARD */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_BASSBOOST */
+ RETRO_KEYBOARD_KEY_PRINT, /* KEY_PRINT */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_HP */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CAMERA */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SOUND */
+ RETRO_KEYBOARD_KEY_QUESTION, /* KEY_QUESTION */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_EMAIL */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CHAT */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SEARCH */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CONNECT */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_FINANCE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SPORT */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SHOP */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_ALTERASE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_CANCEL */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_BRIGHTNESSDOWN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_BRIGHTNESSUP */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_MEDIA */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SWITCHVIDEOMODE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_KBDILLUMTOGGLE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_KBDILLUMDOWN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_KBDILLUMUP */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SEND */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_REPLY */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_FORWARDMAIL */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_SAVE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_DOCUMENTS */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_BATTERY */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_BLUETOOTH */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_WLAN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_UWB */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_UNKNOWN */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_VIDEO_NEXT */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_VIDEO_PREV */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_BRIGHTNESS_CYCLE */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_BRIGHTNESS_AUTO, KEY_BRIGHTNESS_ZERO */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_DISPLAY_OFF */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_WWAN, KEY_WIMAX */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_RFKILL */
+ RETRO_KEYBOARD_KEY_UNKNOWN, /* KEY_MICMUTE */
+ };
- case GDK_KEY_Up:
- return RETRO_KEYBOARD_KEY_UP;
- case GDK_KEY_Down:
- return RETRO_KEYBOARD_KEY_DOWN;
- case GDK_KEY_Left:
- return RETRO_KEYBOARD_KEY_LEFT;
- case GDK_KEY_Right:
- return RETRO_KEYBOARD_KEY_RIGHT;
- case GDK_KEY_Insert:
- return RETRO_KEYBOARD_KEY_INSERT;
- case GDK_KEY_Home:
- return RETRO_KEYBOARD_KEY_HOME;
- case GDK_KEY_End:
- return RETRO_KEYBOARD_KEY_END;
- case GDK_KEY_Page_Up:
- return RETRO_KEYBOARD_KEY_PAGEUP;
- case GDK_KEY_Page_Down:
- return RETRO_KEYBOARD_KEY_PAGEDOWN;
+ /* GDK adds 8 to the Linux input event codes to create the hardware keycode.*/
- case GDK_KEY_KP_Decimal:
- return RETRO_KEYBOARD_KEY_KP_PERIOD;
- case GDK_KEY_KP_Divide:
- return RETRO_KEYBOARD_KEY_KP_DIVIDE;
- case GDK_KEY_KP_Multiply:
- return RETRO_KEYBOARD_KEY_KP_MULTIPLY;
- case GDK_KEY_KP_Subtract:
- return RETRO_KEYBOARD_KEY_KP_MINUS;
- case GDK_KEY_KP_Add:
- return RETRO_KEYBOARD_KEY_KP_PLUS;
- case GDK_KEY_KP_Enter:
- return RETRO_KEYBOARD_KEY_KP_ENTER;
- case GDK_KEY_KP_Equal:
- return RETRO_KEYBOARD_KEY_KP_EQUALS;
+ g_return_val_if_fail (keycode < 8, RETRO_KEYBOARD_KEY_UNKNOWN);
- case GDK_KEY_Num_Lock:
- return RETRO_KEYBOARD_KEY_NUMLOCK;
- case GDK_KEY_Caps_Lock:
- return RETRO_KEYBOARD_KEY_CAPSLOCK;
- case GDK_KEY_Scroll_Lock:
- return RETRO_KEYBOARD_KEY_SCROLLOCK;
- case GDK_KEY_Shift_R:
- return RETRO_KEYBOARD_KEY_RSHIFT;
- case GDK_KEY_Shift_L:
- return RETRO_KEYBOARD_KEY_LSHIFT;
- case GDK_KEY_Control_R:
- return RETRO_KEYBOARD_KEY_RCTRL;
- case GDK_KEY_Control_L:
- return RETRO_KEYBOARD_KEY_LCTRL;
- case GDK_KEY_Alt_R:
- return RETRO_KEYBOARD_KEY_RALT;
- case GDK_KEY_Alt_L:
- return RETRO_KEYBOARD_KEY_LALT;
- case GDK_KEY_Meta_R:
- return RETRO_KEYBOARD_KEY_RMETA;
- case GDK_KEY_Meta_L:
- return RETRO_KEYBOARD_KEY_LMETA;
- case GDK_KEY_Super_R:
- return RETRO_KEYBOARD_KEY_RSUPER;
- case GDK_KEY_Super_L:
- return RETRO_KEYBOARD_KEY_LSUPER;
+ keycode -= 8;
- case GDK_KEY_Help:
- return RETRO_KEYBOARD_KEY_HELP;
- case GDK_KEY_Print:
- return RETRO_KEYBOARD_KEY_PRINT;
- case GDK_KEY_Sys_Req:
- return RETRO_KEYBOARD_KEY_SYSREQ;
- case GDK_KEY_Break:
- return RETRO_KEYBOARD_KEY_BREAK;
- case GDK_KEY_Menu:
- return RETRO_KEYBOARD_KEY_MENU;
- case GDK_KEY_EuroSign:
- return RETRO_KEYBOARD_KEY_EURO;
- case GDK_KEY_Undo:
- return RETRO_KEYBOARD_KEY_UNDO;
-
- default:
+ if (keycode >= G_N_ELEMENTS (keycode_mappings))
return RETRO_KEYBOARD_KEY_UNKNOWN;
- }
+
+ return keycode_mappings[keycode];
}
guint
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]