From a22bac091c5b8e83b5aafc5bca5b7dda9e6ff24f Mon Sep 17 00:00:00 2001 From: Denis Kopyrin Date: Mon, 5 Dec 2022 23:12:19 +0800 Subject: [PATCH] (macOS) Fixed cocoa keyboard not allowing to map Analog stick (#14701) --- input/drivers/cocoa_input.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/input/drivers/cocoa_input.c b/input/drivers/cocoa_input.c index 302b31f0ca..9670669d63 100644 --- a/input/drivers/cocoa_input.c +++ b/input/drivers/cocoa_input.c @@ -431,7 +431,36 @@ static int16_t cocoa_input_state( } break; case RETRO_DEVICE_ANALOG: + { + int16_t ret = 0; + int id_minus_key = 0; + int id_plus_key = 0; + unsigned id_minus = 0; + unsigned id_plus = 0; + bool id_plus_valid = false; + bool id_minus_valid = false; + + input_conv_analog_id_to_bind_id(idx, id, id_minus, id_plus); + + id_minus_valid = binds[port][id_minus].valid; + id_plus_valid = binds[port][id_plus].valid; + id_minus_key = binds[port][id_minus].key; + id_plus_key = binds[port][id_plus].key; + + if (id_plus_valid && id_plus_key < RETROK_LAST) + { + if (apple_key_state[rarch_keysym_lut[(enum retro_key)id_plus_key]]) + ret = 0x7fff; + } + if (id_minus_valid && id_minus_key < RETROK_LAST) + { + if (apple_key_state[rarch_keysym_lut[(enum retro_key)id_minus_key]]) + ret += -0x7fff; + } + return ret; + } break; + case RETRO_DEVICE_KEYBOARD: return (id < RETROK_LAST) && apple_key_state[rarch_keysym_lut[(enum retro_key)id]]; case RETRO_DEVICE_MOUSE: