Standardize pressed_analog functions
This commit is contained in:
parent
262e68be3b
commit
97319d4f98
|
@ -322,7 +322,8 @@ static bool dinput_mouse_button_pressed(
|
|||
return false;
|
||||
}
|
||||
|
||||
static int16_t dinput_pressed_analog(struct dinput_input *di,
|
||||
static int16_t dinput_pressed_analog(
|
||||
struct dinput_input *di,
|
||||
const struct retro_keybind *binds,
|
||||
unsigned idx, unsigned id)
|
||||
{
|
||||
|
@ -350,7 +351,7 @@ static int16_t dinput_pressed_analog(struct dinput_input *di,
|
|||
if (di->state[sym] & 0x80)
|
||||
ret = 0x7fff;
|
||||
}
|
||||
if (id_minus_key < RETROK_LAST)
|
||||
if (id_minus_valid && id_minus_key < RETROK_LAST)
|
||||
{
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)id_minus_key];
|
||||
if (di->state[sym] & 0x80)
|
||||
|
|
|
@ -75,33 +75,38 @@ static void *linuxraw_input_init(const char *joypad_driver)
|
|||
static int16_t linuxraw_analog_pressed(linuxraw_input_t *linuxraw,
|
||||
const struct retro_keybind *binds, unsigned idx, unsigned id)
|
||||
{
|
||||
const struct retro_keybind *bind_minus, *bind_plus;
|
||||
int16_t pressed_minus = 0, pressed_plus = 0;
|
||||
unsigned id_minus = 0;
|
||||
unsigned id_plus = 0;
|
||||
int id_minus_key = 0;
|
||||
int id_plus_key = 0;
|
||||
unsigned id_minus = 0;
|
||||
unsigned id_plus = 0;
|
||||
int16_t ret = 0;
|
||||
bool id_plus_valid = false;
|
||||
bool id_minus_valid = false;
|
||||
|
||||
input_conv_analog_id_to_bind_id(idx, id, id_minus, id_plus);
|
||||
|
||||
bind_minus = &binds[id_minus];
|
||||
bind_plus = &binds[id_plus];
|
||||
id_minus_valid = binds[id_minus].valid;
|
||||
id_plus_valid = binds[id_plus].valid;
|
||||
id_minus_key = binds[id_minus].key;
|
||||
id_plus_key = binds[id_plus].key;
|
||||
|
||||
if (!bind_minus->valid || !bind_plus->valid)
|
||||
if (!id_minus_valid || !id_plus_valid)
|
||||
return 0;
|
||||
|
||||
if (bind_minus->key < RETROK_LAST)
|
||||
if (id_plus_valid && id_plus_key < RETROK_LAST)
|
||||
{
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)bind_minus->key];
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)id_plus_key];
|
||||
if (linuxraw->state[sym] & 0x80)
|
||||
pressed_minus = -0x7fff;
|
||||
ret = 0x7fff;
|
||||
}
|
||||
if (bind_plus->key < RETROK_LAST)
|
||||
if (id_minus_valid && id_minus_key < RETROK_LAST)
|
||||
{
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)bind_minus->key];
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)id_minus_key];
|
||||
if (linuxraw->state[sym] & 0x80)
|
||||
pressed_plus = 0x7fff;
|
||||
ret += -0x7fff;
|
||||
}
|
||||
|
||||
return pressed_plus + pressed_minus;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int16_t linuxraw_input_state(
|
||||
|
|
|
@ -503,26 +503,38 @@ static int16_t rwebinput_analog_pressed(
|
|||
const struct retro_keybind *binds,
|
||||
unsigned idx, unsigned id)
|
||||
{
|
||||
int16_t pressed_minus = 0, pressed_plus = 0;
|
||||
unsigned id_minus = 0;
|
||||
unsigned id_plus = 0;
|
||||
int id_minus_key = 0;
|
||||
int id_plus_key = 0;
|
||||
unsigned id_minus = 0;
|
||||
unsigned id_plus = 0;
|
||||
int16_t ret = 0;
|
||||
bool id_plus_valid = false;
|
||||
bool id_minus_valid = false;
|
||||
|
||||
input_conv_analog_id_to_bind_id(idx, id, id_minus, id_plus);
|
||||
|
||||
if (id < RARCH_BIND_LIST_END)
|
||||
id_minus_valid = binds[id_minus].valid;
|
||||
id_plus_valid = binds[id_plus].valid;
|
||||
id_minus_key = binds[id_minus].key;
|
||||
id_plus_key = binds[id_plus].key;
|
||||
|
||||
if (!id_minus_valid || !id_plus_valid)
|
||||
return 0;
|
||||
|
||||
if (id_plus_valid && id_plus_key < RETROK_LAST)
|
||||
{
|
||||
if (binds[id].valid)
|
||||
{
|
||||
if (rwebinput_is_pressed(rwebinput,
|
||||
joypad, joypad_info, binds, idx, id_minus))
|
||||
pressed_minus = -0x7fff;
|
||||
if (rwebinput_is_pressed(rwebinput,
|
||||
joypad, joypad_info, binds, idx, id_plus))
|
||||
pressed_plus = 0x7fff;
|
||||
}
|
||||
if (rwebinput_is_pressed(rwebinput,
|
||||
joypad, joypad_info, binds, idx, id_plus))
|
||||
ret = 0x7fff;
|
||||
}
|
||||
if (id_minus_valid && id_minus_key < RETROK_LAST)
|
||||
{
|
||||
if (rwebinput_is_pressed(rwebinput,
|
||||
joypad, joypad_info, binds, idx, id_minus))
|
||||
ret += -0x7fff;
|
||||
}
|
||||
|
||||
return pressed_plus + pressed_minus;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int16_t rwebinput_input_state(
|
||||
|
|
|
@ -79,22 +79,43 @@ static bool sdl_key_pressed(int key)
|
|||
return keymap[sym];
|
||||
}
|
||||
|
||||
static int16_t sdl_analog_pressed(sdl_input_t *sdl,
|
||||
static int16_t sdl_analog_pressed(
|
||||
sdl_input_t *sdl,
|
||||
const struct retro_keybind *binds,
|
||||
unsigned idx, unsigned id)
|
||||
{
|
||||
int16_t pressed_minus = 0, pressed_plus = 0;
|
||||
unsigned id_minus = 0;
|
||||
unsigned id_plus = 0;
|
||||
int id_minus_key = 0;
|
||||
int id_plus_key = 0;
|
||||
unsigned id_minus = 0;
|
||||
unsigned id_plus = 0;
|
||||
int16_t ret = 0;
|
||||
bool id_plus_valid = false;
|
||||
bool id_minus_valid = false;
|
||||
|
||||
input_conv_analog_id_to_bind_id(idx, id, id_minus, id_plus);
|
||||
|
||||
if ((binds[id_minus].key < RETROK_LAST) && sdl_key_pressed(binds[id_minus].key))
|
||||
pressed_minus = -0x7fff;
|
||||
if ((binds[id_plus].key < RETROK_LAST) && sdl_key_pressed(binds[id_plus].key))
|
||||
pressed_plus = 0x7fff;
|
||||
id_minus_valid = binds[id_minus].valid;
|
||||
id_plus_valid = binds[id_plus].valid;
|
||||
id_minus_key = binds[id_minus].key;
|
||||
id_plus_key = binds[id_plus].key;
|
||||
|
||||
return pressed_plus + pressed_minus;
|
||||
if (!id_minus_valid || !id_plus_valid)
|
||||
return 0;
|
||||
|
||||
if (id_plus_valid && id_plus_key < RETROK_LAST)
|
||||
{
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)id_plus_key];
|
||||
if (sdl_key_pressed(sym))
|
||||
ret = 0x7fff;
|
||||
}
|
||||
if (id_minus_valid && id_minus_key < RETROK_LAST)
|
||||
{
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)id_minus_key];
|
||||
if (sdl_key_pressed(sym))
|
||||
ret += -0x7fff;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int16_t sdl_mouse_device_state(sdl_input_t *sdl, unsigned id)
|
||||
|
|
|
@ -932,27 +932,43 @@ static bool udev_mouse_button_pressed(
|
|||
return false;
|
||||
}
|
||||
|
||||
static int16_t udev_analog_pressed(udev_input_t *udev,
|
||||
static int16_t udev_analog_pressed(
|
||||
udev_input_t *udev,
|
||||
const struct retro_keybind *binds,
|
||||
unsigned idx, unsigned id)
|
||||
{
|
||||
int id_minus_key = 0;
|
||||
int id_plus_key = 0;
|
||||
unsigned id_minus = 0;
|
||||
unsigned id_plus = 0;
|
||||
int16_t pressed_minus = 0;
|
||||
int16_t pressed_plus = 0;
|
||||
int16_t ret = 0;
|
||||
bool id_plus_valid = false;
|
||||
bool id_minus_valid = false;
|
||||
|
||||
input_conv_analog_id_to_bind_id(idx, id, id_minus, id_plus);
|
||||
|
||||
if ( binds[id_minus].valid
|
||||
&& BIT_GET(udev->state,
|
||||
rarch_keysym_lut[binds[id_minus].key]))
|
||||
pressed_minus = -0x7fff;
|
||||
if ( binds[id_plus].valid
|
||||
&& BIT_GET(udev->state,
|
||||
rarch_keysym_lut[binds[id_plus].key]))
|
||||
pressed_plus = 0x7fff;
|
||||
id_minus_valid = binds[id_minus].valid;
|
||||
id_plus_valid = binds[id_plus].valid;
|
||||
id_minus_key = binds[id_minus].key;
|
||||
id_plus_key = binds[id_plus].key;
|
||||
|
||||
return pressed_plus + pressed_minus;
|
||||
if (!id_minus_valid || !id_plus_valid)
|
||||
return 0;
|
||||
|
||||
if (id_plus_valid && id_plus_key < RETROK_LAST)
|
||||
{
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)id_plus_key];
|
||||
if BIT_GET(udev->state, sym)
|
||||
ret = 0x7fff;
|
||||
}
|
||||
if (id_minus_valid && id_minus_key < RETROK_LAST)
|
||||
{
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)id_minus_key];
|
||||
if (BIT_GET(udev->state, sym))
|
||||
ret += -0x7fff;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int16_t udev_pointer_state(udev_input_t *udev,
|
||||
|
|
|
@ -89,27 +89,36 @@ static int16_t uwp_pressed_analog(uwp_input_t *uwp,
|
|||
const struct retro_keybind *binds,
|
||||
unsigned port, unsigned idx, unsigned id)
|
||||
{
|
||||
const struct retro_keybind *bind_minus, *bind_plus;
|
||||
int16_t pressed_minus = 0, pressed_plus = 0;
|
||||
unsigned id_minus = 0, id_plus = 0;
|
||||
int id_minus_key = 0;
|
||||
int id_plus_key = 0;
|
||||
unsigned id_minus = 0;
|
||||
unsigned id_plus = 0;
|
||||
int16_t ret = 0;
|
||||
bool id_plus_valid = false;
|
||||
bool id_minus_valid = false;
|
||||
|
||||
/* First, process the keyboard bindings */
|
||||
input_conv_analog_id_to_bind_id(idx, id, id_minus, id_plus);
|
||||
|
||||
bind_minus = &binds[id_minus];
|
||||
bind_plus = &binds[id_plus];
|
||||
id_minus_valid = binds[id_minus].valid;
|
||||
id_plus_valid = binds[id_plus].valid;
|
||||
id_minus_key = binds[id_minus].key;
|
||||
id_plus_key = binds[id_plus].key;
|
||||
|
||||
if (!bind_minus->valid || !bind_plus->valid)
|
||||
if (!id_minus_valid || !id_plus_valid)
|
||||
return 0;
|
||||
|
||||
if ((bind_minus->key < RETROK_LAST)
|
||||
&& uwp_keyboard_pressed(bind_minus->key))
|
||||
pressed_minus = -0x7fff;
|
||||
if ((bind_plus->key < RETROK_LAST)
|
||||
&& uwp_keyboard_pressed(bind_plus->key))
|
||||
pressed_plus = 0x7fff;
|
||||
if (id_plus_valid && id_plus_key < RETROK_LAST)
|
||||
{
|
||||
if (uwp_keyboard_pressed(bind_plus_key))
|
||||
ret = 0x7fff;
|
||||
}
|
||||
if (id_minus_valid && id_minus_key < RETROK_LAST)
|
||||
{
|
||||
if (uwp_keyboard_pressed(bind_minus_key))
|
||||
ret += -0x7fff;
|
||||
}
|
||||
|
||||
return pressed_plus + pressed_minus;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int16_t uwp_input_state(
|
||||
|
|
|
@ -154,31 +154,41 @@ static void input_wl_poll(void *data)
|
|||
input_wl_touch_pool(wl);
|
||||
}
|
||||
|
||||
static int16_t input_wl_analog_pressed(input_ctx_wayland_data_t *wl,
|
||||
static int16_t input_wl_analog_pressed(
|
||||
input_ctx_wayland_data_t *wl,
|
||||
const struct retro_keybind *binds,
|
||||
unsigned idx, unsigned id)
|
||||
{
|
||||
int id_minus_key = 0;
|
||||
int id_plus_key = 0;
|
||||
unsigned id_minus = 0;
|
||||
unsigned id_plus = 0;
|
||||
int16_t pressed_minus = 0;
|
||||
int16_t pressed_plus = 0;
|
||||
int16_t ret = 0;
|
||||
bool id_plus_valid = false;
|
||||
bool id_minus_valid = false;
|
||||
|
||||
input_conv_analog_id_to_bind_id(idx, id, id_minus, id_plus);
|
||||
|
||||
if (binds
|
||||
&& binds[id_minus].valid
|
||||
&& (id_minus < RARCH_BIND_LIST_END)
|
||||
&& BIT_GET(wl->key_state, rarch_keysym_lut[binds[id_minus].key])
|
||||
)
|
||||
pressed_minus = -0x7fff;
|
||||
if (binds
|
||||
&& binds[id_plus].valid
|
||||
&& (id_plus < RARCH_BIND_LIST_END)
|
||||
&& BIT_GET(wl->key_state, rarch_keysym_lut[binds[id_plus].key])
|
||||
)
|
||||
pressed_plus = 0x7fff;
|
||||
id_minus_valid = binds[id_minus].valid;
|
||||
id_plus_valid = binds[id_plus].valid;
|
||||
id_minus_key = binds[id_minus].key;
|
||||
id_plus_key = binds[id_plus].key;
|
||||
|
||||
return pressed_plus + pressed_minus;
|
||||
if (!id_minus_valid || !id_plus_valid)
|
||||
return 0;
|
||||
|
||||
if (id_plus_valid && id_plus_key < RETROK_LAST)
|
||||
{
|
||||
if (BIT_GET(wl->key_state, rarch_keysym_lut[(enum retro_key)id_plus_key]))
|
||||
ret = 0x7fff;
|
||||
}
|
||||
if (id_minus_valid && id_minus_key < RETROK_LAST)
|
||||
{
|
||||
if (BIT_GET(wl->key_state, rarch_keysym_lut[(enum retro_key)id_minus_key]))
|
||||
ret += -0x7fff;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool input_wl_state_kb(input_ctx_wayland_data_t *wl,
|
||||
|
|
Loading…
Reference in New Issue