Index: content/browser/gamepad/gamepad_platform_data_fetcher_mac.h |
diff --git a/content/browser/gamepad/gamepad_platform_data_fetcher_mac.h b/content/browser/gamepad/gamepad_platform_data_fetcher_mac.h |
index 303263c3d98aabb7ce20a46c95549038dbc653f4..ebfe57e35f458b31d18c19d1083ee42622ac76e9 100644 |
--- a/content/browser/gamepad/gamepad_platform_data_fetcher_mac.h |
+++ b/content/browser/gamepad/gamepad_platform_data_fetcher_mac.h |
@@ -13,6 +13,8 @@ |
#include "base/memory/scoped_ptr.h" |
#include "build/build_config.h" |
#include "content/browser/gamepad/gamepad_data_fetcher.h" |
+#include "content/browser/gamepad/xbox_data_fetcher_mac.h" |
+#include "content/common/gamepad_hardware_buffer.h" |
#include <CoreFoundation/CoreFoundation.h> |
#include <IOKit/hid/IOHIDManager.h> |
@@ -25,11 +27,13 @@ |
namespace content { |
-class GamepadPlatformDataFetcherMac : public GamepadDataFetcher { |
+class GamepadPlatformDataFetcherMac : public GamepadDataFetcher, |
+ public XboxDataFetcher::Delegate { |
public: |
GamepadPlatformDataFetcherMac(); |
~GamepadPlatformDataFetcherMac() override; |
- void GetGamepadData(bool devices_changed_hint) override; |
+ void GetGamepadData(blink::WebGamepads* pads, |
+ bool devices_changed_hint) override; |
void PauseHint(bool paused) override; |
private: |
@@ -51,28 +55,44 @@ |
void* sender, |
IOHIDValueRef ref); |
- void OnAddedToProvider() override; |
- |
size_t GetEmptySlot(); |
size_t GetSlotForDevice(IOHIDDeviceRef device); |
+ size_t GetSlotForXboxDevice(XboxController* device); |
void DeviceAdd(IOHIDDeviceRef device); |
- bool AddButtonsAndAxes(NSArray* elements, PadState* state, size_t slot); |
+ bool AddButtonsAndAxes(NSArray* elements, size_t slot); |
void DeviceRemove(IOHIDDeviceRef device); |
void ValueChanged(IOHIDValueRef value); |
+ |
+ void XboxDeviceAdd(XboxController* device) override; |
+ void XboxDeviceRemove(XboxController* device) override; |
+ void XboxValueChanged(XboxController* device, |
+ const XboxController::Data& data) override; |
void RegisterForNotifications(); |
void UnregisterFromNotifications(); |
+ void SanitizeGamepadData(size_t index, blink::WebGamepad* pad); |
+ |
+ scoped_ptr<XboxDataFetcher> xbox_fetcher_; |
+ |
// Side-band data that's not passed to the consumer, but we need to maintain |
// to update data_. |
struct AssociatedData { |
- int location_id; |
- IOHIDDeviceRef device_ref; |
- IOHIDElementRef button_elements[blink::WebGamepad::buttonsLengthCap]; |
- IOHIDElementRef axis_elements[blink::WebGamepad::axesLengthCap]; |
- CFIndex axis_minimums[blink::WebGamepad::axesLengthCap]; |
- CFIndex axis_maximums[blink::WebGamepad::axesLengthCap]; |
+ bool is_xbox; |
+ union { |
+ struct { |
+ IOHIDDeviceRef device_ref; |
+ IOHIDElementRef button_elements[blink::WebGamepad::buttonsLengthCap]; |
+ IOHIDElementRef axis_elements[blink::WebGamepad::axesLengthCap]; |
+ CFIndex axis_minimums[blink::WebGamepad::axesLengthCap]; |
+ CFIndex axis_maximums[blink::WebGamepad::axesLengthCap]; |
+ } hid; |
+ struct { |
+ XboxController* device; |
+ UInt32 location_id; |
+ } xbox; |
+ }; |
}; |
AssociatedData associated_[blink::WebGamepads::itemsLengthCap]; |