summaryrefslogtreecommitdiffstats
path: root/ui/chromeos/touch_exploration_controller.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ui/chromeos/touch_exploration_controller.cc')
-rw-r--r--ui/chromeos/touch_exploration_controller.cc189
1 files changed, 8 insertions, 181 deletions
diff --git a/ui/chromeos/touch_exploration_controller.cc b/ui/chromeos/touch_exploration_controller.cc
index 6bc08c7..1a3b8fa 100644
--- a/ui/chromeos/touch_exploration_controller.cc
+++ b/ui/chromeos/touch_exploration_controller.cc
@@ -4,6 +4,7 @@
#include "ui/chromeos/touch_exploration_controller.h"
+#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "ui/aura/client/cursor_client.h"
#include "ui/aura/window.h"
@@ -11,7 +12,6 @@
#include "ui/aura/window_tree_host.h"
#include "ui/events/event.h"
#include "ui/events/event_processor.h"
-#include "ui/gfx/geometry/rect.h"
#define VLOG_STATE() if (VLOG_IS_ON(0)) VlogState(__func__)
#define VLOG_EVENT(event) if (VLOG_IS_ON(0)) VlogEvent(event, __func__)
@@ -19,19 +19,13 @@
namespace ui {
namespace {
-
-// Delay between adjustment sounds.
-const base::TimeDelta kSoundDelay = base::TimeDelta::FromMilliseconds(150);
-
// In ChromeOS, VKEY_LWIN is synonymous for the search key.
const ui::KeyboardCode kChromeOSSearchKey = ui::VKEY_LWIN;
} // namespace
TouchExplorationController::TouchExplorationController(
- aura::Window* root_window,
- TouchExplorationControllerDelegate* delegate)
+ aura::Window* root_window)
: root_window_(root_window),
- delegate_(delegate),
state_(NO_FINGERS_DOWN),
event_handler_for_testing_(NULL),
gesture_provider_(this),
@@ -83,15 +77,6 @@ ui::EventRewriteStatus TouchExplorationController::RewriteEvent(
current_touch_ids_.push_back(touch_id);
touch_locations_.insert(std::pair<int, gfx::PointF>(touch_id, location));
} else if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) {
- // In order to avoid accidentally double tapping when moving off the edge of
- // the screen, the state will be rewritten to NoFingersDown.
- TouchEvent touch_event = static_cast<const TouchEvent&>(event);
- if (FindEdgesWithinBounds(touch_event.location(), kLeavingScreenEdge) !=
- NO_EDGE) {
- if (current_touch_ids_.size() == 0)
- ResetToNoFingersDown();
- }
-
std::vector<int>::iterator it = std::find(
current_touch_ids_.begin(), current_touch_ids_.end(), touch_id);
@@ -136,8 +121,6 @@ ui::EventRewriteStatus TouchExplorationController::RewriteEvent(
return InPassthrough(touch_event, rewritten_event);
case WAIT_FOR_RELEASE:
return InWaitForRelease(touch_event, rewritten_event);
- case SLIDE_GESTURE:
- return InSlideGesture(touch_event, rewritten_event);
}
NOTREACHED();
return ui::EVENT_REWRITE_CONTINUE;
@@ -208,14 +191,6 @@ ui::EventRewriteStatus TouchExplorationController::InSingleTapPressed(
<< "\n Minimum swipe velocity: "
<< gesture_detector_config_.minimum_swipe_velocity;
- // Change to slide gesture if the slide occurred at the right edge.
- int edge = FindEdgesWithinBounds(event.location(), kMaxDistanceFromEdge);
- if (edge & RIGHT_EDGE) {
- state_ = SLIDE_GESTURE;
- VLOG_STATE();
- return InSlideGesture(event, rewritten_event);
- }
-
// If the user moves fast enough from the initial touch location, start
// gesture detection. Otherwise, jump to the touch exploration mode early.
if (velocity > gesture_detector_config_.minimum_swipe_velocity) {
@@ -522,69 +497,6 @@ ui::EventRewriteStatus TouchExplorationController::InWaitForRelease(
return EVENT_REWRITE_DISCARD;
}
-void TouchExplorationController::PlaySoundForTimer() {
- delegate_->PlayVolumeAdjustSound();
-}
-
-ui::EventRewriteStatus TouchExplorationController::InSlideGesture(
- const ui::TouchEvent& event,
- scoped_ptr<ui::Event>* rewritten_event) {
- // The timer should not fire when sliding.
- if (tap_timer_.IsRunning())
- tap_timer_.Stop();
-
- ui::EventType type = event.type();
- // If additional fingers are added before a swipe gesture has been registered,
- // then wait until all fingers have been lifted.
- if (type == ui::ET_TOUCH_PRESSED ||
- event.touch_id() != initial_press_->touch_id()) {
- if (sound_timer_.IsRunning())
- sound_timer_.Stop();
- // Discard any pending gestures.
- ignore_result(gesture_provider_.GetAndResetPendingGestures());
- state_ = WAIT_FOR_RELEASE;
- return EVENT_REWRITE_DISCARD;
- }
-
- // Allows user to return to the edge to adjust the sound if they have left the
- // boundaries.
- int edge = FindEdgesWithinBounds(event.location(), kSlopDistanceFromEdge);
- if (!(edge & RIGHT_EDGE) && (type != ui::ET_TOUCH_RELEASED)) {
- if (sound_timer_.IsRunning()) {
- sound_timer_.Stop();
- }
- return EVENT_REWRITE_DISCARD;
- }
-
- // This can occur if the user leaves the screen edge and then returns to it to
- // continue adjusting the sound.
- if (!sound_timer_.IsRunning()) {
- sound_timer_.Start(FROM_HERE,
- kSoundDelay,
- this,
- &ui::TouchExplorationController::PlaySoundForTimer);
- delegate_->PlayVolumeAdjustSound();
- }
-
- // There should not be more than one finger down.
- DCHECK(current_touch_ids_.size() <= 1);
- if (type == ui::ET_TOUCH_MOVED) {
- gesture_provider_.OnTouchEvent(event);
- gesture_provider_.OnTouchEventAck(false);
- }
- if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) {
- gesture_provider_.OnTouchEvent(event);
- gesture_provider_.OnTouchEventAck(false);
- ignore_result(gesture_provider_.GetAndResetPendingGestures());
- if (current_touch_ids_.size() == 0)
- ResetToNoFingersDown();
- return ui::EVENT_REWRITE_DISCARD;
- }
-
- ProcessGestureEvents();
- return ui::EVENT_REWRITE_DISCARD;
-}
-
void TouchExplorationController::OnTapTimerFired() {
switch (state_) {
case SINGLE_TAP_RELEASED:
@@ -609,7 +521,7 @@ void TouchExplorationController::OnTapTimerFired() {
CreateMouseMoveEvent(initial_press_->location(), initial_press_->flags());
DispatchEvent(mouse_move.get());
last_touch_exploration_.reset(new TouchEvent(*initial_press_));
-}
+ }
void TouchExplorationController::DispatchEvent(ui::Event* event) {
if (event_handler_for_testing_) {
@@ -620,14 +532,12 @@ void TouchExplorationController::DispatchEvent(ui::Event* event) {
root_window_->GetHost()->dispatcher()->OnEventFromSource(event);
}
-void TouchExplorationController::OnGestureEvent(
- ui::GestureEvent* gesture) {
+void TouchExplorationController::OnGestureEvent(ui::GestureEvent* gesture) {
CHECK(gesture->IsGestureEvent());
- ui::EventType type = gesture->type();
VLOG(0) << " \n Gesture Triggered: " << gesture->name();
- if (type == ui::ET_GESTURE_SWIPE && state_ != SLIDE_GESTURE) {
- VLOG(0) << "Swipe!";
- ignore_result(gesture_provider_.GetAndResetPendingGestures());
+ if (gesture->type() == ui::ET_GESTURE_SWIPE) {
+ if (tap_timer_.IsRunning())
+ tap_timer_.Stop();
OnSwipeEvent(gesture);
return;
}
@@ -640,61 +550,11 @@ void TouchExplorationController::ProcessGestureEvents() {
for (ScopedVector<GestureEvent>::iterator i = gestures->begin();
i != gestures->end();
++i) {
- if (state_ == SLIDE_GESTURE)
- SideSlideControl(*i);
- else
- OnGestureEvent(*i);
+ OnGestureEvent(*i);
}
}
}
-void TouchExplorationController::SideSlideControl(ui::GestureEvent* gesture) {
- ui::EventType type = gesture->type();
- if (!gesture->IsScrollGestureEvent())
- return;
-
- if (type == ET_GESTURE_SCROLL_BEGIN) {
- delegate_->PlayVolumeAdjustSound();
- }
-
- if (type == ET_GESTURE_SCROLL_END) {
- if (sound_timer_.IsRunning())
- sound_timer_.Stop();
- delegate_->PlayVolumeAdjustSound();
- }
-
- // If the user is in the corner of the right side of the screen, the volume
- // will be automatically set to 100% or muted depending on which corner they
- // are in. Otherwise, the user will be able to adjust the volume by sliding
- // their finger along the right side of the screen. Volume is relative to
- // where they are on the right side of the screen.
- gfx::Point location = gesture->location();
- int edge = FindEdgesWithinBounds(location, kSlopDistanceFromEdge);
- if (!(edge & RIGHT_EDGE))
- return;
-
- if (edge & TOP_EDGE) {
- delegate_->SetOutputLevel(100);
- return;
- }
- if (edge & BOTTOM_EDGE) {
- delegate_->SetOutputLevel(0);
- return;
- }
-
- location = gesture->location();
- root_window_->GetHost()->ConvertPointFromNativeScreen(&location);
- float volume_adjust_height =
- root_window_->bounds().height() - 2 * kMaxDistanceFromEdge;
- float ratio = (location.y() - kMaxDistanceFromEdge) / volume_adjust_height;
- float volume = 100 - 100 * ratio;
- VLOG(0) << "\n Volume = " << volume << "\n Location = " << location.ToString()
- << "\n Bounds = " << root_window_->bounds().right();
-
- delegate_->SetOutputLevel(int(volume));
-}
-
-
void TouchExplorationController::OnSwipeEvent(ui::GestureEvent* swipe_gesture) {
// A swipe gesture contains details for the direction in which the swipe
// occurred.
@@ -714,34 +574,6 @@ void TouchExplorationController::OnSwipeEvent(ui::GestureEvent* swipe_gesture) {
}
}
-int TouchExplorationController::FindEdgesWithinBounds(gfx::Point point,
- float bounds) {
- // Since GetBoundsInScreen is in DIPs but point is not, then point needs to be
- // converted.
- root_window_->GetHost()->ConvertPointFromNativeScreen(&point);
- gfx::Rect window = root_window_->GetBoundsInScreen();
-
- float left_edge_limit = window.x() + bounds;
- float right_edge_limit = window.right() - bounds;
- float top_edge_limit = window.y() + bounds;
- float bottom_edge_limit = window.bottom() - bounds;
-
- // Bitwise manipulation in order to determine where on the screen the point
- // lies. If more than one bit is turned on, then it is a corner where the two
- // bit/edges intersect. Otherwise, if no bits are turned on, the point must be
- // in the center of the screen.
- int result = NO_EDGE;
- if (point.x() < left_edge_limit)
- result |= LEFT_EDGE;
- if (point.x() > right_edge_limit)
- result |= RIGHT_EDGE;
- if (point.y() < top_edge_limit)
- result |= TOP_EDGE;
- if (point.y() > bottom_edge_limit)
- result |= BOTTOM_EDGE;
- return result;
-}
-
void TouchExplorationController::DispatchShiftSearchKeyEvent(
const ui::KeyboardCode direction) {
// In order to activate the shortcut shift+search+<arrow key>
@@ -791,9 +623,6 @@ void TouchExplorationController::EnterTouchToMouseMode() {
}
void TouchExplorationController::ResetToNoFingersDown() {
- ProcessGestureEvents();
- if (sound_timer_.IsRunning())
- sound_timer_.Stop();
state_ = NO_FINGERS_DOWN;
VLOG_STATE();
if (tap_timer_.IsRunning())
@@ -865,8 +694,6 @@ const char* TouchExplorationController::EnumStateToString(State state) {
return "PASSTHROUGH";
case WAIT_FOR_RELEASE:
return "WAIT_FOR_RELEASE";
- case SLIDE_GESTURE:
- return "SLIDE_GESTURE";
}
return "Not a state";
}