diff options
Diffstat (limited to 'src/in_dx.c')
-rw-r--r-- | src/in_dx.c | 210 |
1 files changed, 108 insertions, 102 deletions
diff --git a/src/in_dx.c b/src/in_dx.c index 347ed9a..22b9a09 100644 --- a/src/in_dx.c +++ b/src/in_dx.c @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -34,7 +34,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. static HMODULE hDirectInput; -typedef HRESULT (WINAPI *LPDIRECTINPUTCREATE)( HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN ); +typedef HRESULT(WINAPI *LPDIRECTINPUTCREATE)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN); static LPDIRECTINPUTCREATE pDirectInputCreate; @@ -43,41 +43,41 @@ static qboolean di_initialized; static LPDIRECTINPUT di; static LPDIRECTINPUTDEVICE di_mouse; -#define DEFINE_STATIC_GUID( name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8 ) \ +#define DEFINE_STATIC_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ static const GUID _##name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } -DEFINE_STATIC_GUID( GUID_SysMouse, 0x6F1D2B60, 0xD5A0, 0x11CF, 0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 ); -DEFINE_STATIC_GUID( GUID_XAxis, 0xA36D02E0, 0xC9F3, 0x11CF, 0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 ); -DEFINE_STATIC_GUID( GUID_YAxis, 0xA36D02E1, 0xC9F3, 0x11CF, 0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 ); -DEFINE_STATIC_GUID( GUID_ZAxis, 0xA36D02E2, 0xC9F3, 0x11CF, 0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 ); +DEFINE_STATIC_GUID(GUID_SysMouse, 0x6F1D2B60, 0xD5A0, 0x11CF, 0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00); +DEFINE_STATIC_GUID(GUID_XAxis, 0xA36D02E0, 0xC9F3, 0x11CF, 0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00); +DEFINE_STATIC_GUID(GUID_YAxis, 0xA36D02E1, 0xC9F3, 0x11CF, 0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00); +DEFINE_STATIC_GUID(GUID_ZAxis, 0xA36D02E2, 0xC9F3, 0x11CF, 0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00); static const DIOBJECTDATAFORMAT mouseObjectDataFormat[] = { - { &_GUID_XAxis, DIMOFS_X, DIDFT_RELAXIS|DIDFT_ANYINSTANCE, 0 }, - { &_GUID_YAxis, DIMOFS_Y, DIDFT_RELAXIS|DIDFT_ANYINSTANCE, 0 }, - { &_GUID_ZAxis, DIMOFS_Z, DIDFT_RELAXIS|DIDFT_ANYINSTANCE|DIDFT_OPTIONAL, 0 }, - { NULL, DIMOFS_BUTTON0, DIDFT_BUTTON|DIDFT_ANYINSTANCE, 0 }, - { NULL, DIMOFS_BUTTON1, DIDFT_BUTTON|DIDFT_ANYINSTANCE, 0 }, - { NULL, DIMOFS_BUTTON2, DIDFT_BUTTON|DIDFT_ANYINSTANCE|DIDFT_OPTIONAL, 0 }, - { NULL, DIMOFS_BUTTON3, DIDFT_BUTTON|DIDFT_ANYINSTANCE|DIDFT_OPTIONAL, 0 }, - { NULL, DIMOFS_BUTTON4, DIDFT_BUTTON|DIDFT_ANYINSTANCE|DIDFT_OPTIONAL, 0 }, - { NULL, DIMOFS_BUTTON5, DIDFT_BUTTON|DIDFT_ANYINSTANCE|DIDFT_OPTIONAL, 0 }, - { NULL, DIMOFS_BUTTON6, DIDFT_BUTTON|DIDFT_ANYINSTANCE|DIDFT_OPTIONAL, 0 }, - { NULL, DIMOFS_BUTTON7, DIDFT_BUTTON|DIDFT_ANYINSTANCE|DIDFT_OPTIONAL, 0 } + { &_GUID_XAxis, DIMOFS_X, DIDFT_RELAXIS | DIDFT_ANYINSTANCE, 0 }, + { &_GUID_YAxis, DIMOFS_Y, DIDFT_RELAXIS | DIDFT_ANYINSTANCE, 0 }, + { &_GUID_ZAxis, DIMOFS_Z, DIDFT_RELAXIS | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0 }, + { NULL, DIMOFS_BUTTON0, DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIMOFS_BUTTON1, DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIMOFS_BUTTON2, DIDFT_BUTTON | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0 }, + { NULL, DIMOFS_BUTTON3, DIDFT_BUTTON | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0 }, + { NULL, DIMOFS_BUTTON4, DIDFT_BUTTON | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0 }, + { NULL, DIMOFS_BUTTON5, DIDFT_BUTTON | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0 }, + { NULL, DIMOFS_BUTTON6, DIDFT_BUTTON | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0 }, + { NULL, DIMOFS_BUTTON7, DIDFT_BUTTON | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0 } }; static const DIDATAFORMAT mouseDataFormat = { - sizeof( DIDATAFORMAT ), - sizeof( DIOBJECTDATAFORMAT ), + sizeof(DIDATAFORMAT), + sizeof(DIOBJECTDATAFORMAT), DIDF_RELAXIS, - sizeof( DIMOUSESTATE2 ), - sizeof( mouseObjectDataFormat ) / sizeof( mouseObjectDataFormat[0] ), - ( LPDIOBJECTDATAFORMAT )mouseObjectDataFormat + sizeof(DIMOUSESTATE2), + sizeof(mouseObjectDataFormat) / sizeof(mouseObjectDataFormat[0]), + (LPDIOBJECTDATAFORMAT)mouseObjectDataFormat }; static const DIPROPDWORD mouseBufferSize = { { - sizeof( DIPROPDWORD ), - sizeof( DIPROPHEADER ), + sizeof(DIPROPDWORD), + sizeof(DIPROPHEADER), 0, DIPH_DEVICE }, @@ -89,31 +89,32 @@ static const DIPROPDWORD mouseBufferSize = { DI_GetMouseEvents =========== */ -static void DI_GetMouseEvents( void ) { +static void DI_GetMouseEvents(void) +{ DIDEVICEOBJECTDATA data[16]; LPDIDEVICEOBJECTDATA p, last; DWORD numElements, button; int value; HRESULT hr; - if( di_grabbed != IN_GRAB ) { + if (di_grabbed != IN_GRAB) { return; } do { numElements = 16; - hr = IDirectInputDevice_GetDeviceData( di_mouse, sizeof( data[0] ), data, &numElements, 0 ); - if( hr == DIERR_INPUTLOST || hr == DIERR_NOTACQUIRED ) { - IDirectInputDevice_Acquire( di_mouse ); + hr = IDirectInputDevice_GetDeviceData(di_mouse, sizeof(data[0]), data, &numElements, 0); + if (hr == DIERR_INPUTLOST || hr == DIERR_NOTACQUIRED) { + IDirectInputDevice_Acquire(di_mouse); return; } - if( FAILED( hr ) ) { - Com_EPrintf( "GetDeviceData failed with error 0x%lX\n", hr ); + if (FAILED(hr)) { + Com_EPrintf("GetDeviceData failed with error 0x%lX\n", hr); return; } last = data + numElements; - for( p = data; p < last; p++ ) { - switch( p->dwOfs ) { + for (p = data; p < last; p++) { + switch (p->dwOfs) { case DIMOFS_BUTTON0: case DIMOFS_BUTTON1: case DIMOFS_BUTTON2: @@ -122,31 +123,31 @@ static void DI_GetMouseEvents( void ) { case DIMOFS_BUTTON5: case DIMOFS_BUTTON6: case DIMOFS_BUTTON7: - button = p->dwOfs - DIMOFS_BUTTON0; - if( p->dwData & 0x80 ) { - Key_Event( K_MOUSE1 + button, qtrue, p->dwTimeStamp ); + button = p->dwOfs - DIMOFS_BUTTON0; + if (p->dwData & 0x80) { + Key_Event(K_MOUSE1 + button, qtrue, p->dwTimeStamp); } else { - Key_Event( K_MOUSE1 + button, qfalse, p->dwTimeStamp ); + Key_Event(K_MOUSE1 + button, qfalse, p->dwTimeStamp); } break; case DIMOFS_Z: value = p->dwData; - if( !value ) { + if (!value) { break; } - if( value > 0 ) { - Key_Event( K_MWHEELUP, qtrue, p->dwTimeStamp ); - Key_Event( K_MWHEELUP, qfalse, p->dwTimeStamp ); + if (value > 0) { + Key_Event(K_MWHEELUP, qtrue, p->dwTimeStamp); + Key_Event(K_MWHEELUP, qfalse, p->dwTimeStamp); } else { - Key_Event( K_MWHEELDOWN, qtrue, p->dwTimeStamp ); - Key_Event( K_MWHEELDOWN, qfalse, p->dwTimeStamp ); + Key_Event(K_MWHEELDOWN, qtrue, p->dwTimeStamp); + Key_Event(K_MWHEELDOWN, qfalse, p->dwTimeStamp); } break; default: break; } } - } while( hr == DI_BUFFEROVERFLOW ); + } while (hr == DI_BUFFEROVERFLOW); } /* @@ -154,17 +155,18 @@ static void DI_GetMouseEvents( void ) { DI_GetMouseMotion =========== */ -static qboolean DI_GetMouseMotion( int *dx, int *dy ) { +static qboolean DI_GetMouseMotion(int *dx, int *dy) +{ DIMOUSESTATE2 state; HRESULT hr; - if( di_grabbed != IN_GRAB ) { + if (di_grabbed != IN_GRAB) { return qfalse; } - hr = IDirectInputDevice_GetDeviceState( di_mouse, sizeof( state ), &state ); - if( FAILED( hr ) ) { - Com_EPrintf( "GetDeviceState failed with error 0x%lX\n", hr ); + hr = IDirectInputDevice_GetDeviceState(di_mouse, sizeof(state), &state); + if (FAILED(hr)) { + Com_EPrintf("GetDeviceState failed with error 0x%lX\n", hr); return qfalse; } @@ -178,18 +180,19 @@ static qboolean DI_GetMouseMotion( int *dx, int *dy ) { DI_ShutdownMouse =========== */ -static void DI_ShutdownMouse( void ) { - Com_Printf( "Shutting down DirectInput\n" ); +static void DI_ShutdownMouse(void) +{ + Com_Printf("Shutting down DirectInput\n"); - if( di_mouse ) { - if( di_grabbed ) { - IDirectInputDevice_Unacquire( di_mouse ); + if (di_mouse) { + if (di_grabbed) { + IDirectInputDevice_Unacquire(di_mouse); } - IDirectInputDevice_Release( di_mouse ); + IDirectInputDevice_Release(di_mouse); di_mouse = NULL; } - if( di ) { - IDirectInput_Release( di ); + if (di) { + IDirectInput_Release(di); di = NULL; } di_grabbed = qfalse; @@ -202,71 +205,72 @@ static void DI_ShutdownMouse( void ) { DI_StartupMouse =========== */ -static qboolean DI_InitMouse( void ) { +static qboolean DI_InitMouse(void) +{ HRESULT hr; - if( !win.wnd ) { + if (!win.wnd) { return qfalse; } - Com_Printf( "Initializing DirectInput\n" ); + Com_Printf("Initializing DirectInput\n"); - if( !hDirectInput ) { - hDirectInput = LoadLibrary( "dinput.dll" ); - if( !hDirectInput ) { - Com_EPrintf( "Failed to load dinput.dll\n" ); + if (!hDirectInput) { + hDirectInput = LoadLibrary("dinput.dll"); + if (!hDirectInput) { + Com_EPrintf("Failed to load dinput.dll\n"); return qfalse; } - pDirectInputCreate = ( LPDIRECTINPUTCREATE ) - GetProcAddress( hDirectInput, "DirectInputCreateA" ); - if( !pDirectInputCreate ) { - Com_EPrintf( "Failed to obtain DirectInputCreate\n" ); + pDirectInputCreate = (LPDIRECTINPUTCREATE) + GetProcAddress(hDirectInput, "DirectInputCreateA"); + if (!pDirectInputCreate) { + Com_EPrintf("Failed to obtain DirectInputCreate\n"); goto fail; } } - hr = pDirectInputCreate( hGlobalInstance, DIRECTINPUT_VERSION, &di, NULL ); - if( FAILED( hr ) ) { - Com_EPrintf( "DirectInputCreate failed with error 0x%lX\n", hr ); + hr = pDirectInputCreate(hGlobalInstance, DIRECTINPUT_VERSION, &di, NULL); + if (FAILED(hr)) { + Com_EPrintf("DirectInputCreate failed with error 0x%lX\n", hr); goto fail; } - hr = IDirectInput_CreateDevice( di, &_GUID_SysMouse, &di_mouse, NULL ); - if( FAILED( hr ) ) { - Com_EPrintf( "CreateDevice failed with error 0x%lX\n", hr ); + hr = IDirectInput_CreateDevice(di, &_GUID_SysMouse, &di_mouse, NULL); + if (FAILED(hr)) { + Com_EPrintf("CreateDevice failed with error 0x%lX\n", hr); goto fail; } - hr = IDirectInputDevice_SetDataFormat( di_mouse, &mouseDataFormat ); - if( FAILED( hr ) ) { - Com_EPrintf( "SetDataFormat failed with error 0x%lX\n", hr ); + hr = IDirectInputDevice_SetDataFormat(di_mouse, &mouseDataFormat); + if (FAILED(hr)) { + Com_EPrintf("SetDataFormat failed with error 0x%lX\n", hr); goto fail; } - hr = IDirectInputDevice_SetCooperativeLevel( di_mouse, win.wnd, DISCL_EXCLUSIVE|DISCL_FOREGROUND ); - if( FAILED( hr ) ) { - Com_EPrintf( "SetCooperativeLevel failed with error 0x%lX\n", hr ); + hr = IDirectInputDevice_SetCooperativeLevel(di_mouse, win.wnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND); + if (FAILED(hr)) { + Com_EPrintf("SetCooperativeLevel failed with error 0x%lX\n", hr); goto fail; } - hr = IDirectInputDevice_SetProperty( di_mouse, DIPROP_BUFFERSIZE, &mouseBufferSize.diph ); - if( FAILED( hr ) ) { - Com_EPrintf( "SetProperty failed with error 0x%lX\n", hr ); + hr = IDirectInputDevice_SetProperty(di_mouse, DIPROP_BUFFERSIZE, &mouseBufferSize.diph); + if (FAILED(hr)) { + Com_EPrintf("SetProperty failed with error 0x%lX\n", hr); goto fail; } di_initialized = qtrue; - + return qtrue; fail: - if( di_mouse ) { - IDirectInputDevice_Release( di_mouse ); + if (di_mouse) { + IDirectInputDevice_Release(di_mouse); di_mouse = NULL; } - if( di ) { - IDirectInput_Release( di ); + if (di) { + IDirectInput_Release(di); di = NULL; } return qfalse; @@ -277,28 +281,29 @@ fail: DI_GrabMouse =========== */ -static void DI_GrabMouse( grab_t grab ) { +static void DI_GrabMouse(grab_t grab) +{ HRESULT hr; - if( !di_initialized ) { + if (!di_initialized) { return; } - if( di_grabbed == grab ) { + if (di_grabbed == grab) { return; } - if( grab == IN_GRAB ) { - Com_DPrintf( "IDirectInputDevice_Acquire\n" ); - hr = IDirectInputDevice_Acquire( di_mouse ); - if( FAILED( hr ) ) { - Com_EPrintf( "Failed to acquire mouse, error 0x%lX\n", hr ); + if (grab == IN_GRAB) { + Com_DPrintf("IDirectInputDevice_Acquire\n"); + hr = IDirectInputDevice_Acquire(di_mouse); + if (FAILED(hr)) { + Com_EPrintf("Failed to acquire mouse, error 0x%lX\n", hr); } } else { - Com_DPrintf( "IDirectInputDevice_Unacquire\n" ); - hr = IDirectInputDevice_Unacquire( di_mouse ); - if( FAILED( hr ) ) { - Com_EPrintf( "Failed to unacquire mouse, error 0x%lX\n", hr ); + Com_DPrintf("IDirectInputDevice_Unacquire\n"); + hr = IDirectInputDevice_Unacquire(di_mouse); + if (FAILED(hr)) { + Com_EPrintf("Failed to unacquire mouse, error 0x%lX\n", hr); } } @@ -311,7 +316,8 @@ static void DI_GrabMouse( grab_t grab ) { DI_FillAPI @@@@@@@@@@@@@@@@@@@ */ -void DI_FillAPI( inputAPI_t *api ) { +void DI_FillAPI(inputAPI_t *api) +{ api->Init = DI_InitMouse; api->Shutdown = DI_ShutdownMouse; api->Grab = DI_GrabMouse; |