diff --git a/Makefile.common b/Makefile.common index 6852f32070..8490a0cb8b 100644 --- a/Makefile.common +++ b/Makefile.common @@ -2116,7 +2116,6 @@ endif ifeq ($(HAVE_COCOA),1) DEFINES += -DHAVE_MAIN OBJ += input/drivers/cocoa_input.o \ - input/drivers_keyboard/keyboard_event_apple.o \ ui/drivers/ui_cocoa.o \ ui/drivers/cocoa/ui_cocoa_window.o \ ui/drivers/cocoa/ui_cocoa_browser_window.o \ diff --git a/griffin/griffin.c b/griffin/griffin.c index a6d0aca4f2..d645f710e0 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -813,11 +813,6 @@ INPUT (HID) /*============================================================ KEYBOARD EVENT ============================================================ */ - -#ifdef __APPLE__ -#include "../input/drivers_keyboard/keyboard_event_apple.c" -#endif - #ifdef HAVE_XKBCOMMON #include "../input/drivers_keyboard/keyboard_event_xkb.c" #endif diff --git a/input/drivers/cocoa_input.c b/input/drivers/cocoa_input.c index 66e9445b1d..1fd403e137 100644 --- a/input/drivers/cocoa_input.c +++ b/input/drivers/cocoa_input.c @@ -38,6 +38,290 @@ /* Forward declarations */ float get_backing_scale_factor(void); +static bool apple_key_state[MAX_KEYS]; +#if TARGET_OS_IPHONE +/* TODO/FIXME - static globals */ +static bool small_keyboard_active = false; + +#define HIDKEY(X) X +#define MAX_ICADE_PROFILES 4 +#define MAX_ICADE_KEYS 0x100 + +typedef struct icade_map +{ + bool up; + enum retro_key key; +} icade_map_t; + +static icade_map_t icade_maps[MAX_ICADE_PROFILES][MAX_ICADE_KEYS]; + +static bool handle_small_keyboard(unsigned* code, bool down) +{ + static uint8_t mapping[128]; + static bool map_initialized; + static const struct { uint8_t orig; uint8_t mod; } mapping_def[] = + { + { KEY_Grave, KEY_Escape }, { KEY_1, KEY_F1 }, + { KEY_2, KEY_F2 }, { KEY_3, KEY_F3 }, + { KEY_4, KEY_F4 }, { KEY_5, KEY_F5 }, + { KEY_6, KEY_F6 }, { KEY_7, KEY_F7 }, + { KEY_8, KEY_F8 }, { KEY_9, KEY_F9 }, + { KEY_0, KEY_F10 }, { KEY_Minus, KEY_F11 }, + { KEY_Equals, KEY_F12 }, { KEY_Up, KEY_PageUp }, + { KEY_Down, KEY_PageDown }, { KEY_Left, KEY_Home }, + { KEY_Right, KEY_End }, { KEY_Q, KP_7 }, + { KEY_W, KP_8 }, { KEY_E, KP_9 }, + { KEY_A, KP_4 }, { KEY_S, KP_5 }, + { KEY_D, KP_6 }, { KEY_Z, KP_1 }, + { KEY_X, KP_2 }, { KEY_C, KP_3 }, + { 0 } + }; + unsigned translated_code = 0; + + if (!map_initialized) + { + int i; + for (i = 0; mapping_def[i].orig; i ++) + mapping[mapping_def[i].orig] = mapping_def[i].mod; + map_initialized = true; + } + + if (*code == KEY_RightShift) + { + small_keyboard_active = down; + *code = 0; + return true; + } + + if (*code < 128) + translated_code = mapping[*code]; + + /* Allow old keys to be released. */ + if (!down && apple_key_state[*code]) + return false; + + if ((!down && apple_key_state[translated_code]) || + small_keyboard_active) + { + *code = translated_code; + return true; + } + + return false; +} + +static bool handle_icade_event(unsigned *code, bool *keydown) +{ + static bool initialized = false; + bool ret = false; + settings_t *settings = config_get_ptr(); + unsigned kb_type_idx = settings->uints.input_keyboard_gamepad_mapping_type; + + if (!initialized) + { + unsigned i; + unsigned j = 0; + + for (j = 0; j < MAX_ICADE_PROFILES; j++) + { + for (i = 0; i < MAX_ICADE_KEYS; i++) + { + icade_maps[j][i].key = RETROK_UNKNOWN; + icade_maps[j][i].up = false; + } + } + + /* iPega PG-9017 */ + j = 1; + + icade_maps[j][rarch_keysym_lut[RETROK_a]].key = RETROK_LEFT; + icade_maps[j][rarch_keysym_lut[RETROK_q]].key = RETROK_LEFT; + icade_maps[j][rarch_keysym_lut[RETROK_c]].key = RETROK_RIGHT; + icade_maps[j][rarch_keysym_lut[RETROK_d]].key = RETROK_RIGHT; + icade_maps[j][rarch_keysym_lut[RETROK_e]].key = RETROK_UP; + icade_maps[j][rarch_keysym_lut[RETROK_w]].key = RETROK_UP; + icade_maps[j][rarch_keysym_lut[RETROK_x]].key = RETROK_DOWN; + icade_maps[j][rarch_keysym_lut[RETROK_z]].key = RETROK_DOWN; + icade_maps[j][rarch_keysym_lut[RETROK_f]].key = RETROK_z; + icade_maps[j][rarch_keysym_lut[RETROK_u]].key = RETROK_z; + icade_maps[j][rarch_keysym_lut[RETROK_i]].key = RETROK_q; + icade_maps[j][rarch_keysym_lut[RETROK_m]].key = RETROK_q; + icade_maps[j][rarch_keysym_lut[RETROK_j]].key = RETROK_a; + icade_maps[j][rarch_keysym_lut[RETROK_n]].key = RETROK_a; + icade_maps[j][rarch_keysym_lut[RETROK_k]].key = RETROK_w; + icade_maps[j][rarch_keysym_lut[RETROK_p]].key = RETROK_w; + icade_maps[j][rarch_keysym_lut[RETROK_h]].key = RETROK_x; + icade_maps[j][rarch_keysym_lut[RETROK_r]].key = RETROK_x; + icade_maps[j][rarch_keysym_lut[RETROK_y]].key = RETROK_s; + icade_maps[j][rarch_keysym_lut[RETROK_t]].key = RETROK_s; + + icade_maps[j][rarch_keysym_lut[RETROK_e]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_z]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_q]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_c]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_f]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_m]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_t]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_n]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_p]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_r]].up = true; + + /* 8-bitty */ + j = 2; + + icade_maps[j][rarch_keysym_lut[RETROK_a]].key = RETROK_LEFT; + icade_maps[j][rarch_keysym_lut[RETROK_q]].key = RETROK_LEFT; + icade_maps[j][rarch_keysym_lut[RETROK_c]].key = RETROK_RIGHT; + icade_maps[j][rarch_keysym_lut[RETROK_d]].key = RETROK_RIGHT; + icade_maps[j][rarch_keysym_lut[RETROK_e]].key = RETROK_UP; + icade_maps[j][rarch_keysym_lut[RETROK_w]].key = RETROK_UP; + icade_maps[j][rarch_keysym_lut[RETROK_x]].key = RETROK_DOWN; + icade_maps[j][rarch_keysym_lut[RETROK_z]].key = RETROK_DOWN; + icade_maps[j][rarch_keysym_lut[RETROK_h]].key = RETROK_q; + icade_maps[j][rarch_keysym_lut[RETROK_r]].key = RETROK_q; + icade_maps[j][rarch_keysym_lut[RETROK_j]].key = RETROK_w; + icade_maps[j][rarch_keysym_lut[RETROK_n]].key = RETROK_w; + icade_maps[j][rarch_keysym_lut[RETROK_i]].key = RETROK_a; + icade_maps[j][rarch_keysym_lut[RETROK_m]].key = RETROK_a; + icade_maps[j][rarch_keysym_lut[RETROK_k]].key = RETROK_z; + icade_maps[j][rarch_keysym_lut[RETROK_p]].key = RETROK_z; + icade_maps[j][rarch_keysym_lut[RETROK_y]].key = RETROK_RSHIFT; + icade_maps[j][rarch_keysym_lut[RETROK_t]].key = RETROK_RSHIFT; + icade_maps[j][rarch_keysym_lut[RETROK_u]].key = RETROK_RETURN; + icade_maps[j][rarch_keysym_lut[RETROK_f]].key = RETROK_RETURN; + icade_maps[j][rarch_keysym_lut[RETROK_l]].key = RETROK_x; + icade_maps[j][rarch_keysym_lut[RETROK_v]].key = RETROK_x; + icade_maps[j][rarch_keysym_lut[RETROK_o]].key = RETROK_s; + icade_maps[j][rarch_keysym_lut[RETROK_g]].key = RETROK_s; + + icade_maps[j][rarch_keysym_lut[RETROK_e]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_z]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_q]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_c]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_r]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_n]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_m]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_p]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_t]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_f]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_v]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_g]].up = true; + + /* SNES30 8bitDo */ + j = 3; + + icade_maps[j][rarch_keysym_lut[RETROK_e]].key = RETROK_UP; + icade_maps[j][rarch_keysym_lut[RETROK_w]].key = RETROK_UP; + icade_maps[j][rarch_keysym_lut[RETROK_x]].key = RETROK_DOWN; + icade_maps[j][rarch_keysym_lut[RETROK_z]].key = RETROK_DOWN; + icade_maps[j][rarch_keysym_lut[RETROK_a]].key = RETROK_LEFT; + icade_maps[j][rarch_keysym_lut[RETROK_q]].key = RETROK_LEFT; + icade_maps[j][rarch_keysym_lut[RETROK_c]].key = RETROK_RIGHT; + icade_maps[j][rarch_keysym_lut[RETROK_d]].key = RETROK_RIGHT; + icade_maps[j][rarch_keysym_lut[RETROK_u]].key = RETROK_x; + icade_maps[j][rarch_keysym_lut[RETROK_f]].key = RETROK_x; + icade_maps[j][rarch_keysym_lut[RETROK_h]].key = RETROK_z; + icade_maps[j][rarch_keysym_lut[RETROK_r]].key = RETROK_z; + icade_maps[j][rarch_keysym_lut[RETROK_y]].key = RETROK_a; + icade_maps[j][rarch_keysym_lut[RETROK_t]].key = RETROK_a; + icade_maps[j][rarch_keysym_lut[RETROK_j]].key = RETROK_s; + icade_maps[j][rarch_keysym_lut[RETROK_n]].key = RETROK_s; + icade_maps[j][rarch_keysym_lut[RETROK_k]].key = RETROK_q; + icade_maps[j][rarch_keysym_lut[RETROK_p]].key = RETROK_q; + icade_maps[j][rarch_keysym_lut[RETROK_i]].key = RETROK_w; + icade_maps[j][rarch_keysym_lut[RETROK_m]].key = RETROK_w; + icade_maps[j][rarch_keysym_lut[RETROK_l]].key = RETROK_RSHIFT; + icade_maps[j][rarch_keysym_lut[RETROK_v]].key = RETROK_RSHIFT; + icade_maps[j][rarch_keysym_lut[RETROK_o]].key = RETROK_RETURN; + icade_maps[j][rarch_keysym_lut[RETROK_g]].key = RETROK_RETURN; + + icade_maps[j][rarch_keysym_lut[RETROK_v]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_g]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_e]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_z]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_q]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_c]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_r]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_f]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_n]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_t]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_p]].up = true; + icade_maps[j][rarch_keysym_lut[RETROK_m]].up = true; + + initialized = true; + } + + if ((*code < 0x20) && (icade_maps[kb_type_idx][*code].key != RETROK_UNKNOWN)) + { + *keydown = icade_maps[kb_type_idx][*code].up ? false : true; + ret = true; + *code = rarch_keysym_lut[icade_maps[kb_type_idx][*code].key]; + } + + return ret; +} + +void apple_input_keyboard_event(bool down, + unsigned code, uint32_t character, uint32_t mod, unsigned device) +{ + settings_t *settings = config_get_ptr(); + bool keyboard_gamepad_enable = settings->bools.input_keyboard_gamepad_enable; + bool small_keyboard_enable = settings->bools.input_small_keyboard_enable; + code = HIDKEY(code); + + if (keyboard_gamepad_enable) + { + if (handle_icade_event(&code, &down)) + character = 0; + else + code = 0; + } + else if (small_keyboard_enable) + { + if (handle_small_keyboard(&code, down)) + character = 0; + } + + if (code == 0 || code >= MAX_KEYS) + return; + + apple_key_state[code] = down; + + input_keyboard_event(down, + input_keymaps_translate_keysym_to_rk(code), + character, (enum retro_mod)mod, device); +} +#else +/* Taken from https://github.com/depp/keycode, + * check keycode.h for license. */ +static const unsigned char MAC_NATIVE_TO_HID[128] = { + 4, 22, 7, 9, 11, 10, 29, 27, 6, 25,255, 5, 20, 26, 8, 21, + 28, 23, 30, 31, 32, 33, 35, 34, 46, 38, 36, 45, 37, 39, 48, 18, + 24, 47, 12, 19, 40, 15, 13, 52, 14, 51, 49, 54, 56, 17, 16, 55, + 43, 44, 53, 42,255, 41,231,227,225, 57,226,224,229,230,228,255, + 108, 99,255, 85,255, 87,255, 83,255,255,255, 84, 88,255, 86,109, + 110,103, 98, 89, 90, 91, 92, 93, 94, 95,111, 96, 97,255,255,255, + 62, 63, 64, 60, 65, 66,255, 68,255,104,107,105,255, 67,255, 69, + 255,106,117, 74, 75, 76, 61, 77, 59, 78, 58, 80, 79, 81, 82,255 +}; + +#define HIDKEY(X) (X < 128) ? MAC_NATIVE_TO_HID[X] : 0 + +void apple_input_keyboard_event(bool down, + unsigned code, uint32_t character, uint32_t mod, unsigned device) +{ + code = HIDKEY(code); + if (code == 0 || code >= MAX_KEYS) + return; + + apple_key_state[code] = down; + + input_keyboard_event(down, + input_keymaps_translate_keysym_to_rk(code), + character, (enum retro_mod)mod, device); +} +#endif + static void *cocoa_input_init(const char *joypad_driver) { cocoa_input_data_t *apple = (cocoa_input_data_t*)calloc(1, sizeof(*apple)); diff --git a/input/drivers_keyboard/keyboard_event_apple.c b/input/drivers_keyboard/keyboard_event_apple.c deleted file mode 100644 index 5743db4e6e..0000000000 --- a/input/drivers_keyboard/keyboard_event_apple.c +++ /dev/null @@ -1,316 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2011-2017 - Daniel De Matteis - * Copyright (C) 2013-2014 - Jason Fetters - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include -#include - -#ifdef HAVE_CONFIG_H -#include "../../config.h" -#endif - -#include "../input_keymaps.h" - -#include "../../driver.h" -#include "../../retroarch.h" - -#include "keyboard_event_apple.h" - -uint32_t apple_key_state[MAX_KEYS]; - -#if TARGET_OS_IPHONE -/* TODO/FIXME - static globals */ -static bool small_keyboard_active = false; - -#define HIDKEY(X) X -#define MAX_ICADE_PROFILES 4 -#define MAX_ICADE_KEYS 0x100 - -typedef struct icade_map -{ - bool up; - enum retro_key key; -} icade_map_t; - -static icade_map_t icade_maps[MAX_ICADE_PROFILES][MAX_ICADE_KEYS]; - -static bool handle_small_keyboard(unsigned* code, bool down) -{ - static uint8_t mapping[128]; - static bool map_initialized; - static const struct { uint8_t orig; uint8_t mod; } mapping_def[] = - { - { KEY_Grave, KEY_Escape }, { KEY_1, KEY_F1 }, - { KEY_2, KEY_F2 }, { KEY_3, KEY_F3 }, - { KEY_4, KEY_F4 }, { KEY_5, KEY_F5 }, - { KEY_6, KEY_F6 }, { KEY_7, KEY_F7 }, - { KEY_8, KEY_F8 }, { KEY_9, KEY_F9 }, - { KEY_0, KEY_F10 }, { KEY_Minus, KEY_F11 }, - { KEY_Equals, KEY_F12 }, { KEY_Up, KEY_PageUp }, - { KEY_Down, KEY_PageDown }, { KEY_Left, KEY_Home }, - { KEY_Right, KEY_End }, { KEY_Q, KP_7 }, - { KEY_W, KP_8 }, { KEY_E, KP_9 }, - { KEY_A, KP_4 }, { KEY_S, KP_5 }, - { KEY_D, KP_6 }, { KEY_Z, KP_1 }, - { KEY_X, KP_2 }, { KEY_C, KP_3 }, - { 0 } - }; - unsigned translated_code = 0; - - if (!map_initialized) - { - int i; - for (i = 0; mapping_def[i].orig; i ++) - mapping[mapping_def[i].orig] = mapping_def[i].mod; - map_initialized = true; - } - - if (*code == KEY_RightShift) - { - small_keyboard_active = down; - *code = 0; - return true; - } - - if (*code < 128) - translated_code = mapping[*code]; - - /* Allow old keys to be released. */ - if (!down && apple_key_state[*code]) - return false; - - if ((!down && apple_key_state[translated_code]) || - small_keyboard_active) - { - *code = translated_code; - return true; - } - - return false; -} - -static bool handle_icade_event(unsigned *code, bool *keydown) -{ - static bool initialized = false; - bool ret = false; - settings_t *settings = config_get_ptr(); - unsigned kb_type_idx = settings->uints.input_keyboard_gamepad_mapping_type; - - if (!initialized) - { - unsigned i; - unsigned j = 0; - - for (j = 0; j < MAX_ICADE_PROFILES; j++) - { - for (i = 0; i < MAX_ICADE_KEYS; i++) - { - icade_maps[j][i].key = RETROK_UNKNOWN; - icade_maps[j][i].up = false; - } - } - - /* iPega PG-9017 */ - j = 1; - - icade_maps[j][rarch_keysym_lut[RETROK_a]].key = RETROK_LEFT; - icade_maps[j][rarch_keysym_lut[RETROK_q]].key = RETROK_LEFT; - icade_maps[j][rarch_keysym_lut[RETROK_c]].key = RETROK_RIGHT; - icade_maps[j][rarch_keysym_lut[RETROK_d]].key = RETROK_RIGHT; - icade_maps[j][rarch_keysym_lut[RETROK_e]].key = RETROK_UP; - icade_maps[j][rarch_keysym_lut[RETROK_w]].key = RETROK_UP; - icade_maps[j][rarch_keysym_lut[RETROK_x]].key = RETROK_DOWN; - icade_maps[j][rarch_keysym_lut[RETROK_z]].key = RETROK_DOWN; - icade_maps[j][rarch_keysym_lut[RETROK_f]].key = RETROK_z; - icade_maps[j][rarch_keysym_lut[RETROK_u]].key = RETROK_z; - icade_maps[j][rarch_keysym_lut[RETROK_i]].key = RETROK_q; - icade_maps[j][rarch_keysym_lut[RETROK_m]].key = RETROK_q; - icade_maps[j][rarch_keysym_lut[RETROK_j]].key = RETROK_a; - icade_maps[j][rarch_keysym_lut[RETROK_n]].key = RETROK_a; - icade_maps[j][rarch_keysym_lut[RETROK_k]].key = RETROK_w; - icade_maps[j][rarch_keysym_lut[RETROK_p]].key = RETROK_w; - icade_maps[j][rarch_keysym_lut[RETROK_h]].key = RETROK_x; - icade_maps[j][rarch_keysym_lut[RETROK_r]].key = RETROK_x; - icade_maps[j][rarch_keysym_lut[RETROK_y]].key = RETROK_s; - icade_maps[j][rarch_keysym_lut[RETROK_t]].key = RETROK_s; - - icade_maps[j][rarch_keysym_lut[RETROK_e]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_z]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_q]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_c]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_f]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_m]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_t]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_n]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_p]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_r]].up = true; - - /* 8-bitty */ - j = 2; - - icade_maps[j][rarch_keysym_lut[RETROK_a]].key = RETROK_LEFT; - icade_maps[j][rarch_keysym_lut[RETROK_q]].key = RETROK_LEFT; - icade_maps[j][rarch_keysym_lut[RETROK_c]].key = RETROK_RIGHT; - icade_maps[j][rarch_keysym_lut[RETROK_d]].key = RETROK_RIGHT; - icade_maps[j][rarch_keysym_lut[RETROK_e]].key = RETROK_UP; - icade_maps[j][rarch_keysym_lut[RETROK_w]].key = RETROK_UP; - icade_maps[j][rarch_keysym_lut[RETROK_x]].key = RETROK_DOWN; - icade_maps[j][rarch_keysym_lut[RETROK_z]].key = RETROK_DOWN; - icade_maps[j][rarch_keysym_lut[RETROK_h]].key = RETROK_q; - icade_maps[j][rarch_keysym_lut[RETROK_r]].key = RETROK_q; - icade_maps[j][rarch_keysym_lut[RETROK_j]].key = RETROK_w; - icade_maps[j][rarch_keysym_lut[RETROK_n]].key = RETROK_w; - icade_maps[j][rarch_keysym_lut[RETROK_i]].key = RETROK_a; - icade_maps[j][rarch_keysym_lut[RETROK_m]].key = RETROK_a; - icade_maps[j][rarch_keysym_lut[RETROK_k]].key = RETROK_z; - icade_maps[j][rarch_keysym_lut[RETROK_p]].key = RETROK_z; - icade_maps[j][rarch_keysym_lut[RETROK_y]].key = RETROK_RSHIFT; - icade_maps[j][rarch_keysym_lut[RETROK_t]].key = RETROK_RSHIFT; - icade_maps[j][rarch_keysym_lut[RETROK_u]].key = RETROK_RETURN; - icade_maps[j][rarch_keysym_lut[RETROK_f]].key = RETROK_RETURN; - icade_maps[j][rarch_keysym_lut[RETROK_l]].key = RETROK_x; - icade_maps[j][rarch_keysym_lut[RETROK_v]].key = RETROK_x; - icade_maps[j][rarch_keysym_lut[RETROK_o]].key = RETROK_s; - icade_maps[j][rarch_keysym_lut[RETROK_g]].key = RETROK_s; - - icade_maps[j][rarch_keysym_lut[RETROK_e]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_z]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_q]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_c]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_r]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_n]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_m]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_p]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_t]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_f]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_v]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_g]].up = true; - - /* SNES30 8bitDo */ - j = 3; - - icade_maps[j][rarch_keysym_lut[RETROK_e]].key = RETROK_UP; - icade_maps[j][rarch_keysym_lut[RETROK_w]].key = RETROK_UP; - icade_maps[j][rarch_keysym_lut[RETROK_x]].key = RETROK_DOWN; - icade_maps[j][rarch_keysym_lut[RETROK_z]].key = RETROK_DOWN; - icade_maps[j][rarch_keysym_lut[RETROK_a]].key = RETROK_LEFT; - icade_maps[j][rarch_keysym_lut[RETROK_q]].key = RETROK_LEFT; - icade_maps[j][rarch_keysym_lut[RETROK_c]].key = RETROK_RIGHT; - icade_maps[j][rarch_keysym_lut[RETROK_d]].key = RETROK_RIGHT; - icade_maps[j][rarch_keysym_lut[RETROK_u]].key = RETROK_x; - icade_maps[j][rarch_keysym_lut[RETROK_f]].key = RETROK_x; - icade_maps[j][rarch_keysym_lut[RETROK_h]].key = RETROK_z; - icade_maps[j][rarch_keysym_lut[RETROK_r]].key = RETROK_z; - icade_maps[j][rarch_keysym_lut[RETROK_y]].key = RETROK_a; - icade_maps[j][rarch_keysym_lut[RETROK_t]].key = RETROK_a; - icade_maps[j][rarch_keysym_lut[RETROK_j]].key = RETROK_s; - icade_maps[j][rarch_keysym_lut[RETROK_n]].key = RETROK_s; - icade_maps[j][rarch_keysym_lut[RETROK_k]].key = RETROK_q; - icade_maps[j][rarch_keysym_lut[RETROK_p]].key = RETROK_q; - icade_maps[j][rarch_keysym_lut[RETROK_i]].key = RETROK_w; - icade_maps[j][rarch_keysym_lut[RETROK_m]].key = RETROK_w; - icade_maps[j][rarch_keysym_lut[RETROK_l]].key = RETROK_RSHIFT; - icade_maps[j][rarch_keysym_lut[RETROK_v]].key = RETROK_RSHIFT; - icade_maps[j][rarch_keysym_lut[RETROK_o]].key = RETROK_RETURN; - icade_maps[j][rarch_keysym_lut[RETROK_g]].key = RETROK_RETURN; - - icade_maps[j][rarch_keysym_lut[RETROK_v]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_g]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_e]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_z]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_q]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_c]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_r]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_f]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_n]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_t]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_p]].up = true; - icade_maps[j][rarch_keysym_lut[RETROK_m]].up = true; - - initialized = true; - } - - if ((*code < 0x20) && (icade_maps[kb_type_idx][*code].key != RETROK_UNKNOWN)) - { - *keydown = icade_maps[kb_type_idx][*code].up ? false : true; - ret = true; - *code = rarch_keysym_lut[icade_maps[kb_type_idx][*code].key]; - } - - return ret; -} - -void apple_input_keyboard_event(bool down, - unsigned code, uint32_t character, uint32_t mod, unsigned device) -{ - settings_t *settings = config_get_ptr(); - bool keyboard_gamepad_enable = settings->bools.input_keyboard_gamepad_enable; - bool small_keyboard_enable = settings->bools.input_small_keyboard_enable; - code = HIDKEY(code); - - if (keyboard_gamepad_enable) - { - if (handle_icade_event(&code, &down)) - character = 0; - else - code = 0; - } - else if (small_keyboard_enable) - { - if (handle_small_keyboard(&code, down)) - character = 0; - } - - if (code == 0 || code >= MAX_KEYS) - return; - - apple_key_state[code] = down; - - input_keyboard_event(down, - input_keymaps_translate_keysym_to_rk(code), - character, (enum retro_mod)mod, device); -} -#else -/* Taken from https://github.com/depp/keycode, - * check keycode.h for license. */ - -static const unsigned char MAC_NATIVE_TO_HID[128] = { - 4, 22, 7, 9, 11, 10, 29, 27, 6, 25,255, 5, 20, 26, 8, 21, - 28, 23, 30, 31, 32, 33, 35, 34, 46, 38, 36, 45, 37, 39, 48, 18, - 24, 47, 12, 19, 40, 15, 13, 52, 14, 51, 49, 54, 56, 17, 16, 55, - 43, 44, 53, 42,255, 41,231,227,225, 57,226,224,229,230,228,255, - 108, 99,255, 85,255, 87,255, 83,255,255,255, 84, 88,255, 86,109, - 110,103, 98, 89, 90, 91, 92, 93, 94, 95,111, 96, 97,255,255,255, - 62, 63, 64, 60, 65, 66,255, 68,255,104,107,105,255, 67,255, 69, - 255,106,117, 74, 75, 76, 61, 77, 59, 78, 58, 80, 79, 81, 82,255 -}; - -#define HIDKEY(X) (X < 128) ? MAC_NATIVE_TO_HID[X] : 0 - -void apple_input_keyboard_event(bool down, - unsigned code, uint32_t character, uint32_t mod, unsigned device) -{ - code = HIDKEY(code); - if (code == 0 || code >= MAX_KEYS) - return; - - apple_key_state[code] = down; - - input_keyboard_event(down, - input_keymaps_translate_keysym_to_rk(code), - character, (enum retro_mod)mod, device); -} -#endif - diff --git a/input/drivers_keyboard/keyboard_event_apple.h b/input/drivers_keyboard/keyboard_event_apple.h index e608799df9..4cb4064dda 100644 --- a/input/drivers_keyboard/keyboard_event_apple.h +++ b/input/drivers_keyboard/keyboard_event_apple.h @@ -169,8 +169,6 @@ RETRO_BEGIN_DECLS void apple_input_keyboard_event(bool down, unsigned code, uint32_t character, uint32_t mod, unsigned device); -extern uint32_t apple_key_state[MAX_KEYS]; - RETRO_END_DECLS #endif