Index: content/browser/gamepad/gamepad_platform_data_fetcher_mac.mm |
diff --git a/content/browser/gamepad/gamepad_platform_data_fetcher_mac.mm b/content/browser/gamepad/gamepad_platform_data_fetcher_mac.mm |
index 69d0c63e31d4c974c131eafd0f7ef62f0a2e03ce..692ac0084a7dd693ffa149da23363af009a4eea5 100644 |
--- a/content/browser/gamepad/gamepad_platform_data_fetcher_mac.mm |
+++ b/content/browser/gamepad/gamepad_platform_data_fetcher_mac.mm |
@@ -21,6 +21,13 @@ namespace content { |
namespace { |
+void copyNSStringAsUTF16LittleEndian( |
scottmg
2014/02/20 01:15:13
rename to Copy...
|
+ NSString* src, blink::WebUChar* dest, size_t dest_len) { |
+ NSData* as16 = [src dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; |
+ memset(dest, 0, dest_len); |
+ [as16 getBytes:dest length:dest_len - sizeof(blink::WebUChar)]; |
+} |
+ |
NSDictionary* DeviceMatching(uint32_t usage_page, uint32_t usage) { |
return [NSDictionary dictionaryWithObjectsAndKeys: |
[NSNumber numberWithUnsignedInt:usage_page], |
@@ -261,12 +268,19 @@ void GamepadPlatformDataFetcherMac::DeviceAdd(IOHIDDeviceRef device) { |
associated_[slot].hid.mapper ? "STANDARD GAMEPAD " : "", |
vendor_int, |
product_int]; |
- NSData* as16 = [ident dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; |
- |
- const size_t kOutputLengthBytes = sizeof(data_.items[slot].id); |
- memset(&data_.items[slot].id, 0, kOutputLengthBytes); |
- [as16 getBytes:data_.items[slot].id |
- length:kOutputLengthBytes - sizeof(blink::WebUChar)]; |
+ copyNSStringAsUTF16LittleEndian( |
+ ident, |
+ data_.items[slot].id, |
+ sizeof(data_.items[slot].id)); |
+ |
+ if (associated_[slot].hid.mapper) { |
+ copyNSStringAsUTF16LittleEndian( |
+ @"standard", |
+ data_.items[slot].mapping, |
+ sizeof(data_.items[slot].mapping)); |
+ } else { |
+ data_.items[slot].mapping[0] = 0; |
+ } |
base::ScopedCFTypeRef<CFArrayRef> elements( |
IOHIDDeviceCopyMatchingElements(device, NULL, kIOHIDOptionsTypeNone)); |
@@ -320,7 +334,8 @@ void GamepadPlatformDataFetcherMac::ValueChanged(IOHIDValueRef value) { |
// Find and fill in the associated button event, if any. |
for (size_t i = 0; i < pad.buttonsLength; ++i) { |
if (associated.hid.button_elements[i] == element) { |
- pad.buttons[i] = IOHIDValueGetIntegerValue(value) ? 1.f : 0.f; |
+ pad.buttons[i].pressed = IOHIDValueGetIntegerValue(value); |
+ pad.buttons[i].value = pad.buttons[i].pressed ? 1.f : 0.f; |
pad.timestamp = std::max(pad.timestamp, IOHIDValueGetTimeStamp(value)); |
return; |
} |
@@ -355,11 +370,15 @@ void GamepadPlatformDataFetcherMac::XboxDeviceAdd(XboxController* device) { |
[NSString stringWithFormat: |
@"Xbox 360 Controller (STANDARD GAMEPAD Vendor: %04x Product: %04x)", |
device->GetProductId(), device->GetVendorId()]; |
- NSData* as16 = [ident dataUsingEncoding:NSUTF16StringEncoding]; |
- const size_t kOutputLengthBytes = sizeof(data_.items[slot].id); |
- memset(&data_.items[slot].id, 0, kOutputLengthBytes); |
- [as16 getBytes:data_.items[slot].id |
- length:kOutputLengthBytes - sizeof(blink::WebUChar)]; |
+ copyNSStringAsUTF16LittleEndian( |
+ ident, |
+ data_.items[slot].id, |
+ sizeof(data_.items[slot].id)); |
+ |
+ copyNSStringAsUTF16LittleEndian( |
+ @"standard", |
+ data_.items[slot].mapping, |
+ sizeof(data_.items[slot].mapping)); |
associated_[slot].is_xbox = true; |
associated_[slot].xbox.device = device; |
@@ -406,12 +425,16 @@ void GamepadPlatformDataFetcherMac::XboxValueChanged( |
WebGamepad& pad = data_.items[slot]; |
for (size_t i = 0; i < 6; i++) { |
- pad.buttons[i] = data.buttons[i] ? 1.0f : 0.0f; |
+ pad.buttons[i].pressed = data.buttons[i]; |
+ pad.buttons[i].value = data.buttons[i] ? 1.0f : 0.0f; |
} |
- pad.buttons[6] = data.triggers[0]; |
- pad.buttons[7] = data.triggers[1]; |
+ pad.buttons[6].pressed = data.triggers[0] > 0.1f; |
scottmg
2014/02/20 01:15:13
Did the .1 come from anywhere in particular? it'd
|
+ pad.buttons[6].value = data.triggers[0]; |
+ pad.buttons[7].pressed = data.triggers[1] > 0.1f; |
+ pad.buttons[7].value = data.triggers[1]; |
for (size_t i = 8; i < 17; i++) { |
- pad.buttons[i] = data.buttons[i - 2] ? 1.0f : 0.0f; |
+ pad.buttons[i].pressed = data.buttons[i - 2]; |
+ pad.buttons[i].value = data.buttons[i - 2] ? 1.0f : 0.0f; |
} |
for (size_t i = 0; i < arraysize(data.axes); i++) { |
pad.axes[i] = data.axes[i]; |