mirror of
https://github.com/libretro/RetroArch
synced 2025-02-21 00:40:09 +00:00
(Dinput) Turn boolean variables into flags
This commit is contained in:
parent
27dbf06dfb
commit
92a2c0f71a
@ -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 */
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user