Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(349)

Unified Diff: device/vr/android/gvr/gvr_gamepad_data_fetcher.cc

Issue 2879973002: Expose Gamepad API instance for Cardboard button (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698