| OLD | NEW | 
|    1 // Copyright 2016 The Chromium Authors. All rights reserved. |    1 // Copyright 2016 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include "device/gamepad/game_controller_data_fetcher_mac.h" |    5 #include "device/gamepad/game_controller_data_fetcher_mac.h" | 
|    6  |    6  | 
|    7 #include <string.h> |    7 #include <string.h> | 
|    8  |    8  | 
|    9 #include "base/strings/string16.h" |    9 #include "base/strings/string16.h" | 
|   10 #include "base/strings/string_util.h" |   10 #include "base/strings/string_util.h" | 
|   11 #include "base/strings/utf_string_conversions.h" |   11 #include "base/strings/utf_string_conversions.h" | 
|   12 #include "base/time/time.h" |   12 #include "base/time/time.h" | 
|   13 #include "device/gamepad/gamepad_standard_mappings.h" |   13 #include "device/gamepad/gamepad_standard_mappings.h" | 
|   14  |   14  | 
|   15 #import <GameController/GameController.h> |   15 #import <GameController/GameController.h> | 
|   16  |   16  | 
|   17 using blink::WebGamepad; |  | 
|   18 using blink::WebGamepads; |  | 
|   19  |  | 
|   20 namespace device { |   17 namespace device { | 
|   21  |   18  | 
|   22 namespace { |   19 namespace { | 
|   23  |   20  | 
|   24 void CopyNSStringAsUTF16LittleEndian(NSString* src, |   21 void CopyNSStringAsUTF16LittleEndian(NSString* src, | 
|   25                                      blink::WebUChar* dest, |   22                                      UChar* dest, | 
|   26                                      size_t dest_len) { |   23                                      size_t dest_len) { | 
|   27   NSData* as16 = [src dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; |   24   NSData* as16 = [src dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; | 
|   28   memset(dest, 0, dest_len); |   25   memset(dest, 0, dest_len); | 
|   29   [as16 getBytes:dest length:dest_len - sizeof(blink::WebUChar)]; |   26   [as16 getBytes:dest length:dest_len - sizeof(UChar)]; | 
|   30 } |   27 } | 
|   31  |   28  | 
|   32 }  // namespace |   29 }  // namespace | 
|   33  |   30  | 
|   34 GameControllerDataFetcherMac::GameControllerDataFetcherMac() {} |   31 GameControllerDataFetcherMac::GameControllerDataFetcherMac() {} | 
|   35  |   32  | 
|   36 GameControllerDataFetcherMac::~GameControllerDataFetcherMac() {} |   33 GameControllerDataFetcherMac::~GameControllerDataFetcherMac() {} | 
|   37  |   34  | 
|   38 GamepadSource GameControllerDataFetcherMac::source() { |   35 GamepadSource GameControllerDataFetcherMac::source() { | 
|   39   return Factory::static_source(); |   36   return Factory::static_source(); | 
|   40 } |   37 } | 
|   41  |   38  | 
|   42 void GameControllerDataFetcherMac::GetGamepadData(bool) { |   39 void GameControllerDataFetcherMac::GetGamepadData(bool) { | 
|   43   NSArray* controllers = [GCController controllers]; |   40   NSArray* controllers = [GCController controllers]; | 
|   44  |   41  | 
|   45   for (GCController* controller in controllers) { |   42   for (GCController* controller in controllers) { | 
|   46     auto extended_gamepad = [controller extendedGamepad]; |   43     auto extended_gamepad = [controller extendedGamepad]; | 
|   47  |   44  | 
|   48     // We only support the extendedGamepad profile, the basic gamepad profile |   45     // We only support the extendedGamepad profile, the basic gamepad profile | 
|   49     // appears to only be for iOS devices. |   46     // appears to only be for iOS devices. | 
|   50     if (!extended_gamepad) |   47     if (!extended_gamepad) | 
|   51       continue; |   48       continue; | 
|   52  |   49  | 
|   53     int player_index = [controller playerIndex]; |   50     int player_index = [controller playerIndex]; | 
|   54     PadState* state = GetPadState(player_index); |   51     PadState* state = GetPadState(player_index); | 
|   55     if (!state) |   52     if (!state) | 
|   56       continue; |   53       continue; | 
|   57  |   54  | 
|   58     WebGamepad& pad = state->data; |   55     Gamepad& pad = state->data; | 
|   59  |   56  | 
|   60     // This first time we encounter a gamepad, set its name, mapping, and |   57     // This first time we encounter a gamepad, set its name, mapping, and | 
|   61     // axes/button counts. This information is static, so it only needs to be |   58     // axes/button counts. This information is static, so it only needs to be | 
|   62     // done once. |   59     // done once. | 
|   63     if (state->active_state == GAMEPAD_NEWLY_ACTIVE) { |   60     if (state->active_state == GAMEPAD_NEWLY_ACTIVE) { | 
|   64       NSString* vendorName = [controller vendorName]; |   61       NSString* vendorName = [controller vendorName]; | 
|   65       NSString* ident = |   62       NSString* ident = | 
|   66           [NSString stringWithFormat:@"%@ (STANDARD GAMEPAD)", |   63           [NSString stringWithFormat:@"%@ (STANDARD GAMEPAD)", | 
|   67                                      vendorName ? vendorName : @"Unknown"]; |   64                                      vendorName ? vendorName : @"Unknown"]; | 
|   68       CopyNSStringAsUTF16LittleEndian(ident, pad.id, sizeof(pad.id)); |   65       CopyNSStringAsUTF16LittleEndian(ident, pad.id, sizeof(pad.id)); | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  104     BUTTON(BUTTON_INDEX_DPAD_UP, [[extended_gamepad dpad] up]); |  101     BUTTON(BUTTON_INDEX_DPAD_UP, [[extended_gamepad dpad] up]); | 
|  105     BUTTON(BUTTON_INDEX_DPAD_DOWN, [[extended_gamepad dpad] down]); |  102     BUTTON(BUTTON_INDEX_DPAD_DOWN, [[extended_gamepad dpad] down]); | 
|  106     BUTTON(BUTTON_INDEX_DPAD_LEFT, [[extended_gamepad dpad] left]); |  103     BUTTON(BUTTON_INDEX_DPAD_LEFT, [[extended_gamepad dpad] left]); | 
|  107     BUTTON(BUTTON_INDEX_DPAD_RIGHT, [[extended_gamepad dpad] right]); |  104     BUTTON(BUTTON_INDEX_DPAD_RIGHT, [[extended_gamepad dpad] right]); | 
|  108  |  105  | 
|  109 #undef BUTTON |  106 #undef BUTTON | 
|  110   } |  107   } | 
|  111 } |  108 } | 
|  112  |  109  | 
|  113 }  // namespace device |  110 }  // namespace device | 
| OLD | NEW |