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

Unified Diff: chrome/browser/android/vr_shell/vr_controller.cc

Issue 2380323003: Refactorings to vr controller code. (Closed)
Patch Set: Created 4 years, 3 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: chrome/browser/android/vr_shell/vr_controller.cc
diff --git a/chrome/browser/android/vr_shell/vr_controller.cc b/chrome/browser/android/vr_shell/vr_controller.cc
index 96ce33ea41a4f3654793cb8e2e5aee01cf66ed2e..6a932bbeba881a4df5e0c0548e4276870f83ee7e 100644
--- a/chrome/browser/android/vr_shell/vr_controller.cc
+++ b/chrome/browser/android/vr_shell/vr_controller.cc
@@ -4,8 +4,6 @@
#include "chrome/browser/android/vr_shell/vr_controller.h"
-#include <android/log.h>
-
#include <cmath>
#include "third_party/WebKit/public/web/WebInputEvent.h"
@@ -16,10 +14,6 @@ namespace vr_shell {
namespace {
-const GestureScroll kDefaultGestureScroll = {{0, 0}, 0, {0, 0}};
-const GestureButtonsChange kDefaultGestureButtonsChange = {{0, 0}, 0, 0};
-const GestureAngularMove kDefaultGestureAngularMove = {{0, 0, 0}, 0};
-
constexpr float kDisplacementScaleFactor = 800.0f;
// A slop represents a small rectangular region around the first touch point of
@@ -129,18 +123,18 @@ void VrController::UpdateState() {
}
}
-void VrController::Update(bool touch_up,
- bool touch_down,
- bool is_touching,
- const gvr::Vec2f position,
- int64_t timestamp) {
+void VrController::Update() {
CHECK(touch_info_ != nullptr) << "touch_info_ not initialized properly.";
- touch_info_->touch_up = touch_up;
- touch_info_->touch_down = touch_down;
- touch_info_->is_touching = is_touching;
+ gvr::Vec2f position;
+ position.x = TouchPosX();
+ position.y = TouchPosY();
+ touch_info_->touch_up = IsTouchUp();
+ touch_info_->touch_down = IsTouchDown();
+ touch_info_->is_touching = IsTouching();
touch_info_->touch_point.position = position;
Vector::ClampTouchpadPosition(&touch_info_->touch_point.position);
- touch_info_->touch_point.timestamp = timestamp;
+ touch_info_->touch_point.timestamp =
+ gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos;
UpdateGestureFromTouchInfo();
}
@@ -156,65 +150,36 @@ void VrController::Initialize(gvr_context* gvr_context) {
controller_api_->Resume();
}
-VrGesture VrController::DetectGesture() {
- if (controller_state_.GetConnectionState() == gvr::kControllerConnected) {
- gvr::Vec2f position;
- position.x = TouchPosX();
- position.y = TouchPosY();
- Update(IsTouchUp(), IsTouchDown(), IsTouching(), position,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos);
- if (GetGestureListSize() > 0 &&
- (GetGesturePtr(0)->type == WebInputEvent::GestureScrollBegin ||
- GetGesturePtr(0)->type == WebInputEvent::GestureScrollUpdate ||
- GetGesturePtr(0)->type == WebInputEvent::GestureScrollEnd)) {
- switch (GetGesturePtr(0)->type) {
- case WebInputEvent::GestureScrollBegin:
- return VrGesture(
- kDefaultGestureScroll,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos,
- GetGesturePtr(0)->displacement.x * kDisplacementScaleFactor,
- GetGesturePtr(0)->displacement.y * kDisplacementScaleFactor,
- WebInputEvent::GestureScrollBegin, Orientation());
- case WebInputEvent::GestureScrollUpdate:
- return VrGesture(
- kDefaultGestureScroll,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos,
- GetGesturePtr(0)->displacement.x * kDisplacementScaleFactor,
- GetGesturePtr(0)->displacement.y * kDisplacementScaleFactor,
- WebInputEvent::GestureScrollUpdate, Orientation());
- case WebInputEvent::GestureScrollEnd:
- return VrGesture(
- kDefaultGestureScroll,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos, 0, 0,
- WebInputEvent::GestureScrollEnd, Orientation());
- default:
- LOG(ERROR) << "Unknown Gesture";
- return VrGesture();
- }
- }
+std::unique_ptr<VrGesture> VrController::DetectGesture() {
+ gesture_.reset(new VrGesture());
cjgrant 2016/10/03 14:27:34 Maybe here, or in a future change, we should cut o
mthiesse 2016/10/03 15:39:15 Done.
+ if (controller_state_.GetConnectionState() != gvr::kControllerConnected) {
+ return std::move(gesture_);
+ }
+ Update();
- if (IsButtonDown(gvr::kControllerButtonClick)) {
- return VrGesture(
- kDefaultGestureButtonsChange,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos, 1, 0,
- Orientation());
- }
- return VrGesture(kDefaultGestureAngularMove,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos,
- gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos,
- Orientation());
+ if (gesture_.get()->type == WebInputEvent::GestureScrollBegin ||
+ gesture_.get()->type == WebInputEvent::GestureScrollUpdate ||
+ gesture_.get()->type == WebInputEvent::GestureScrollEnd) {
+ return std::move(gesture_);
+ }
+
+ if (IsButtonDown(gvr::kControllerButtonClick)) {
+ gesture_->type = WebInputEvent::GestureTap;
+ gesture_->details.buttons.down = 1;
+ gesture_->details.buttons.up = 0;
+ gesture_->details.buttons.pos.x = 0;
+ gesture_->details.buttons.pos.y = 0;
+ return std::move(gesture_);
}
- return VrGesture();
+
+ return std::move(gesture_);
}
void VrController::UpdateGestureFromTouchInfo() {
- // Clear the gesture list.
- gesture_list_.clear();
-
+ gesture_->start_time =
+ gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos;
+ gesture_->end_time =
+ gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos;
switch (state_) {
// User has not put finger on touch pad.
case WAITING:
@@ -234,30 +199,6 @@ void VrController::UpdateGestureFromTouchInfo() {
}
}
-const VrGesture* VrController::GetGesturePtr(const size_t index) {
- CHECK(index < gesture_list_.size()) << "The gesture index exceeds the"
- "size of gesture list.";
- return const_cast<VrGesture*>(&gesture_list_[index]);
-}
-
-void VrController::Update(const gvr_controller_state* controller_state) {
- // Update touch information.
- CHECK(touch_info_ != nullptr) << "touch_info_ not initialized properly.";
- touch_info_->touch_up = gvr_controller_state_get_touch_up(controller_state);
- touch_info_->touch_down =
- gvr_controller_state_get_touch_down(controller_state);
- touch_info_->is_touching = gvr_controller_state_is_touching(controller_state);
- touch_info_->touch_point.position.x =
- gvr_controller_state_get_touch_pos(controller_state).x;
- touch_info_->touch_point.position.y =
- gvr_controller_state_get_touch_pos(controller_state).y;
- Vector::ClampTouchpadPosition(&(touch_info_->touch_point.position));
- touch_info_->touch_point.timestamp =
- gvr_controller_state_get_last_touch_timestamp(controller_state);
-
- UpdateGestureFromTouchInfo();
-}
-
void VrController::HandleWaitingState() {
// User puts finger on touch pad (or when the touch down for current gesture
// is missed, initiate gesture from current touch point).
@@ -281,10 +222,13 @@ void VrController::HandleDetectingState() {
if (UpdateCurrentTouchpoint() && touch_info_->is_touching &&
!InSlop(touch_info_->touch_point.position)) {
state_ = SCROLLING;
- VrGesture gesture;
- gesture.type = WebInputEvent::GestureScrollBegin;
- UpdateGesture(&gesture);
- gesture_list_.push_back(gesture);
+ gesture_->type = WebInputEvent::GestureScrollBegin;
+ UpdateGesture(gesture_.get());
+ gesture_->details.scroll.delta.x =
+ gesture_->displacement.x * kDisplacementScaleFactor;
+ gesture_->details.scroll.delta.y =
+ gesture_->displacement.y * kDisplacementScaleFactor;
+ gesture_->details.scroll.stop_fling = 0;
}
}
@@ -292,18 +236,22 @@ void VrController::HandleScrollingState() {
// Update current touch point.
bool touch_position_changed = UpdateCurrentTouchpoint();
if (touch_info_->touch_up || !(touch_info_->is_touching)) { // gesture ends
bshe 2016/10/03 12:09:23 nit: move comments to a new line
mthiesse 2016/10/03 15:39:15 Done.
- VrGesture scroll_end;
- scroll_end.type = WebInputEvent::GestureScrollEnd;
- UpdateGesture(&scroll_end);
- gesture_list_.push_back(scroll_end);
-
+ gesture_->type = WebInputEvent::GestureScrollEnd;
+ UpdateGesture(gesture_.get());
+ gesture_->details.scroll.delta.x = 0;
+ gesture_->details.scroll.delta.y = 0;
+ gesture_->details.scroll.stop_fling = 0;
Reset();
} else if (touch_position_changed) { // User continues scrolling and there is
bshe 2016/10/03 12:09:23 ditto
mthiesse 2016/10/03 15:39:15 Done.
// a change in touch position.
- VrGesture scroll_update;
- scroll_update.type = WebInputEvent::GestureScrollUpdate;
- UpdateGesture(&scroll_update);
- gesture_list_.push_back(scroll_update);
+ gesture_->type = WebInputEvent::GestureScrollUpdate;
+ UpdateGesture(gesture_.get());
+ gesture_->details.scroll.delta.x =
+ gesture_->displacement.x * kDisplacementScaleFactor;
+ gesture_->details.scroll.delta.y =
+ gesture_->displacement.y * kDisplacementScaleFactor;
+ gesture_->details.scroll.stop_fling = 0;
+ UpdateGesture(gesture_.get());
}
}

Powered by Google App Engine
This is Rietveld 408576698