support for mouse button binds in Windows input drivers
This commit is contained in:
parent
b267419551
commit
9682e2777b
|
@ -267,6 +267,49 @@ static bool dinput_keyboard_pressed(struct dinput_input *di, unsigned key)
|
|||
return di->state[sym] & 0x80;
|
||||
}
|
||||
|
||||
static bool dinput_mbutton_pressed(struct dinput_input *di, unsigned key)
|
||||
{
|
||||
bool result;
|
||||
|
||||
switch ( key )
|
||||
{
|
||||
|
||||
case RETRO_DEVICE_ID_MOUSE_LEFT:
|
||||
return di->mouse_l;
|
||||
case RETRO_DEVICE_ID_MOUSE_RIGHT:
|
||||
return di->mouse_r;
|
||||
case RETRO_DEVICE_ID_MOUSE_MIDDLE:
|
||||
return di->mouse_m;
|
||||
case RETRO_DEVICE_ID_MOUSE_BUTTON_4:
|
||||
return di->mouse_b4;
|
||||
case RETRO_DEVICE_ID_MOUSE_BUTTON_5:
|
||||
return di->mouse_b5;
|
||||
|
||||
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
|
||||
result = di->mouse_wu;
|
||||
di->mouse_wu = false;
|
||||
return result;
|
||||
|
||||
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
||||
result = di->mouse_wd;
|
||||
di->mouse_wd = false;
|
||||
return result;
|
||||
|
||||
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP:
|
||||
result = di->mouse_hwu;
|
||||
di->mouse_hwu = false;
|
||||
return result;
|
||||
|
||||
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN:
|
||||
result = di->mouse_hwd;
|
||||
di->mouse_hwd = false;
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool dinput_is_pressed(struct dinput_input *di,
|
||||
rarch_joypad_info_t joypad_info,
|
||||
const struct retro_keybind *binds,
|
||||
|
@ -276,8 +319,13 @@ static bool dinput_is_pressed(struct dinput_input *di,
|
|||
|
||||
if (!di->blocked && (bind->key < RETROK_LAST) && dinput_keyboard_pressed(di, bind->key))
|
||||
return true;
|
||||
if (binds && binds[id].valid && input_joypad_pressed(di->joypad, joypad_info, port, binds, id))
|
||||
if (binds && binds[id].valid)
|
||||
{
|
||||
if (dinput_mbutton_pressed(di, bind->mbutton))
|
||||
return true;
|
||||
if (input_joypad_pressed(di->joypad, joypad_info, port, binds, id))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -288,6 +288,50 @@ static int16_t winraw_mouse_state(winraw_input_t *wr,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool winraw_mbutton_pressed(winraw_input_t *wr, unsigned port, unsigned key)
|
||||
{
|
||||
unsigned i;
|
||||
bool result;
|
||||
winraw_mouse_t *mouse = NULL;
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
if (port >= MAX_USERS)
|
||||
return false;
|
||||
|
||||
for (i = 0; i < g_mouse_cnt; ++i)
|
||||
{
|
||||
if (i == settings->uints.input_mouse_index[port])
|
||||
{
|
||||
mouse = &wr->mice[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!mouse)
|
||||
return false;
|
||||
|
||||
switch ( key )
|
||||
{
|
||||
|
||||
case RETRO_DEVICE_ID_MOUSE_LEFT:
|
||||
return mouse->btn_l;
|
||||
case RETRO_DEVICE_ID_MOUSE_RIGHT:
|
||||
return mouse->btn_r;
|
||||
case RETRO_DEVICE_ID_MOUSE_MIDDLE:
|
||||
return mouse->btn_m;
|
||||
case RETRO_DEVICE_ID_MOUSE_BUTTON_4:
|
||||
return mouse->btn_b4;
|
||||
case RETRO_DEVICE_ID_MOUSE_BUTTON_5:
|
||||
return mouse->btn_b5;
|
||||
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
|
||||
return mouse->whl_u;
|
||||
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
||||
return mouse->whl_d;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int16_t winraw_joypad_state(winraw_input_t *wr,
|
||||
rarch_joypad_info_t joypad_info,
|
||||
const struct retro_keybind *binds,
|
||||
|
@ -299,6 +343,9 @@ static int16_t winraw_joypad_state(winraw_input_t *wr,
|
|||
if (!wr->kbd_mapp_block && (bind->key < RETROK_LAST) && wr->keyboard.keys[key])
|
||||
return 1;
|
||||
|
||||
if (binds && binds[id].valid && winraw_mbutton_pressed(wr, port, bind->mbutton))
|
||||
return 1;
|
||||
|
||||
return input_joypad_pressed(wr->joypad, joypad_info, port, binds, id);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue