diff options
Diffstat (limited to 'indra/llwindow')
| -rw-r--r-- | indra/llwindow/llwindow.h | 4 | ||||
| -rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 41 | ||||
| -rw-r--r-- | indra/llwindow/llwindowwin32.h | 3 | 
3 files changed, 48 insertions, 0 deletions
| diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index a05ba8cbba..f1113acd5f 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -168,6 +168,10 @@ public:  	// Get system UI size based on DPI (for 96 DPI UI size should be 1.0)  	virtual F32 getSystemUISize() { return 1.0; } + +    // windows only DirectInput8 for joysticks +    virtual void* getDirectInput8() { return NULL; }; +    virtual bool getInputDevices(U32 device_type_filter, void * devices_callback, void* userdata) { return false; };  protected:  	LLWindow(LLWindowCallbacks* callbacks, BOOL fullscreen, U32 flags);  	virtual ~LLWindow(); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index bef0ae76a8..e8abb9f31a 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -59,6 +59,9 @@  #include <dinput.h>  #include <Dbt.h.> +#include <InitGuid.h> // needed for llurlentry test to build on some systems +#pragma comment(lib, "dxguid.lib") // needed for llurlentry test to build on some systems +#pragma comment(lib, "dinput8")  const S32	MAX_MESSAGE_PER_UPDATE = 20;  const S32	BITS_PER_PIXEL = 32; @@ -76,6 +79,7 @@ const F32	ICON_FLASH_TIME = 0.5f;  extern BOOL gDebugWindowProc;  LPWSTR gIconResource = IDI_APPLICATION; +LPDIRECTINPUT8 gDirectInput8;  LLW32MsgCallback gAsyncMsgCallback = NULL; @@ -482,6 +486,21 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,  	mhInstance = GetModuleHandle(NULL);  	mWndProc = NULL; +    // Init Direct Input - needed for joystick / Spacemouse + +    LPDIRECTINPUT8 di8_interface; +    HRESULT status = DirectInput8Create( +        mhInstance, // HINSTANCE hinst, +        DIRECTINPUT_VERSION, // DWORD dwVersion, +        IID_IDirectInput8, // REFIID riidltf, +        (LPVOID*)&di8_interface, // LPVOID * ppvOut, +        NULL                     // LPUNKNOWN punkOuter +        ); +    if (status == DI_OK) +    { +        gDirectInput8 = di8_interface; +    } +  	mSwapMethod = SWAP_METHOD_UNDEFINED;  	// No WPARAM yet. @@ -4185,6 +4204,28 @@ void LLWindowWin32::setDPIAwareness()  	}  } +void* LLWindowWin32::getDirectInput8() +{ +    return &gDirectInput8; +} + +bool LLWindowWin32::getInputDevices(U32 device_type_filter, void * di8_devices_callback, void* userdata) +{ +    if (gDirectInput8 != NULL) +    { +        // Enumerate devices +        HRESULT status = gDirectInput8->EnumDevices( +            (DWORD) device_type_filter,        // DWORD dwDevType, +            (LPDIENUMDEVICESCALLBACK)di8_devices_callback,  // LPDIENUMDEVICESCALLBACK lpCallback, // BOOL DIEnumDevicesCallback( LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef ) // BOOL CALLBACK DinputDevice::DevicesCallback +            (LPVOID*)userdata, // LPVOID pvRef +            DIEDFL_ATTACHEDONLY       // DWORD dwFlags +            ); + +        return status == DI_OK; +    } +    return false; +} +  F32 LLWindowWin32::getSystemUISize()  {  	F32 scale_value = 1.f; diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index 9cd16eb993..ee0df570e9 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -116,6 +116,9 @@ public:  	static std::vector<std::string> getDynamicFallbackFontList();  	static void setDPIAwareness(); + +    /*virtual*/ void* getDirectInput8(); +    /*virtual*/ bool getInputDevices(U32 device_type_filter, void * di8_devices_callback, void* userdata);  protected:  	LLWindowWin32(LLWindowCallbacks* callbacks,  		const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags,  | 
