| Index: device/vr/android/gvr/gvr_gamepad_data_fetcher.cc
|
| diff --git a/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc b/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc
|
| index 8d0bb87788fab6b627f83f9bc717672999cc7fbc..a3e7ee56cc761663e60cd412161324bac2968ed2 100644
|
| --- a/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc
|
| +++ b/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc
|
| @@ -26,8 +26,11 @@ void CopyToUString(UChar* dest, size_t dest_length, base::string16 src) {
|
| } // namespace
|
|
|
| GvrGamepadDataFetcher::Factory::Factory(GvrGamepadDataProvider* data_provider,
|
| - unsigned int display_id)
|
| - : data_provider_(data_provider), display_id_(display_id) {
|
| + unsigned int display_id,
|
| + bool only_report_screen)
|
| + : data_provider_(data_provider),
|
| + display_id_(display_id),
|
| + only_report_screen_(only_report_screen) {
|
| DVLOG(1) << __FUNCTION__ << "=" << this;
|
| }
|
|
|
| @@ -37,7 +40,8 @@ GvrGamepadDataFetcher::Factory::~Factory() {
|
|
|
| std::unique_ptr<GamepadDataFetcher>
|
| GvrGamepadDataFetcher::Factory::CreateDataFetcher() {
|
| - return base::MakeUnique<GvrGamepadDataFetcher>(data_provider_, display_id_);
|
| + return base::MakeUnique<GvrGamepadDataFetcher>(data_provider_, display_id_,
|
| + only_report_screen_);
|
| }
|
|
|
| GamepadSource GvrGamepadDataFetcher::Factory::source() {
|
| @@ -46,8 +50,9 @@ GamepadSource GvrGamepadDataFetcher::Factory::source() {
|
|
|
| GvrGamepadDataFetcher::GvrGamepadDataFetcher(
|
| GvrGamepadDataProvider* data_provider,
|
| - unsigned int display_id)
|
| - : display_id_(display_id) {
|
| + unsigned int display_id,
|
| + bool only_report_screen)
|
| + : display_id_(display_id), only_report_screen_(only_report_screen) {
|
| // Called on UI thread.
|
| DVLOG(1) << __FUNCTION__ << "=" << this;
|
| data_provider->RegisterGamepadDataFetcher(this);
|
| @@ -73,7 +78,7 @@ void GvrGamepadDataFetcher::SetGamepadData(GvrGamepadData data) {
|
| void GvrGamepadDataFetcher::GetGamepadData(bool devices_changed_hint) {
|
| // Called from gamepad polling thread.
|
|
|
| - PadState* state = GetPadState(0);
|
| + PadState* state = GetPadState(only_report_screen_ ? 0 : 1);
|
| if (!state)
|
| return;
|
|
|
| @@ -86,22 +91,54 @@ void GvrGamepadDataFetcher::GetGamepadData(bool devices_changed_hint) {
|
| // This is the first time we've seen this device, so do some one-time
|
| // initialization
|
| pad.connected = true;
|
| - CopyToUString(pad.id, Gamepad::kIdLengthCap,
|
| - base::UTF8ToUTF16("Daydream Controller"));
|
| + if (only_report_screen_) {
|
| + CopyToUString(pad.id, Gamepad::kIdLengthCap,
|
| + base::UTF8ToUTF16("Cardboard Controller"));
|
| + } else {
|
| + CopyToUString(pad.id, Gamepad::kIdLengthCap,
|
| + base::UTF8ToUTF16("Daydream Controller"));
|
| + }
|
| CopyToUString(pad.mapping, Gamepad::kMappingLengthCap,
|
| base::UTF8ToUTF16(""));
|
| pad.buttons_length = 1;
|
| - pad.axes_length = 2;
|
| + pad.axes_length = only_report_screen_ ? 2 : 0;
|
|
|
| pad.display_id = display_id_;
|
|
|
| - pad.hand =
|
| - provided_data.right_handed ? GamepadHand::kRight : GamepadHand::kLeft;
|
| + pad.hand = only_report_screen_
|
| + ? GamepadHand::kNone
|
| + : provided_data.right_handed ? GamepadHand::kRight
|
| + : GamepadHand::kLeft;
|
| }
|
|
|
| pad.timestamp = provided_data.timestamp;
|
|
|
| - if (provided_data.is_touching) {
|
| + if (only_report_screen_) {
|
| + GetCardboardGamepadData(pad, provided_data);
|
| + } else {
|
| + GetDaydreamGamepadData(pad, provided_data);
|
| + }
|
| +}
|
| +
|
| +void GvrGamepadDataFetcher::GetCardboardGamepadData(
|
| + Gamepad& pad,
|
| + const GvrGamepadData& provided_data) {
|
| + bool pressed = provided_data.is_screen_touching;
|
| + pad.buttons[0].touched = pressed;
|
| + pad.buttons[0].pressed = pressed;
|
| + pad.buttons[0].value = pressed ? 1.0f : 0.0f;
|
| + pad.pose.not_null = false;
|
| +
|
| + static bool last = false;
|
| + if (last != pressed) {
|
| + last = pressed;
|
| + }
|
| +}
|
| +
|
| +void GvrGamepadDataFetcher::GetDaydreamGamepadData(
|
| + Gamepad& pad,
|
| + const GvrGamepadData& provided_data) {
|
| + if (provided_data.is_controller_touching) {
|
| gfx::Vector2dF touch_position = provided_data.touch_pos;
|
| pad.axes[0] = (touch_position.x() * 2.0f) - 1.0f;
|
| pad.axes[1] = (touch_position.y() * 2.0f) - 1.0f;
|
| @@ -110,7 +147,7 @@ void GvrGamepadDataFetcher::GetGamepadData(bool devices_changed_hint) {
|
| pad.axes[1] = 0.0f;
|
| }
|
|
|
| - pad.buttons[0].touched = provided_data.is_touching;
|
| + pad.buttons[0].touched = provided_data.is_controller_touching;
|
| pad.buttons[0].pressed = provided_data.controller_button_pressed;
|
| pad.buttons[0].value = pad.buttons[0].pressed ? 1.0f : 0.0f;
|
|
|
|
|