Allow winraw and xinput to work without dinput in Windows

Necessary for Windows ARM32 Desktop (RT)
This commit is contained in:
driver1998 2019-02-26 21:20:00 +08:00
parent 7ddb876330
commit 6ea79bca36
3 changed files with 18 additions and 1 deletions

View File

@ -238,6 +238,7 @@ enum input_driver_enum
INPUT_QNX, INPUT_QNX,
INPUT_RWEBINPUT, INPUT_RWEBINPUT,
INPUT_DOS, INPUT_DOS,
INPUT_WINRAW,
INPUT_NULL INPUT_NULL
}; };
@ -457,8 +458,10 @@ static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_ANDROID;
static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_SDL2; static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_SDL2;
#elif defined(EMSCRIPTEN) #elif defined(EMSCRIPTEN)
static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_RWEBINPUT; static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_RWEBINPUT;
#elif defined(_WIN32) #elif defined(_WIN32) && defined(HAVE_DINPUT)
static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_DINPUT; static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_DINPUT;
#elif defined(_WIN32) && !defined(HAVE_DINPUT) && _WIN32_WINNT >= 0x0501
static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_WINRAW;
#elif defined(ORBIS) #elif defined(ORBIS)
static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_PS4; static enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_PS4;
#elif defined(__CELLOS_LV2__) #elif defined(__CELLOS_LV2__)
@ -875,6 +878,8 @@ const char *config_get_default_input(void)
return "sdl2"; return "sdl2";
case INPUT_DINPUT: case INPUT_DINPUT:
return "dinput"; return "dinput";
case INPUT_WINRAW:
return "raw";
case INPUT_X: case INPUT_X:
return "x"; return "x";
case INPUT_WAYLAND: case INPUT_WAYLAND:

View File

@ -163,7 +163,9 @@ void d3d_input_driver(const char* input_name, const char* joypad_name, const inp
} }
#endif #endif
#ifdef HAVE_DINPUT
*input_data = input_dinput.init(joypad_name); *input_data = input_dinput.init(joypad_name);
*input = *input_data ? &input_dinput : NULL; *input = *input_data ? &input_dinput : NULL;
#endif #endif
#endif
} }

View File

@ -98,6 +98,12 @@ extern void *dinput_wgl;
extern void *dinput; extern void *dinput;
#endif #endif
#if defined(HAVE_XINPUT) && !defined(HAVE_DINPUT)
#ifndef MAX_PADS
#define MAX_PADS 4
#endif
#endif
typedef struct DISPLAYCONFIG_RATIONAL_CUSTOM { typedef struct DISPLAYCONFIG_RATIONAL_CUSTOM {
UINT32 Numerator; UINT32 Numerator;
UINT32 Denominator; UINT32 Denominator;
@ -601,6 +607,10 @@ static LRESULT win32_handle_keyboard_event(HWND hwnd, UINT message,
if (input_get_ptr() == &input_dinput && (lparam >> 24 & 0x1)) if (input_get_ptr() == &input_dinput && (lparam >> 24 & 0x1))
keysym |= 0x80; keysym |= 0x80;
} }
#else
{
/* fix key binding issues on winraw when DirectInput is not available */
}
#endif #endif
/* Key released? */ /* Key released? */
if (message == WM_KEYUP || message == WM_SYSKEYUP) if (message == WM_KEYUP || message == WM_SYSKEYUP)