Chromium Code Reviews| Index: content/browser/gamepad/gamepad_platform_data_fetcher_win.h |
| diff --git a/content/browser/gamepad/gamepad_platform_data_fetcher_win.h b/content/browser/gamepad/gamepad_platform_data_fetcher_win.h |
| index 92c44ffc4a3d7a815c9f75397bf79b9d9f65f6f3..70489d38738bde3b1d5471015fd64795e5325603 100644 |
| --- a/content/browser/gamepad/gamepad_platform_data_fetcher_win.h |
| +++ b/content/browser/gamepad/gamepad_platform_data_fetcher_win.h |
| @@ -10,6 +10,11 @@ |
| #ifndef WIN32_LEAN_AND_MEAN |
| #define WIN32_LEAN_AND_MEAN |
| #endif |
| +#define DIRECTINPUT_VERSION 0x0800 |
| +#include <dinput.h> |
| +#include <stdlib.h> |
| +#include <Unknwn.h> |
| +#include <WinDef.h> |
| #include <windows.h> |
| #include <XInput.h> |
| @@ -17,6 +22,14 @@ |
| #include "base/compiler_specific.h" |
| #include "base/scoped_native_library.h" |
| #include "content/browser/gamepad/gamepad_data_fetcher.h" |
| +#include "content/browser/gamepad/gamepad_standard_mappings.h" |
| + |
| +// struct DIDEVICEINSTANCE; |
| +// struct IDirectInput8; |
| +//struct IDirectInputDevice8; |
|
scottmg
2013/02/13 19:19:07
nit: delete these
|
| +namespace WebKit { |
| +class WebGamepad; |
| +} |
| namespace content { |
| @@ -27,6 +40,12 @@ class GamepadPlatformDataFetcherWin : public GamepadDataFetcher { |
| virtual void GetGamepadData(WebKit::WebGamepads* pads, |
| bool devices_changed_hint) OVERRIDE; |
| private: |
| + // XInput-specific implementation for GetGamepadData. |
| + bool GetXInputGamepadData(WebKit::WebGamepads* pads, |
| + bool devices_changed_hint); |
| + bool GetDirectInputGamepadData(WebKit::WebGamepads* pads, |
| + bool devices_changed_hint); |
| + |
| // The three function types we use from xinput1_3.dll. |
| typedef void (WINAPI *XInputEnableFunc)(BOOL enable); |
| typedef DWORD (WINAPI *XInputGetCapabilitiesFunc)( |
| @@ -38,7 +57,16 @@ class GamepadPlatformDataFetcherWin : public GamepadDataFetcher { |
| // DELAYLOAD because the import library for Win8 SDK pulls xinput1_4 which |
| // isn't redistributable. Returns true if loading was successful. We include |
| // xinput1_3.dll with Chrome. |
| - bool GetXinputDllFunctions(); |
| + bool GetXInputDllFunctions(); |
| + |
| + bool GetDirectInputDllFunctions(); |
| + |
| + // Scan for connected XInput and DirectInput gamepads. |
| + void EnumerateDevices(WebKit::WebGamepads* pads); |
| + bool GetXInputPadConnectivity(int i, WebKit::WebGamepad* pad) const; |
| + |
| + void GetXInputPadData(int i, WebKit::WebGamepad* pad); |
| + void GetDirectInputPadData(int i, WebKit::WebGamepad* pad); |
| base::ScopedNativeLibrary xinput_dll_; |
| bool xinput_available_; |
| @@ -49,6 +77,31 @@ class GamepadPlatformDataFetcherWin : public GamepadDataFetcher { |
| XInputGetCapabilitiesFunc xinput_get_capabilities_; |
| XInputGetStateFunc xinput_get_state_; |
| + std::vector<uint32> xinput_devices_; |
| + typedef HRESULT (WINAPI *DirectInputCreateFunc)(HINSTANCE hinst, |
| + DWORD dwVersion, |
| + const IID& riidltf, |
| + void** ppvOut, |
| + IUnknown* punkOuter); |
| + DirectInputCreateFunc directinput_create_; |
| + base::ScopedNativeLibrary directinput_dll_; |
| + bool directinput_available_; |
| + IDirectInput8* directinput_interface_; |
| + |
| + enum PadConnectionStatus { |
| + DISCONNECTED, |
| + XINPUT_CONNECTED, |
| + DIRECTINPUT_CONNECTED |
| + }; |
| + |
| + struct PadState { |
| + PadConnectionStatus status; |
| + // Fields below are for DirectInput devices only. |
| + IDirectInputDevice8* directinput_gamepad; |
| + GamepadStandardMappingFunction mapper; |
| + }; |
| + std::vector<PadState> pad_state_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(GamepadPlatformDataFetcherWin); |
| }; |