| Index: device/gamepad/gamepad_pad_state_provider.cc
|
| diff --git a/device/gamepad/gamepad_data_fetcher.cc b/device/gamepad/gamepad_pad_state_provider.cc
|
| similarity index 57%
|
| copy from device/gamepad/gamepad_data_fetcher.cc
|
| copy to device/gamepad/gamepad_pad_state_provider.cc
|
| index 749a6f3df1aef6097aa88673201c6f4ee5ab7db1..892fd4d0c10c8828e73b9a118f0efa4c2638acc4 100644
|
| --- a/device/gamepad/gamepad_data_fetcher.cc
|
| +++ b/device/gamepad/gamepad_pad_state_provider.cc
|
| @@ -1,33 +1,68 @@
|
| -// Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "device/gamepad/gamepad_data_fetcher.h"
|
| -
|
| -#include <stddef.h>
|
| -#include <string.h>
|
| +#include "device/gamepad/gamepad_pad_state_provider.h"
|
|
|
| #include <cmath>
|
|
|
| -#include "base/logging.h"
|
| -#include "build/build_config.h"
|
| +#include "device/gamepad/gamepad_data_fetcher.h"
|
| +#include "third_party/WebKit/public/platform/WebGamepads.h"
|
| +
|
| +using blink::WebGamepad;
|
| +using blink::WebGamepads;
|
| +
|
| +namespace device {
|
|
|
| namespace {
|
|
|
| -#if !defined(OS_ANDROID)
|
| const float kMinAxisResetValue = 0.1f;
|
| -#endif
|
|
|
| } // namespace
|
|
|
| -namespace device {
|
| +GamepadPadStateProvider::GamepadPadStateProvider() {
|
| + pad_states_.reset(new PadState[WebGamepads::itemsLengthCap]);
|
|
|
| -using blink::WebGamepad;
|
| -using blink::WebGamepads;
|
| + for (unsigned i = 0; i < WebGamepads::itemsLengthCap; ++i)
|
| + ClearPadState(pad_states_.get()[i]);
|
| +}
|
|
|
| -#if !defined(OS_ANDROID)
|
| -void GamepadDataFetcher::MapAndSanitizeGamepadData(PadState* pad_state,
|
| - WebGamepad* pad) {
|
| +GamepadPadStateProvider::~GamepadPadStateProvider() {}
|
| +
|
| +PadState* GamepadPadStateProvider::GetPadState(GamepadSource source,
|
| + int source_id) {
|
| + // Check to see if the device already has a reserved slot
|
| + PadState* empty_slot = nullptr;
|
| + for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) {
|
| + PadState& state = pad_states_.get()[i];
|
| + if (state.source == source && state.source_id == source_id) {
|
| + // Retrieving the pad state marks this gamepad as active.
|
| + state.active_state = GAMEPAD_ACTIVE;
|
| + return &state;
|
| + }
|
| + if (!empty_slot && state.source == GAMEPAD_SOURCE_NONE)
|
| + empty_slot = &state;
|
| + }
|
| + if (empty_slot) {
|
| + empty_slot->source = source;
|
| + empty_slot->source_id = source_id;
|
| + empty_slot->active_state = GAMEPAD_NEWLY_ACTIVE;
|
| + }
|
| + return empty_slot;
|
| +}
|
| +
|
| +void GamepadPadStateProvider::ClearPadState(PadState& state) {
|
| + memset(&state, 0, sizeof(PadState));
|
| +}
|
| +
|
| +void GamepadPadStateProvider::InitializeDataFetcher(
|
| + GamepadDataFetcher* fetcher) {
|
| + fetcher->InitializeProvider(this);
|
| +}
|
| +
|
| +void GamepadPadStateProvider::MapAndSanitizeGamepadData(PadState* pad_state,
|
| + WebGamepad* pad,
|
| + bool sanitize) {
|
| DCHECK(pad_state);
|
| DCHECK(pad);
|
|
|
| @@ -43,6 +78,11 @@ void GamepadDataFetcher::MapAndSanitizeGamepadData(PadState* pad_state,
|
| else
|
| *pad = pad_state->data;
|
|
|
| + pad->connected = true;
|
| +
|
| + if (!sanitize)
|
| + return;
|
| +
|
| // About sanitization: Gamepads may report input event if the user is not
|
| // interacting with it, due to hardware problems or environmental ones (pad
|
| // has something heavy leaning against an axis.) This may cause user gestures
|
| @@ -82,6 +122,5 @@ void GamepadDataFetcher::MapAndSanitizeGamepadData(PadState* pad_state,
|
| }
|
| }
|
| }
|
| -#endif
|
|
|
| -} // namespace device
|
| +} // namespace device
|
|
|