Pass joypad_info to input_state function callback - less

settings pointer grabbing
This commit is contained in:
twinaphex 2017-01-10 17:40:21 +01:00
parent da4d2a9f42
commit d48141041d
24 changed files with 171 additions and 139 deletions

View File

@ -1311,21 +1311,17 @@ static int16_t input_wl_pointer_state(gfx_ctx_wayland_data_t *wl,
}
static int16_t input_wl_state(void *data, const struct retro_keybind **binds,
static int16_t input_wl_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device, unsigned idx, unsigned id)
{
int16_t ret;
rarch_joypad_info_t joypad_info;
settings_t *settings = config_get_ptr();
gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data;
if (!wl)
return 0;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -1107,18 +1107,14 @@ bool android_run_events(void *data)
}
static int16_t android_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds, unsigned port, unsigned device,
unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
settings_t *settings = config_get_ptr();
android_input_t *android = (android_input_t*)data;
android_input_data_t *android_data = (android_input_data_t*)&android->copy;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -271,21 +271,16 @@ static int16_t cocoa_pointer_state(cocoa_input_data_t *apple,
}
static int16_t cocoa_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds, unsigned port,
unsigned device, unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
int16_t ret = 0;
cocoa_input_data_t *apple = (cocoa_input_data_t*)data;
settings_t *settings = config_get_ptr();
if (!apple || !apple->joypad)
return 0;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -45,21 +45,18 @@ static void ctr_input_poll(void *data)
ctr->joypad->poll();
}
static int16_t ctr_input_state(void *data, const struct retro_keybind **binds,
static int16_t ctr_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device,
unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
ctr_input_t *ctr = (ctr_input_t*)data;
settings_t *settings = config_get_ptr();
if (port > 0)
return 0;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -466,17 +466,12 @@ static int16_t dinput_pointer_state(struct dinput_input *di,
}
static int16_t dinput_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds, unsigned port,
unsigned device, unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
int16_t ret;
struct dinput_input *di = (struct dinput_input*)data;
settings_t *settings = config_get_ptr();
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
@ -488,6 +483,7 @@ static int16_t dinput_input_state(void *data,
case RETRO_DEVICE_ANALOG:
if (binds[port])
{
settings_t *settings = config_get_ptr();
ret = dinput_pressed_analog(di, binds[port], idx, id);
if (!ret)
ret = input_joypad_analog(di->joypad, joypad_info,

View File

@ -40,21 +40,17 @@ typedef struct gx_input
const input_device_driver_t *joypad;
} gx_input_t;
static int16_t gx_input_state(void *data, const struct retro_keybind **binds,
static int16_t gx_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device,
unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
gx_input_t *gx = (gx_input_t*)data;
settings_t *settings = config_get_ptr();
if (port >= MAX_PADS || !gx)
return 0;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -113,17 +113,12 @@ static bool linuxraw_input_meta_key_pressed(void *data, int key)
}
static int16_t linuxraw_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds, unsigned port,
unsigned device, unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
int16_t ret = 0;
linuxraw_input_t *linuxraw = (linuxraw_input_t*)data;
settings_t *settings = config_get_ptr();
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{

View File

@ -29,6 +29,7 @@ static void nullinput_input_poll(void *data)
}
static int16_t nullinput_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **retro_keybinds, unsigned port,
unsigned device, unsigned idx, unsigned id)
{

View File

@ -100,21 +100,16 @@ static int16_t ps3_mouse_device_state(ps3_input_t *ps3,
#endif
static int16_t ps3_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device,
unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
ps3_input_t *ps3 = (ps3_input_t*)data;
settings_t *settings = config_get_ptr();
if (!ps3)
return 0;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -60,23 +60,20 @@ static void psp_input_poll(void *data)
psp->joypad->poll();
}
static int16_t psp_input_state(void *data, const struct retro_keybind **binds,
static int16_t psp_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device,
unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
psp_input_t *psp = (psp_input_t*)data;
settings_t *settings = config_get_ptr();
#if !defined(SN_TARGET_PSP2) && !defined(VITA)
if (port > 0)
return 0;
#endif
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -136,8 +136,7 @@ static void qnx_process_gamepad_event(
int i;
screen_device_t device;
qnx_input_device_t* controller = NULL;
settings_t *settings = config_get_ptr();
uint64_t *state_cur = NULL;
uint64_t *state_cur = NULL;
(void)type;
@ -720,20 +719,15 @@ bool qnx_keyboard_pressed(qnx_input_t *qnx, unsigned id)
}
static bool qnx_is_pressed(qnx_input_t *qnx,
const struct retro_keybind *binds,
unsigned port, unsigned id)
rarch_joypad_info_t joypad_info,
const struct retro_keybind *binds,
unsigned port, unsigned id)
{
rarch_joypad_info_t joypad_info;
settings_t *settings = config_get_ptr();
const struct retro_keybind *bind = &binds[id];
if (id >= RARCH_BIND_LIST_END)
return false;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
if (!qnx->blocked && qnx_keyboard_pressed(qnx, bind->key))
return true;
if (binds && binds[id].valid && input_joypad_pressed(qnx->joypad, joypad_info, port, binds, id))
@ -775,6 +769,7 @@ static int16_t qnx_pointer_input_state(qnx_input_t *qnx,
}
static int16_t qnx_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device, unsigned idx, unsigned id)
{
@ -783,7 +778,7 @@ static int16_t qnx_input_state(void *data,
switch (device)
{
case RETRO_DEVICE_JOYPAD:
return qnx_is_pressed(qnx, binds[port], port, id);
return qnx_is_pressed(qnx, joypad_info, binds[port], port, id);
case RETRO_DEVICE_KEYBOARD:
return qnx_keyboard_pressed(qnx, id);
case RETRO_DEVICE_POINTER:

View File

@ -142,7 +142,9 @@ static int16_t rwebinput_analog_pressed(rwebinput_input_t *rwebinput,
return pressed_plus + pressed_minus;
}
static int16_t rwebinput_input_state(void *data, const struct retro_keybind **binds,
static int16_t rwebinput_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device, unsigned idx, unsigned id)
{
rwebinput_input_t *rwebinput = (rwebinput_input_t*)data;

View File

@ -110,13 +110,13 @@ static bool sdl_input_meta_key_pressed(void *data, int key)
return false;
}
static int16_t sdl_joypad_device_state(sdl_input_t *sdl, const struct retro_keybind **binds_,
static int16_t sdl_joypad_device_state(sdl_input_t *sdl,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds_,
unsigned port, unsigned id, enum input_device_type *device)
{
if (id < RARCH_BIND_LIST_END)
{
rarch_joypad_info_t joypad_info;
settings_t *settings = config_get_ptr();
const struct retro_keybind *binds = binds_[port];
if (sdl_is_pressed(sdl, port, binds, id))
@ -125,10 +125,6 @@ static int16_t sdl_joypad_device_state(sdl_input_t *sdl, const struct retro_keyb
return 1;
}
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
if (input_joypad_pressed(sdl->joypad, joypad_info, 0, binds, id))
{
*device = INPUT_DEVICE_TYPE_JOYPAD;
@ -240,7 +236,9 @@ static int16_t sdl_lightgun_device_state(sdl_input_t *sdl, unsigned id)
return 0;
}
static int16_t sdl_input_state(void *data_, const struct retro_keybind **binds,
static int16_t sdl_input_state(void *data_,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device, unsigned idx, unsigned id)
{
enum input_device_type type = INPUT_DEVICE_TYPE_NONE;
@ -249,7 +247,7 @@ static int16_t sdl_input_state(void *data_, const struct retro_keybind **binds,
switch (device)
{
case RETRO_DEVICE_JOYPAD:
return sdl_joypad_device_state(data, binds, port, id, &type);
return sdl_joypad_device_state(data, joypad_info, binds, port, id, &type);
case RETRO_DEVICE_ANALOG:
return sdl_analog_device_state(data, binds, port, idx, id);
case RETRO_DEVICE_MOUSE:

View File

@ -492,21 +492,17 @@ static int16_t udev_pointer_state(udev_input_t *udev,
return 0;
}
static int16_t udev_input_state(void *data, const struct retro_keybind **binds,
static int16_t udev_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device, unsigned idx, unsigned id)
{
int16_t ret;
rarch_joypad_info_t joypad_info;
settings_t *settings = config_get_ptr();
udev_input_t *udev = (udev_input_t*)data;
if (!udev)
return 0;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -47,21 +47,18 @@ static void wiiu_input_poll(void *data)
wiiu->joypad->poll();
}
static int16_t wiiu_input_state(void *data, const struct retro_keybind **binds,
static int16_t wiiu_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device,
unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
settings_t *settings = config_get_ptr();
wiiu_input_t *wiiu = (wiiu_input_t*)data;
if(!wiiu || (port > 0) || !binds || !binds[port])
return 0;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -220,18 +220,13 @@ static int16_t x_lightgun_state(x11_input_t *x11, unsigned id)
}
static int16_t x_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds, unsigned port,
unsigned device, unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
int16_t ret = 0;
settings_t *settings = config_get_ptr();
x11_input_t *x11 = (x11_input_t*)data;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:
@ -242,7 +237,7 @@ static int16_t x_input_state(void *data,
case RETRO_DEVICE_ANALOG:
if (binds[port])
ret = x_pressed_analog(x11, binds[port], idx, id);
if (!ret && binds[port] && binds[port])
if (!ret && binds[port])
ret = input_joypad_analog(x11->joypad, joypad_info,
port, idx,
id, binds[port]);

View File

@ -47,21 +47,17 @@ static void xdk_input_poll(void *data)
xdk->joypad->poll();
}
static int16_t xdk_input_state(void *data, const struct retro_keybind **binds,
static int16_t xdk_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port, unsigned device,
unsigned index, unsigned id)
{
rarch_joypad_info_t joypad_info;
xdk_input_t *xdk = (xdk_input_t*)data;
settings_t *settings = config_get_ptr();
if (port >= MAX_PADS)
return 0;
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
joypad_info.axis_threshold = settings->input.axis_threshold;
switch (device)
{
case RETRO_DEVICE_JOYPAD:

View File

@ -55,15 +55,15 @@ static void xenon360_input_poll(void *data)
}
}
static int16_t xenon360_input_state(void *data, const struct retro_keybind **binds,
static int16_t xenon360_input_state(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
bool port, unsigned device,
unsigned idx, unsigned id)
{
(void)data;
(void)idx;
unsigned user = port;
unsigned user = port;
uint64_t button = binds[user][id].joykey;
int16_t retval = 0;
int16_t retval = 0;
if(user < MAX_PADS)
{
@ -72,6 +72,8 @@ static int16_t xenon360_input_state(void *data, const struct retro_keybind **bin
case RETRO_DEVICE_JOYPAD:
retval = (state[user] & button) ? 1 : 0;
break;
default:
break;
}
}

View File

@ -265,6 +265,7 @@ static const struct retro_keybind *libretro_input_binds[MAX_USERS];
void input_poll(void)
{
size_t i;
rarch_joypad_info_t joypad_info;
settings_t *settings = config_get_ptr();
unsigned max_users = settings->input.max_users;
@ -278,15 +279,23 @@ void input_poll(void)
input_driver_turbo_btns.frame_enable[i] = 0;
}
joypad_info.axis_threshold = settings->input.axis_threshold;
if (!input_driver_block_libretro_input)
{
for (i = 0; i < max_users; i++)
{
bool bind_valid = libretro_input_binds[i][RARCH_TURBO_ENABLE].valid;
if (bind_valid)
{
joypad_info.joy_idx = i;
joypad_info.auto_binds = settings->input.autoconf_binds[i];
input_driver_turbo_btns.frame_enable[i] = current_input->input_state(
current_input_data, libretro_input_binds,
current_input_data, joypad_info, libretro_input_binds,
i, RETRO_DEVICE_JOYPAD, 0, RARCH_TURBO_ENABLE);
}
}
}
@ -325,11 +334,14 @@ void input_poll(void)
int16_t input_state(unsigned port, unsigned device,
unsigned idx, unsigned id)
{
rarch_joypad_info_t joypad_info;
int16_t res = 0;
settings_t *settings = config_get_ptr();
device &= RETRO_DEVICE_MASK;
joypad_info.axis_threshold = settings->input.axis_threshold;
if (bsv_movie_ctl(BSV_MOVIE_CTL_PLAYBACK_ON, NULL))
{
int16_t ret;
@ -370,8 +382,12 @@ int16_t input_state(unsigned port, unsigned device,
bind_valid = true;
if (bind_valid)
{
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
res = current_input->input_state(
current_input_data, libretro_input_binds, port, device, idx, id);
current_input_data, joypad_info, libretro_input_binds, port, device, idx, id);
}
}
#ifdef HAVE_OVERLAY
@ -460,6 +476,7 @@ static const unsigned buttons[] = {
void state_tracker_update_input(uint16_t *input1, uint16_t *input2)
{
unsigned i;
rarch_joypad_info_t joypad_info;
const struct retro_keybind *binds[MAX_USERS];
settings_t *settings = config_get_ptr();
unsigned max_users = settings->input.max_users;
@ -468,6 +485,8 @@ void state_tracker_update_input(uint16_t *input1, uint16_t *input2)
for (i = 0; i < max_users; i++)
binds[i] = settings->input.binds[i];
joypad_info.axis_threshold = settings->input.axis_threshold;
for (i = 0; i < max_users; i++)
{
struct retro_keybind *general_binds = settings->input.binds[i];
@ -488,11 +507,21 @@ void state_tracker_update_input(uint16_t *input1, uint16_t *input2)
unsigned id = buttons[i - 4];
if (binds[0][id].valid)
*input1 |= (current_input->input_state(current_input_data, binds,
{
joypad_info.joy_idx = 0;
joypad_info.auto_binds = settings->input.autoconf_binds[0];
*input1 |= (current_input->input_state(current_input_data, joypad_info,
binds,
0, RETRO_DEVICE_JOYPAD, 0, id) ? 1 : 0) << i;
}
if (binds[1][id].valid)
*input2 |= (current_input->input_state(current_input_data, binds,
{
joypad_info.joy_idx = 1;
joypad_info.auto_binds = settings->input.autoconf_binds[1];
*input2 |= (current_input->input_state(current_input_data, joypad_info,
binds,
1, RETRO_DEVICE_JOYPAD, 0, id) ? 1 : 0) << i;
}
}
}
@ -509,6 +538,8 @@ void state_tracker_update_input(uint16_t *input1, uint16_t *input2)
#ifdef HAVE_MENU
static INLINE bool input_menu_keys_pressed_internal(
const struct retro_keybind **binds,
settings_t *settings,
rarch_joypad_info_t joypad_info,
unsigned i,
unsigned max_users,
bool bind_valid, bool all_users_control_menu)
@ -524,7 +555,12 @@ static INLINE bool input_menu_keys_pressed_internal(
for (port = 0; port < port_max; port++)
{
bool bind_valid = binds[port][i].valid;
if (bind_valid && current_input->input_state(current_input_data, binds,
joypad_info.joy_idx = port;
joypad_info.auto_binds = settings->input.autoconf_binds[port];
if (bind_valid && current_input->input_state(current_input_data, joypad_info,
binds,
port, RETRO_DEVICE_JOYPAD, 0, i))
return true;
}
@ -565,14 +601,16 @@ static INLINE bool input_menu_keys_pressed_internal(
return false;
}
#define input_keys_pressed_checks(binds, enable_hotkey_valid) \
#define input_keys_pressed_checks(settings, joypad_info, binds, enable_hotkey_valid) \
input_driver_block_libretro_input = false; \
input_driver_block_hotkey = false; \
if (current_input->keyboard_mapping_is_blocked && current_input->keyboard_mapping_is_blocked(current_input_data)) \
input_driver_block_hotkey = true; \
if (check_input_driver_block_hotkey(binds_norm, binds_auto)) \
{ \
if (enable_hotkey_valid && current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_JOYPAD, 0, RARCH_ENABLE_HOTKEY)) \
joypad_info.joy_idx = 0; \
joypad_info.auto_binds = settings->input.autoconf_binds[0]; \
if (enable_hotkey_valid && current_input->input_state(current_input_data, joypad_info, binds, 0, RETRO_DEVICE_JOYPAD, 0, RARCH_ENABLE_HOTKEY)) \
input_driver_block_libretro_input = true; \
else \
input_driver_block_hotkey = true; \
@ -616,6 +654,7 @@ uint64_t input_menu_keys_pressed(
if (current_input && current_input_data)
{
unsigned i;
rarch_joypad_info_t joypad_info;
const struct retro_keybind *binds[MAX_USERS] = {NULL};
settings_t *settings = config_get_ptr();
const struct retro_keybind *binds_norm = &settings->input.binds[0][RARCH_ENABLE_HOTKEY];
@ -634,7 +673,9 @@ uint64_t input_menu_keys_pressed(
input_push_analog_dpad(auto_binds, ANALOG_DPAD_LSTICK);
}
input_keys_pressed_checks(&binds[0], enable_hotkey_valid);
joypad_info.axis_threshold = settings->input.axis_threshold;
input_keys_pressed_checks(settings, joypad_info, &binds[0], enable_hotkey_valid);
for (i = 0; i < RARCH_BIND_LIST_END; i++)
{
@ -644,7 +685,7 @@ uint64_t input_menu_keys_pressed(
for (port = 0; port < max_users; port++)
binds[port] = settings->input.binds[port];
if (input_menu_keys_pressed_internal(binds, i, max_users,
if (input_menu_keys_pressed_internal(binds, settings, joypad_info, i, max_users,
settings->input.binds[0][i].valid,
settings->input.all_users_control_menu))
ret |= (UINT64_C(1) << i);
@ -695,7 +736,7 @@ uint64_t input_menu_keys_pressed(
for (i = 0; i < 13; i++)
{
if (current_input->input_state(current_input_data, binds, 0,
if (current_input->input_state(current_input_data, joypad_info, binds, 0,
RETRO_DEVICE_KEYBOARD, 0, ids[i][0]))
BIT64_SET(ret, ids[i][1]);
}
@ -713,14 +754,21 @@ uint64_t input_menu_keys_pressed(
}
#endif
static INLINE bool input_keys_pressed_internal(unsigned i,
static INLINE bool input_keys_pressed_internal(
settings_t *settings,
rarch_joypad_info_t joypad_info,
unsigned i,
const struct retro_keybind *binds)
{
if (((!input_driver_block_libretro_input && ((i < RARCH_FIRST_META_KEY)))
|| !input_driver_block_hotkey))
{
bool bind_valid = binds[i].valid;
if (bind_valid && current_input->input_state(current_input_data, &binds,
joypad_info.joy_idx = 0;
joypad_info.auto_binds = settings->input.autoconf_binds[0];
if (bind_valid && current_input->input_state(current_input_data, joypad_info, &binds,
0, RETRO_DEVICE_JOYPAD, 0, i))
return true;
}
@ -779,6 +827,7 @@ uint64_t input_keys_pressed(
bool runloop_paused)
{
unsigned i;
rarch_joypad_info_t joypad_info;
uint64_t ret = 0;
settings_t *settings = config_get_ptr();
const struct retro_keybind *binds = settings->input.binds[0];
@ -789,22 +838,26 @@ uint64_t input_keys_pressed(
const struct retro_keybind *focus_normal = &binds[RARCH_GAME_FOCUS_TOGGLE];
bool enable_hotkey_valid = binds_norm && binds_norm->valid;
bool game_focus_toggle_valid = false;
joypad_info.axis_threshold = settings->input.axis_threshold;
input_keys_pressed_checks(&binds, enable_hotkey_valid);
input_keys_pressed_checks(settings, joypad_info, &binds, enable_hotkey_valid);
game_focus_toggle_valid = binds[RARCH_GAME_FOCUS_TOGGLE].valid;
/* Allows rarch_focus_toggle hotkey to still work even though every hotkey is blocked */
if (check_input_driver_block_hotkey(focus_normal, focus_binds_auto) && game_focus_toggle_valid)
{
if (current_input->input_state(current_input_data, &binds, 0,
joypad_info.joy_idx = 0;
joypad_info.auto_binds = settings->input.autoconf_binds[0];
if (current_input->input_state(current_input_data, joypad_info, &binds, 0,
RETRO_DEVICE_JOYPAD, 0, RARCH_GAME_FOCUS_TOGGLE))
input_driver_block_hotkey = false;
}
for (i = 0; i < RARCH_BIND_LIST_END; i++)
{
if (input_keys_pressed_internal(i, binds))
if (input_keys_pressed_internal(settings, joypad_info, i, binds))
ret |= (UINT64_C(1) << i);
}

View File

@ -74,6 +74,7 @@ typedef struct input_driver
void *(*init)(void);
void (*poll)(void *data);
int16_t (*input_state)(void *data,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **retro_keybinds,
unsigned port, unsigned device, unsigned index, unsigned id);
bool (*meta_key_pressed)(void *data, int key);

View File

@ -569,6 +569,7 @@ bool input_overlay_key_pressed(input_overlay_t *ol, int key)
void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad_mode,
float axis_threshold)
{
rarch_joypad_info_t joypad_info;
input_overlay_state_t old_key_state;
unsigned i, j, device;
uint16_t key_mod = 0;
@ -578,6 +579,10 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad
if (!ol_state)
return;
joypad_info.joy_idx = 0;
joypad_info.auto_binds = NULL;
joypad_info.axis_threshold = 0.0f;
memcpy(old_key_state.keys, ol_state->keys,
sizeof(ol_state->keys));
memset(ol_state, 0, sizeof(*ol_state));
@ -586,14 +591,17 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad
RARCH_DEVICE_POINTER_SCREEN : RETRO_DEVICE_POINTER;
for (i = 0;
current_input->input_state(current_input_data, NULL,
current_input->input_state(current_input_data, joypad_info,
NULL,
0, device, i, RETRO_DEVICE_ID_POINTER_PRESSED);
i++)
{
input_overlay_state_t polled_data;
int16_t x = current_input->input_state(current_input_data, NULL,
int16_t x = current_input->input_state(current_input_data, joypad_info,
NULL,
0, device, i, RETRO_DEVICE_ID_POINTER_X);
int16_t y = current_input->input_state(current_input_data, NULL,
int16_t y = current_input->input_state(current_input_data, joypad_info,
NULL,
0, device, i, RETRO_DEVICE_ID_POINTER_Y);
memset(&polled_data, 0, sizeof(struct input_overlay_state));

View File

@ -142,6 +142,8 @@ const char** menu_event_get_osk_grid(void)
static int menu_event_pointer(unsigned *action)
{
rarch_joypad_info_t joypad_info;
int pointer_x, pointer_y;
const struct retro_keybind *binds[MAX_USERS] = {NULL};
menu_input_t *menu_input = menu_input_get_ptr();
unsigned fb_width = menu_display_get_width();
@ -149,19 +151,30 @@ static int menu_event_pointer(unsigned *action)
int pointer_device =
menu_driver_ctl(RARCH_MENU_CTL_IS_SET_TEXTURE, NULL) ?
RETRO_DEVICE_POINTER : RARCH_DEVICE_POINTER_SCREEN;
int pointer_x =
current_input->input_state(current_input_data, binds,
joypad_info.joy_idx = 0;
joypad_info.auto_binds = NULL;
joypad_info.axis_threshold = 0.0f;
pointer_x =
current_input->input_state(current_input_data, joypad_info, binds,
0, pointer_device, 0, RETRO_DEVICE_ID_POINTER_X);
int pointer_y =
current_input->input_state(current_input_data, binds,
pointer_y =
current_input->input_state(current_input_data, joypad_info, binds,
0, pointer_device, 0, RETRO_DEVICE_ID_POINTER_Y);
menu_input->pointer.pressed[0] = current_input->input_state(current_input_data, binds,
menu_input->pointer.pressed[0] = current_input->input_state(current_input_data,
joypad_info,
binds,
0, pointer_device, 0, RETRO_DEVICE_ID_POINTER_PRESSED);
menu_input->pointer.pressed[1] = current_input->input_state(current_input_data, binds,
menu_input->pointer.pressed[1] = current_input->input_state(current_input_data,
joypad_info,
binds,
0, pointer_device, 1, RETRO_DEVICE_ID_POINTER_PRESSED);
menu_input->pointer.back = current_input->input_state(current_input_data, binds,
0, pointer_device, 0, RARCH_DEVICE_ID_POINTER_BACK);
menu_input->pointer.back = current_input->input_state(current_input_data,
joypad_info,
binds,
0, pointer_device, 0, RARCH_DEVICE_ID_POINTER_BACK);
menu_input->pointer.x = ((pointer_x + 0x7fff) * (int)fb_width) / 0xFFFF;
menu_input->pointer.y = ((pointer_y + 0x7fff) * (int)fb_height) / 0xFFFF;

View File

@ -358,8 +358,13 @@ int16_t menu_input_pointer_state(enum menu_input_pointer_state state)
int16_t menu_input_mouse_state(enum menu_input_mouse_state state)
{
unsigned type = 0;
unsigned device = RETRO_DEVICE_MOUSE;
rarch_joypad_info_t joypad_info;
unsigned type = 0;
unsigned device = RETRO_DEVICE_MOUSE;
joypad_info.joy_idx = 0;
joypad_info.auto_binds = NULL;
joypad_info.axis_threshold = 0.0f;
switch (state)
{
@ -391,8 +396,8 @@ int16_t menu_input_mouse_state(enum menu_input_mouse_state state)
break;
}
return current_input->input_state(current_input_data, NULL,
0, device, 0, type);
return current_input->input_state(current_input_data, joypad_info,
NULL, 0, device, 0, type);
}
static int menu_input_pointer_post_iterate(

View File

@ -209,6 +209,7 @@ static void menu_input_key_bind_poll_bind_state(
unsigned port,
bool timed_out)
{
rarch_joypad_info_t joypad_info;
const input_device_driver_t *joypad =
input_driver_get_joypad_driver();
const input_device_driver_t *sec_joypad =
@ -218,7 +219,13 @@ static void menu_input_key_bind_poll_bind_state(
return;
memset(state->state, 0, sizeof(state->state));
state->skip = timed_out || current_input->input_state(current_input_data, NULL,
joypad_info.joy_idx = 0;
joypad_info.auto_binds = NULL;
joypad_info.axis_threshold = 0.0f;
state->skip = timed_out || current_input->input_state(current_input_data, joypad_info,
NULL,
0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RETURN);
menu_input_key_bind_poll_bind_state_internal(