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/gamepad_pad_state_provider.h" | 5 #include "device/gamepad/gamepad_pad_state_provider.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "device/gamepad/gamepad_data_fetcher.h" | 9 #include "device/gamepad/gamepad_data_fetcher.h" |
10 #include "third_party/WebKit/public/platform/WebGamepads.h" | 10 #include "device/gamepad/public/cpp/gamepads.h" |
11 | |
12 using blink::WebGamepad; | |
13 using blink::WebGamepads; | |
14 | 11 |
15 namespace device { | 12 namespace device { |
16 | 13 |
17 namespace { | 14 namespace { |
18 | 15 |
19 const float kMinAxisResetValue = 0.1f; | 16 const float kMinAxisResetValue = 0.1f; |
20 | 17 |
21 } // namespace | 18 } // namespace |
22 | 19 |
23 GamepadPadStateProvider::GamepadPadStateProvider() { | 20 GamepadPadStateProvider::GamepadPadStateProvider() { |
24 pad_states_.reset(new PadState[WebGamepads::kItemsLengthCap]); | 21 pad_states_.reset(new PadState[Gamepads::kItemsLengthCap]); |
25 | 22 |
26 for (unsigned i = 0; i < WebGamepads::kItemsLengthCap; ++i) | 23 for (unsigned i = 0; i < Gamepads::kItemsLengthCap; ++i) |
27 ClearPadState(pad_states_.get()[i]); | 24 ClearPadState(pad_states_.get()[i]); |
28 } | 25 } |
29 | 26 |
30 GamepadPadStateProvider::~GamepadPadStateProvider() {} | 27 GamepadPadStateProvider::~GamepadPadStateProvider() {} |
31 | 28 |
32 PadState* GamepadPadStateProvider::GetPadState(GamepadSource source, | 29 PadState* GamepadPadStateProvider::GetPadState(GamepadSource source, |
33 int source_id) { | 30 int source_id) { |
34 // Check to see if the device already has a reserved slot | 31 // Check to see if the device already has a reserved slot |
35 PadState* empty_slot = nullptr; | 32 PadState* empty_slot = nullptr; |
36 for (size_t i = 0; i < WebGamepads::kItemsLengthCap; ++i) { | 33 for (size_t i = 0; i < Gamepads::kItemsLengthCap; ++i) { |
37 PadState& state = pad_states_.get()[i]; | 34 PadState& state = pad_states_.get()[i]; |
38 if (state.source == source && state.source_id == source_id) { | 35 if (state.source == source && state.source_id == source_id) { |
39 // Retrieving the pad state marks this gamepad as active. | 36 // Retrieving the pad state marks this gamepad as active. |
40 state.active_state = GAMEPAD_ACTIVE; | 37 state.active_state = GAMEPAD_ACTIVE; |
41 return &state; | 38 return &state; |
42 } | 39 } |
43 if (!empty_slot && state.source == GAMEPAD_SOURCE_NONE) | 40 if (!empty_slot && state.source == GAMEPAD_SOURCE_NONE) |
44 empty_slot = &state; | 41 empty_slot = &state; |
45 } | 42 } |
46 if (empty_slot) { | 43 if (empty_slot) { |
47 empty_slot->source = source; | 44 empty_slot->source = source; |
48 empty_slot->source_id = source_id; | 45 empty_slot->source_id = source_id; |
49 empty_slot->active_state = GAMEPAD_NEWLY_ACTIVE; | 46 empty_slot->active_state = GAMEPAD_NEWLY_ACTIVE; |
50 } | 47 } |
51 return empty_slot; | 48 return empty_slot; |
52 } | 49 } |
53 | 50 |
54 void GamepadPadStateProvider::ClearPadState(PadState& state) { | 51 void GamepadPadStateProvider::ClearPadState(PadState& state) { |
55 memset(&state, 0, sizeof(PadState)); | 52 memset(&state, 0, sizeof(PadState)); |
56 } | 53 } |
57 | 54 |
58 void GamepadPadStateProvider::InitializeDataFetcher( | 55 void GamepadPadStateProvider::InitializeDataFetcher( |
59 GamepadDataFetcher* fetcher) { | 56 GamepadDataFetcher* fetcher) { |
60 fetcher->InitializeProvider(this); | 57 fetcher->InitializeProvider(this); |
61 } | 58 } |
62 | 59 |
63 void GamepadPadStateProvider::MapAndSanitizeGamepadData(PadState* pad_state, | 60 void GamepadPadStateProvider::MapAndSanitizeGamepadData(PadState* pad_state, |
64 WebGamepad* pad, | 61 Gamepad* pad, |
65 bool sanitize) { | 62 bool sanitize) { |
66 DCHECK(pad_state); | 63 DCHECK(pad_state); |
67 DCHECK(pad); | 64 DCHECK(pad); |
68 | 65 |
69 if (!pad_state->data.connected) { | 66 if (!pad_state->data.connected) { |
70 memset(pad, 0, sizeof(WebGamepad)); | 67 memset(pad, 0, sizeof(Gamepad)); |
71 return; | 68 return; |
72 } | 69 } |
73 | 70 |
74 // Copy the current state to the output buffer, using the mapping | 71 // Copy the current state to the output buffer, using the mapping |
75 // function, if there is one available. | 72 // function, if there is one available. |
76 if (pad_state->mapper) | 73 if (pad_state->mapper) |
77 pad_state->mapper(pad_state->data, pad); | 74 pad_state->mapper(pad_state->data, pad); |
78 else | 75 else |
79 *pad = pad_state->data; | 76 *pad = pad_state->data; |
80 | 77 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 } else { | 114 } else { |
118 pad->buttons[button].pressed = false; | 115 pad->buttons[button].pressed = false; |
119 pad->buttons[button].value = 0.0f; | 116 pad->buttons[button].value = 0.0f; |
120 } | 117 } |
121 } | 118 } |
122 } | 119 } |
123 } | 120 } |
124 } | 121 } |
125 | 122 |
126 } // namespace device | 123 } // namespace device |
OLD | NEW |