(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> #include <ole2.h>
#endif #endif
#ifndef SM_SERVERR2
#define SM_SERVERR2 89
#endif
enum platform_win32_flags enum platform_win32_flags
{ {
PLAT_WIN32_FLAG_USE_POWERSHELL = (1 << 0), PLAT_WIN32_FLAG_USE_POWERSHELL = (1 << 0),
@ -79,13 +83,9 @@ enum platform_win32_flags
static ISpVoice* pVoice = NULL; static ISpVoice* pVoice = NULL;
#endif #endif
#ifdef HAVE_NVDA #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 #else
uint8_t g_plat_win32_flags = PLAT_WIN32_FLAG_USE_POWERSHELL; static uint8_t g_plat_win32_flags = PLAT_WIN32_FLAG_USE_POWERSHELL;
#endif
#ifndef SM_SERVERR2
#define SM_SERVERR2 89
#endif #endif
/* static public global variable */ /* static public global variable */

View File

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