(Dinput) Turn boolean variables into flags

This commit is contained in:
LibretroAdmin 2022-10-26 19:22:35 +02:00
parent 27dbf06dfb
commit 92a2c0f71a
2 changed files with 109 additions and 72 deletions

View File

@ -65,6 +65,10 @@
#include <ole2.h>
#endif
#ifndef SM_SERVERR2
#define SM_SERVERR2 89
#endif
enum platform_win32_flags
{
PLAT_WIN32_FLAG_USE_POWERSHELL = (1 << 0),
@ -76,16 +80,12 @@ enum platform_win32_flags
};
#ifdef HAVE_SAPI
static ISpVoice* pVoice = NULL;
static ISpVoice* pVoice = NULL;
#endif
#ifdef HAVE_NVDA
uint8_t g_plat_win32_flags = PLAT_WIN32_FLAG_USE_NVDA;
static uint8_t g_plat_win32_flags = PLAT_WIN32_FLAG_USE_NVDA;
#else
uint8_t g_plat_win32_flags = PLAT_WIN32_FLAG_USE_POWERSHELL;
#endif
#ifndef SM_SERVERR2
#define SM_SERVERR2 89
static uint8_t g_plat_win32_flags = PLAT_WIN32_FLAG_USE_POWERSHELL;
#endif
/* static public global variable */

View File

