|
|
@ -23,7 +23,7 @@ |
|
|
|
#include "keydefs.h" |
|
|
|
#include "keydefs.h" |
|
|
|
#include "view.h" |
|
|
|
#include "view.h" |
|
|
|
|
|
|
|
|
|
|
|
#ifndef _WIN32 |
|
|
|
#if !_WIN32 |
|
|
|
#define USE_SDL2 |
|
|
|
#define USE_SDL2 |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
@ -114,7 +114,7 @@ static SDLFunction sdlFunctions[] = { |
|
|
|
}; |
|
|
|
}; |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
#include <process.h> |
|
|
|
#include <process.h> |
|
|
|
#else |
|
|
|
#else |
|
|
|
typedef unsigned int DWORD; |
|
|
|
typedef unsigned int DWORD; |
|
|
@ -151,14 +151,14 @@ extern cvar_t *cl_forwardspeed; |
|
|
|
extern cvar_t *cl_pitchspeed; |
|
|
|
extern cvar_t *cl_pitchspeed; |
|
|
|
extern cvar_t *cl_movespeedkey; |
|
|
|
extern cvar_t *cl_movespeedkey; |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
static double s_flRawInputUpdateTime = 0.0f; |
|
|
|
static double s_flRawInputUpdateTime = 0.0f; |
|
|
|
static bool m_bRawInput = false; |
|
|
|
static bool m_bRawInput = false; |
|
|
|
static bool m_bMouseThread = false; |
|
|
|
static bool m_bMouseThread = false; |
|
|
|
bool isMouseRelative = false; |
|
|
|
bool isMouseRelative = false; |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
#include "progdefs.h" |
|
|
|
#include "progdefs.h" |
|
|
|
extern globalvars_t *gpGlobals; |
|
|
|
extern globalvars_t *gpGlobals; |
|
|
|
#endif |
|
|
|
#endif |
|
|
@ -186,7 +186,7 @@ static cvar_t *m_customaccel_max; |
|
|
|
//Mouse move is raised to this power before being scaled by scale factor
|
|
|
|
//Mouse move is raised to this power before being scaled by scale factor
|
|
|
|
static cvar_t *m_customaccel_exponent; |
|
|
|
static cvar_t *m_customaccel_exponent; |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
// if threaded mouse is enabled then the time to sleep between polls
|
|
|
|
// if threaded mouse is enabled then the time to sleep between polls
|
|
|
|
static cvar_t *m_mousethread_sleep; |
|
|
|
static cvar_t *m_mousethread_sleep; |
|
|
|
#endif |
|
|
|
#endif |
|
|
@ -278,7 +278,7 @@ cvar_t *joy_wwhack2; |
|
|
|
|
|
|
|
|
|
|
|
int joy_avail, joy_advancedinit, joy_haspov; |
|
|
|
int joy_avail, joy_advancedinit, joy_haspov; |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
unsigned int s_hMouseThreadId = 0; |
|
|
|
unsigned int s_hMouseThreadId = 0; |
|
|
|
HANDLE s_hMouseThread = 0; |
|
|
|
HANDLE s_hMouseThread = 0; |
|
|
|
HANDLE s_hMouseQuitEvent = 0; |
|
|
|
HANDLE s_hMouseQuitEvent = 0; |
|
|
@ -302,7 +302,7 @@ void Force_CenterView_f (void) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
|
|
|
|
|
|
|
|
LONG mouseThreadActive = 0; |
|
|
|
LONG mouseThreadActive = 0; |
|
|
|
LONG mouseThreadCenterX = 0; |
|
|
|
LONG mouseThreadCenterX = 0; |
|
|
@ -384,14 +384,14 @@ void IN_SetMouseMode(bool enable) |
|
|
|
|
|
|
|
|
|
|
|
if(enable) |
|
|
|
if(enable) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
if (mouseparmsvalid) |
|
|
|
if (mouseparmsvalid) |
|
|
|
restore_spi = SystemParametersInfo (SPI_SETMOUSE, 0, newmouseparms, 0); |
|
|
|
restore_spi = SystemParametersInfo (SPI_SETMOUSE, 0, newmouseparms, 0); |
|
|
|
|
|
|
|
|
|
|
|
m_bRawInput = CVAR_GET_FLOAT( "m_rawinput" ) != 0; |
|
|
|
m_bRawInput = CVAR_GET_FLOAT( "m_rawinput" ) != 0; |
|
|
|
if(m_bRawInput) |
|
|
|
if(m_bRawInput) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef USE_SDL2 |
|
|
|
#if USE_SDL2 |
|
|
|
safe_pfnSDL_SetRelativeMouseMode(SDL_TRUE); |
|
|
|
safe_pfnSDL_SetRelativeMouseMode(SDL_TRUE); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
isMouseRelative = true; |
|
|
|
isMouseRelative = true; |
|
|
@ -404,10 +404,10 @@ void IN_SetMouseMode(bool enable) |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
if(isMouseRelative) |
|
|
|
if(isMouseRelative) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef USE_SDL2 |
|
|
|
#if USE_SDL2 |
|
|
|
safe_pfnSDL_SetRelativeMouseMode(SDL_FALSE); |
|
|
|
safe_pfnSDL_SetRelativeMouseMode(SDL_FALSE); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
isMouseRelative = false; |
|
|
|
isMouseRelative = false; |
|
|
@ -425,7 +425,7 @@ void IN_SetMouseMode(bool enable) |
|
|
|
|
|
|
|
|
|
|
|
void IN_SetVisibleMouse(bool visible) |
|
|
|
void IN_SetVisibleMouse(bool visible) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
bool lockEntered = MouseThread_ActiveLock_Enter(); |
|
|
|
bool lockEntered = MouseThread_ActiveLock_Enter(); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
@ -433,7 +433,7 @@ void IN_SetVisibleMouse(bool visible) |
|
|
|
|
|
|
|
|
|
|
|
IN_SetMouseMode(!visible); |
|
|
|
IN_SetMouseMode(!visible); |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
UpdateMouseThreadActive(); |
|
|
|
UpdateMouseThreadActive(); |
|
|
|
if(lockEntered) MouseThread_ActiveLock_Exit(); |
|
|
|
if(lockEntered) MouseThread_ActiveLock_Exit(); |
|
|
|
#endif |
|
|
|
#endif |
|
|
@ -450,7 +450,7 @@ void GoldSourceInput::IN_ActivateMouse (void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (mouseinitialized) |
|
|
|
if (mouseinitialized) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
bool lockEntered = MouseThread_ActiveLock_Enter(); |
|
|
|
bool lockEntered = MouseThread_ActiveLock_Enter(); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
@ -458,7 +458,7 @@ void GoldSourceInput::IN_ActivateMouse (void) |
|
|
|
|
|
|
|
|
|
|
|
mouseactive = 1; |
|
|
|
mouseactive = 1; |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
UpdateMouseThreadActive(); |
|
|
|
UpdateMouseThreadActive(); |
|
|
|
if(lockEntered) MouseThread_ActiveLock_Exit(); |
|
|
|
if(lockEntered) MouseThread_ActiveLock_Exit(); |
|
|
|
#endif |
|
|
|
#endif |
|
|
@ -478,7 +478,7 @@ void GoldSourceInput::IN_DeactivateMouse (void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (mouseinitialized) |
|
|
|
if (mouseinitialized) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
bool lockEntered = MouseThread_ActiveLock_Enter(); |
|
|
|
bool lockEntered = MouseThread_ActiveLock_Enter(); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
@ -486,7 +486,7 @@ void GoldSourceInput::IN_DeactivateMouse (void) |
|
|
|
|
|
|
|
|
|
|
|
mouseactive = 0; |
|
|
|
mouseactive = 0; |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
UpdateMouseThreadActive(); |
|
|
|
UpdateMouseThreadActive(); |
|
|
|
if(lockEntered) MouseThread_ActiveLock_Exit(); |
|
|
|
if(lockEntered) MouseThread_ActiveLock_Exit(); |
|
|
|
#endif |
|
|
|
#endif |
|
|
@ -504,7 +504,7 @@ void GoldSourceInput::IN_StartupMouse (void) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
mouseinitialized = 1; |
|
|
|
mouseinitialized = 1; |
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
mouseparmsvalid = SystemParametersInfo (SPI_GETMOUSE, 0, originalmouseparms, 0); |
|
|
|
mouseparmsvalid = SystemParametersInfo (SPI_GETMOUSE, 0, originalmouseparms, 0); |
|
|
|
|
|
|
|
|
|
|
|
if (mouseparmsvalid) |
|
|
|
if (mouseparmsvalid) |
|
|
@ -539,7 +539,7 @@ void GoldSourceInput::IN_Shutdown (void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
IN_DeactivateMouse (); |
|
|
|
IN_DeactivateMouse (); |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
if ( s_hMouseQuitEvent ) |
|
|
|
if ( s_hMouseQuitEvent ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
SetEvent( s_hMouseQuitEvent ); |
|
|
|
SetEvent( s_hMouseQuitEvent ); |
|
|
@ -599,7 +599,7 @@ FIXME: Call through to engine? |
|
|
|
void IN_ResetMouse( void ) |
|
|
|
void IN_ResetMouse( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// no work to do in SDL
|
|
|
|
// no work to do in SDL
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
// reset only if mouse is active and not in visible mode:
|
|
|
|
// reset only if mouse is active and not in visible mode:
|
|
|
|
if(mouseactive && !iVisibleMouse && gEngfuncs.GetWindowCenterX && gEngfuncs.GetWindowCenterY) |
|
|
|
if(mouseactive && !iVisibleMouse && gEngfuncs.GetWindowCenterX && gEngfuncs.GetWindowCenterY) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -714,7 +714,7 @@ void GoldSourceInput::IN_GetMouseDelta( int *pOutX, int *pOutY) |
|
|
|
if(active) |
|
|
|
if(active) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int deltaX, deltaY; |
|
|
|
int deltaX, deltaY; |
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
if ( !m_bRawInput ) |
|
|
|
if ( !m_bRawInput ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( m_bMouseThread ) |
|
|
|
if ( m_bMouseThread ) |
|
|
@ -748,7 +748,7 @@ void GoldSourceInput::IN_GetMouseDelta( int *pOutX, int *pOutY) |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
if ( !m_bRawInput ) |
|
|
|
if ( !m_bRawInput ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( m_bMouseThread ) |
|
|
|
if ( m_bMouseThread ) |
|
|
@ -773,7 +773,7 @@ void GoldSourceInput::IN_GetMouseDelta( int *pOutX, int *pOutY) |
|
|
|
my_accum = 0; |
|
|
|
my_accum = 0; |
|
|
|
|
|
|
|
|
|
|
|
// reset mouse position if required, so there is room to move:
|
|
|
|
// reset mouse position if required, so there is room to move:
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
// do not reset if mousethread would do it:
|
|
|
|
// do not reset if mousethread would do it:
|
|
|
|
if ( m_bRawInput || !m_bMouseThread ) |
|
|
|
if ( m_bRawInput || !m_bMouseThread ) |
|
|
|
#else |
|
|
|
#else |
|
|
@ -781,7 +781,7 @@ void GoldSourceInput::IN_GetMouseDelta( int *pOutX, int *pOutY) |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
IN_ResetMouse(); |
|
|
|
IN_ResetMouse(); |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
// update m_bRawInput occasionally:
|
|
|
|
// update m_bRawInput occasionally:
|
|
|
|
if ( gpGlobals && gpGlobals->time - s_flRawInputUpdateTime > 1.0f ) |
|
|
|
if ( gpGlobals && gpGlobals->time - s_flRawInputUpdateTime > 1.0f ) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -793,14 +793,14 @@ void GoldSourceInput::IN_GetMouseDelta( int *pOutX, int *pOutY) |
|
|
|
|
|
|
|
|
|
|
|
if(m_bRawInput && !isMouseRelative) |
|
|
|
if(m_bRawInput && !isMouseRelative) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef USE_SDL2 |
|
|
|
#if USE_SDL2 |
|
|
|
safe_pfnSDL_SetRelativeMouseMode(SDL_TRUE); |
|
|
|
safe_pfnSDL_SetRelativeMouseMode(SDL_TRUE); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
isMouseRelative = true; |
|
|
|
isMouseRelative = true; |
|
|
|
} |
|
|
|
} |
|
|
|
else if(!m_bRawInput && isMouseRelative) |
|
|
|
else if(!m_bRawInput && isMouseRelative) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef USE_SDL2 |
|
|
|
#if USE_SDL2 |
|
|
|
safe_pfnSDL_SetRelativeMouseMode(SDL_FALSE); |
|
|
|
safe_pfnSDL_SetRelativeMouseMode(SDL_FALSE); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
isMouseRelative = false; |
|
|
|
isMouseRelative = false; |
|
|
@ -953,7 +953,7 @@ void GoldSourceInput::IN_Accumulate (void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (mouseactive) |
|
|
|
if (mouseactive) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
if ( !m_bRawInput ) |
|
|
|
if ( !m_bRawInput ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( !m_bMouseThread ) |
|
|
|
if ( !m_bMouseThread ) |
|
|
@ -981,7 +981,7 @@ void GoldSourceInput::IN_Accumulate (void) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// force the mouse to the center, so there's room to move
|
|
|
|
// force the mouse to the center, so there's room to move
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
// do not reset if mousethread would do it:
|
|
|
|
// do not reset if mousethread would do it:
|
|
|
|
if ( m_bRawInput || !m_bMouseThread ) |
|
|
|
if ( m_bRawInput || !m_bMouseThread ) |
|
|
|
#else |
|
|
|
#else |
|
|
@ -1595,7 +1595,7 @@ void GoldSourceInput::IN_Init (void) |
|
|
|
m_customaccel_max = gEngfuncs.pfnRegisterVariable ( "m_customaccel_max", "0", FCVAR_ARCHIVE ); |
|
|
|
m_customaccel_max = gEngfuncs.pfnRegisterVariable ( "m_customaccel_max", "0", FCVAR_ARCHIVE ); |
|
|
|
m_customaccel_exponent = gEngfuncs.pfnRegisterVariable ( "m_customaccel_exponent", "1", FCVAR_ARCHIVE ); |
|
|
|
m_customaccel_exponent = gEngfuncs.pfnRegisterVariable ( "m_customaccel_exponent", "1", FCVAR_ARCHIVE ); |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
#if _WIN32 |
|
|
|
m_bRawInput = CVAR_GET_FLOAT( "m_rawinput" ) != 0; |
|
|
|
m_bRawInput = CVAR_GET_FLOAT( "m_rawinput" ) != 0; |
|
|
|
m_bMouseThread = gEngfuncs.CheckParm ("-mousethread", NULL ) != NULL; |
|
|
|
m_bMouseThread = gEngfuncs.CheckParm ("-mousethread", NULL ) != NULL; |
|
|
|
m_mousethread_sleep = gEngfuncs.pfnRegisterVariable ( "m_mousethread_sleep", "1", FCVAR_ARCHIVE ); // default to less than 1000 Hz
|
|
|
|
m_mousethread_sleep = gEngfuncs.pfnRegisterVariable ( "m_mousethread_sleep", "1", FCVAR_ARCHIVE ); // default to less than 1000 Hz
|
|
|
@ -1626,7 +1626,7 @@ void GoldSourceInput::IN_Init (void) |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#ifdef USE_SDL2 |
|
|
|
#ifdef USE_SDL2 |
|
|
|
#ifdef __APPLE__ |
|
|
|
#if __APPLE__ |
|
|
|
#define SDL2_FULL_LIBNAME "libsdl2-2.0.0.dylib" |
|
|
|
#define SDL2_FULL_LIBNAME "libsdl2-2.0.0.dylib" |
|
|
|
#else |
|
|
|
#else |
|
|
|
#define SDL2_FULL_LIBNAME "libSDL2-2.0.so.0" |
|
|
|
#define SDL2_FULL_LIBNAME "libSDL2-2.0.so.0" |
|
|
|