| 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..59e9d791e0edf76192b6e79d07d51eacd1735d75 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,11 @@
|
| #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"
|
| +
|
| +namespace WebKit {
|
| +class WebGamepad;
|
| +}
|
|
|
| namespace content {
|
|
|
| @@ -27,6 +37,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,10 +54,18 @@ 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();
|
| +
|
| + // 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_;
|
| + bool directinput_available_;
|
|
|
| // Function pointers to XInput functionality, retrieved in
|
| // |GetXinputDllFunctions|.
|
| @@ -49,6 +73,22 @@ class GamepadPlatformDataFetcherWin : public GamepadDataFetcher {
|
| XInputGetCapabilitiesFunc xinput_get_capabilities_;
|
| XInputGetStateFunc xinput_get_state_;
|
|
|
| + 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);
|
| };
|
|
|
|
|