@ -66,24 +66,38 @@ struct dinput_pointer_status
int pointer_y;
};
enum dinput_input_flags
{
DINP_FLAG_SHIFT_L = (1 << 0),
DINP_FLAG_SHIFT_R = (1 << 1),
DINP_FLAG_ALT_L = (1 << 2),
DINP_FLAG_DBCLK_ON_TITLEBAR = (1 << 3),
DINP_FLAG_MOUSE_L_BTN = (1 << 4),
DINP_FLAG_MOUSE_R_BTN = (1 << 5),
DINP_FLAG_MOUSE_M_BTN = (1 << 6),
DINP_FLAG_MOUSE_B4_BTN = (1 << 7),
DINP_FLAG_MOUSE_B5_BTN = (1 << 8),
DINP_FLAG_MOUSE_WU_BTN = (1 << 9),
DINP_FLAG_MOUSE_WD_BTN = (1 << 10),
DINP_FLAG_MOUSE_HWU_BTN = (1 << 11),
DINP_FLAG_MOUSE_HWD_BTN = (1 << 12)
};
struct dinput_input
{
char *joypad_driver_name;
LPDIRECTINPUTDEVICE8 keyboard;
LPDIRECTINPUTDEVICE8 mouse;
const input_device_driver_t *joypad;
struct dinput_pointer_status pointer_head; /* dummy head for easier iteration */
struct dinput_pointer_status pointer_head; /* dummy head for easy iteration */
int window_pos_x;
int window_pos_y;
int mouse_rel_x;
int mouse_rel_y;
int mouse_x;
int mouse_y;
uint16_t flags;
uint8_t state[256];
bool shift_l, shift_r, alt_l;
bool doubleclick_on_titlebar;
bool mouse_l, mouse_r, mouse_m, mouse_b4, mouse_b5, mouse_wu, mouse_wd, mouse_hwu, mouse_hwd;
};
void dinput_destroy_context(void)
@ -159,13 +173,10 @@ static void *dinput_init(const char *joypad_driver)
if (di->keyboard)
{
DWORD flags;
settings_t *settings;
settings = config_get_ptr();
flags = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND;
settings_t *settings = config_get_ptr();
DWORD flags = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND;
if (settings->bools.input_nowinkey_enable)
flags |= DISCL_NOWINKEY;
flags |= DISCL_NOWINKEY;
IDirectInputDevice8_SetDataFormat(di->keyboard, &c_dfDIKeyboard);
IDirectInputDevice8_SetCooperativeLevel(di->keyboard,
@ -199,20 +210,26 @@ static void dinput_keyboard_mods(struct dinput_input *di, int mod)
unsigned vk_shift_l = GetAsyncKeyState(VK_LSHIFT) >> 1;
unsigned vk_shift_r = GetAsyncKeyState(VK_RSHIFT) >> 1;
if ( (vk_shift_l && !di->shift_l) ||
(!vk_shift_l && di->shift_l))
if ( ( vk_shift_l && (!(di->flags & DINP_FLAG_SHIFT_L)))
|| (!vk_shift_l && (di->flags & DINP_FLAG_SHIFT_L)))
{
input_keyboard_event(vk_shift_l, RETROK_LSHIFT,
0, RETROKMOD_SHIFT, RETRO_DEVICE_KEYBOARD);
di->shift_l = !di->shift_l;
if (di->flags & DINP_FLAG_SHIFT_L)
di->flags &= ~DINP_FLAG_SHIFT_L;
else
di->flags |= DINP_FLAG_SHIFT_L;
}
if ( (vk_shift_r && !di->shift_r) ||
(!vk_shift_r && di->shift_r))
if ( ( vk_shift_r && (!(di->flags & DINP_FLAG_SHIFT_R)))
|| (!vk_shift_r && (di->flags & DINP_FLAG_SHIFT_R)))
{
input_keyboard_event(vk_shift_r, RETROK_RSHIFT,
0, RETROKMOD_SHIFT, RETRO_DEVICE_KEYBOARD);
di->shift_r = !di->shift_r;
if (di->flags & DINP_FLAG_SHIFT_R)
di->flags &= ~DINP_FLAG_SHIFT_R;
else
di->flags |= DINP_FLAG_SHIFT_R;
}
}
break;
@ -221,13 +238,21 @@ static void dinput_keyboard_mods(struct dinput_input *di, int mod)
{
unsigned vk_alt_l = GetAsyncKeyState(VK_LMENU) >> 1;
if (vk_alt_l && !di->alt_l)
di->alt_l = !di->alt_l;
else if (!vk_alt_l && di->alt_l)
if (vk_alt_l && (!(di->flags & DINP_FLAG_ALT_L)))
{
if (di->flags & DINP_FLAG_ALT_L)
di->flags &= ~DINP_FLAG_ALT_L;
else
di->flags |= DINP_FLAG_ALT_L;
}
else if (!vk_alt_l && (di->flags & DINP_FLAG_ALT_L))
{
input_keyboard_event(vk_alt_l, RETROK_LALT,
0, RETROKMOD_ALT, RETRO_DEVICE_KEYBOARD);
di->alt_l = !di->alt_l;
if (di->flags & DINP_FLAG_ALT_L)
di->flags &= ~DINP_FLAG_ALT_L;
else
di->flags |= DINP_FLAG_ALT_L;
}
}
break;
@ -316,15 +341,31 @@ static void dinput_poll(void *data)
di->mouse_rel_y = mouse_state.lY;
if (!mouse_state.rgbButtons[0])
di->doubleclick_on_titlebar = false;
if (di->doubleclick_on_titlebar)
di->mouse_l = 0;
di->flags &= ~DINP_FLAG_DBCLK_ON_TITLEBAR;
if (di->flags & DINP_FLAG_DBCLK_ON_TITLEBAR)
di->flags &= ~DINP_FLAG_MOUSE_L_BTN;
else
di->mouse_l = mouse_state.rgbButtons[0];
di->mouse_r = mouse_state.rgbButtons[1];
di->mouse_m = mouse_state.rgbButtons[2];
di->mouse_b4 = mouse_state.rgbButtons[3];
di->mouse_b5 = mouse_state.rgbButtons[4];
{
if (mouse_state.rgbButtons[0])
di->flags |= DINP_FLAG_MOUSE_L_BTN;
}
if (mouse_state.rgbButtons[1])
di->flags |= DINP_FLAG_MOUSE_R_BTN;
else
di->flags &= ~DINP_FLAG_MOUSE_R_BTN;
if (mouse_state.rgbButtons[2])
di->flags |= DINP_FLAG_MOUSE_M_BTN;
else
di->flags &= ~DINP_FLAG_MOUSE_M_BTN;
if (mouse_state.rgbButtons[3])
di->flags |= DINP_FLAG_MOUSE_B4_BTN;
else
di->flags &= ~DINP_FLAG_MOUSE_B4_BTN;
if (mouse_state.rgbButtons[4])
di->flags |= DINP_FLAG_MOUSE_B5_BTN;
else
di->flags &= ~DINP_FLAG_MOUSE_B5_BTN;
/* No simple way to get absolute coordinates
* for RETRO_DEVICE_POINTER. Just use Win32 APIs. */
@ -343,34 +384,30 @@ static bool dinput_mouse_button_pressed(
switch (key)
{
case RETRO_DEVICE_ID_MOUSE_LEFT:
return di->mouse_l;
return (di->flags & DINP_FLAG_MOUSE_L_BTN);
case RETRO_DEVICE_ID_MOUSE_RIGHT:
return di->mouse_r;
return (di->flags & DINP_FLAG_MOUSE_R_BTN);
case RETRO_DEVICE_ID_MOUSE_MIDDLE:
return di->mouse_m;
return (di->flags & DINP_FLAG_MOUSE_M_BTN);
case RETRO_DEVICE_ID_MOUSE_BUTTON_4:
return di->mouse_b4;
return (di->flags & DINP_FLAG_MOUSE_B4_BTN);
case RETRO_DEVICE_ID_MOUSE_BUTTON_5:
return di->mouse_b5;
return (di->flags & DINP_FLAG_MOUSE_B5_BTN);
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
result = di->mouse_wu;
di->mouse_wu = false;
result = di->flags & DINP_FLAG_MOUSE_WU_BTN;
di->flags &= ~DINP_FLAG_MOUSE_WU_BTN;
return result;
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
result = di->mouse_wd;
di->mouse_wd = false;
result = di->flags & DINP_FLAG_MOUSE_WD_BTN;
di->flags &= ~DINP_FLAG_MOUSE_WD_BTN;
return result;
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP:
result = di->mouse_hwu;
di->mouse_hwu = false;
result = di->flags & DINP_FLAG_MOUSE_HWU_BTN;
di->flags &= ~DINP_FLAG_MOUSE_HWU_BTN;
return result;
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN:
result = di->mouse_hwd;
di->mouse_hwd = false;
result = di->flags & DINP_FLAG_MOUSE_HWD_BTN;
di->flags &= ~DINP_FLAG_MOUSE_HWD_BTN;
return result;
}
@ -625,35 +662,35 @@ static int16_t dinput_input_state(
case RETRO_DEVICE_ID_MOUSE_Y:
return di->mouse_rel_y;
case RETRO_DEVICE_ID_MOUSE_LEFT:
return di->mouse_l;
return (di->flags & DINP_FLAG_MOUSE_L_BTN);
case RETRO_DEVICE_ID_MOUSE_RIGHT:
return di->mouse_r;
return (di->flags & DINP_FLAG_MOUSE_R_BTN);
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
if (di->mouse_wu)
if (di->flags & DINP_FLAG_MOUSE_WU_BTN)
state = 1;
di->mouse_wu = false;
di->flags &= ~DINP_FLAG_MOUSE_WU_BTN;
return state;
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
if (di->mouse_wd)
if (di->flags & DINP_FLAG_MOUSE_WD_BTN)
state = 1;
di->mouse_wd = false;
di->flags &= ~DINP_FLAG_MOUSE_WD_BTN;
return state;
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP:
if (di->mouse_hwu)
if (di->flags & DINP_FLAG_MOUSE_HWU_BTN)
state = 1;
di->mouse_hwu = false;
di->flags &= ~DINP_FLAG_MOUSE_HWU_BTN;
return state;
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN:
if (di->mouse_hwd)
if (di->flags & DINP_FLAG_MOUSE_HWD_BTN)
state = 1;
di->mouse_hwd = false;
di->flags &= ~DINP_FLAG_MOUSE_HWD_BTN;
return state;
case RETRO_DEVICE_ID_MOUSE_MIDDLE:
return di->mouse_m;
return (di->flags & DINP_FLAG_MOUSE_M_BTN);
case RETRO_DEVICE_ID_MOUSE_BUTTON_4:
return di->mouse_b4;
return (di->flags & DINP_FLAG_MOUSE_B4_BTN);
case RETRO_DEVICE_ID_MOUSE_BUTTON_5:
return di->mouse_b5;
return (di->flags & DINP_FLAG_MOUSE_B5_BTN);
}
}
break;
@ -690,7 +727,7 @@ static int16_t dinput_input_state(
x = di->mouse_x;
y = di->mouse_y;
pointer_down = di->mouse_l;
pointer_down = di->flags & DINP_FLAG_MOUSE_L_BTN;
if (check_pos)
{
@ -903,7 +940,7 @@ bool dinput_handle_message(void *data,
switch (message)
{
case WM_NCLBUTTONDBLCLK:
di->doubleclick_on_titlebar = true;
di->flags |= DINP_FLAG_DBCLK_ON_TITLEBAR;
break;
case WM_MOUSEMOVE:
di->window_pos_x = GET_X_LPARAM(lParam);
@ -958,15 +995,15 @@ bool dinput_handle_message(void *data,
break;
case WM_MOUSEWHEEL:
if (((short) HIWORD(wParam))/120 > 0)
di->mouse_wu = true;
di->flags |= DINP_FLAG_MOUSE_WU_BTN;
if (((short) HIWORD(wParam))/120 < 0)
di->mouse_wd = true;
di->flags |= DINP_FLAG_MOUSE_WD_BTN;
break;
case WM_MOUSEHWHEEL:
if (((short) HIWORD(wParam))/120 > 0)
di->mouse_hwu = true;
di->flags |= DINP_FLAG_MOUSE_HWU_BTN;
if (((short) HIWORD(wParam))/120 < 0)
di->mouse_hwd = true;
di->flags |= DINP_FLAG_MOUSE_HWD_BTN;
break;
}