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; |