Standardize x_pressed_analog

This commit is contained in:
twinaphex 2020-08-30 15:52:58 +02:00
parent 1a567dfbc9
commit 262e68be3b
2 changed files with 27 additions and 18 deletions

View File

@ -344,7 +344,7 @@ static int16_t dinput_pressed_analog(struct dinput_input *di,
if (!id_minus_valid || !id_plus_valid)
return 0;
if (id_plus_key < RETROK_LAST)
if (id_plus_valid && id_plus_key < RETROK_LAST)
{
unsigned sym = rarch_keysym_lut[(enum retro_key)id_plus_key];
if (di->state[sym] & 0x80)

View File

@ -39,7 +39,7 @@ typedef struct x11_input
int mouse_x, mouse_y;
int mouse_last_x, mouse_last_y;
char state[32];
uint8_t state[32];
bool mouse_l, mouse_r, mouse_m;
bool grab_mouse;
} x11_input_t;
@ -105,32 +105,41 @@ static bool x_mouse_button_pressed(
static int16_t x_pressed_analog(x11_input_t *x11,
const struct retro_keybind *binds, unsigned idx, unsigned id)
{
int16_t pressed_minus = 0;
int16_t pressed_plus = 0;
unsigned id_minus = 0;
unsigned id_plus = 0;
int id_minus_key = 0;
int id_plus_key = 0;
unsigned keycode = 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);
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;
keycode = rarch_keysym_lut[(enum retro_key)id_minus_key];
if ( binds[id_minus].valid
&& (id_minus_key < RETROK_LAST)
&& (x11->state[keycode >> 3] & (1 << (keycode & 7))))
pressed_minus = -0x7fff;
if (!id_minus_valid || !id_plus_valid)
return 0;
keycode = rarch_keysym_lut[(enum retro_key)id_plus_key];
if ( binds[id_plus].valid
&& (id_plus_key < RETROK_LAST)
&& (x11->state[keycode >> 3] & (1 << (keycode & 7))))
pressed_plus = 0x7fff;
if (id_plus_valid && id_plus_key < RETROK_LAST)
{
unsigned sym = rarch_keysym_lut[(enum retro_key)id_plus_key];
if (x11->state[sym >> 3] & (1 << (sym & 7)))
ret = 0x7fff;
}
return pressed_plus + pressed_minus;
if (id_minus_valid && id_minus_key < RETROK_LAST)
{
unsigned sym = rarch_keysym_lut[(enum retro_key)id_minus_key];
if (x11->state[sym >> 3] & (1 << (sym & 7)))
ret += -0x7fff;
}
return ret;
}
static int16_t x_lightgun_aiming_state(