Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(625)

Unified Diff: content/browser/gamepad/gamepad_platform_data_fetcher_mac.mm

Issue 165983005: Updating Gamepad API to match latest spec (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed typo in GamepadProviderTest Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 f09fc83d3790d7b18f04478e51e7c1b073f9b668..3bb3b19f73cd0ae9babfb155e9acce9853a1e081 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(
+ 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;
}
@@ -358,11 +373,15 @@ void GamepadPlatformDataFetcherMac::XboxDeviceAdd(XboxController* device) {
? @"Xbox 360 Controller"
: @"Xbox One Controller",
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;
@@ -409,12 +428,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] > kDefaultButtonPressedThreshold;
+ pad.buttons[6].value = data.triggers[0];
+ pad.buttons[7].pressed = data.triggers[1] > kDefaultButtonPressedThreshold;
+ 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];

Powered by Google App Engine
This is Rietveld 408576698