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

Unified Diff: ui/chromeos/touch_exploration_controller.cc

Issue 2880043002: Implement touch exploration touch typing (Closed)
Patch Set: Remove observer. 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: ui/chromeos/touch_exploration_controller.cc
diff --git a/ui/chromeos/touch_exploration_controller.cc b/ui/chromeos/touch_exploration_controller.cc
index 6fce4a307e29cec40ad781971561826bce3df3f9..c756b0a00543de69c3d6f4706118970b726fa3f4 100644
--- a/ui/chromeos/touch_exploration_controller.cc
+++ b/ui/chromeos/touch_exploration_controller.cc
@@ -72,6 +72,11 @@ void TouchExplorationController::SetExcludeBounds(const gfx::Rect& bounds) {
exclude_bounds_ = bounds;
}
+void TouchExplorationController::SetLiftActivationBounds(
+ const gfx::Rect& bounds) {
+ lift_activation_bounds_ = bounds;
+}
+
ui::EventRewriteStatus TouchExplorationController::RewriteEvent(
const ui::Event& event,
std::unique_ptr<ui::Event>* rewritten_event) {
@@ -323,6 +328,7 @@ ui::EventRewriteStatus TouchExplorationController::InSingleTapPressed(
passthrough_timer_.Stop();
if (current_touch_ids_.size() == 0 &&
event.pointer_details().id == initial_press_->pointer_details().id) {
+ MaybeSendSimulatedTapInLiftActivationBounds(event);
SET_STATE(SINGLE_TAP_RELEASED);
} else if (current_touch_ids_.size() == 0) {
SET_STATE(NO_FINGERS_DOWN);
@@ -433,7 +439,7 @@ ui::EventRewriteStatus TouchExplorationController::InDoubleTapPending(
if (current_touch_ids_.size() != 0)
return EVENT_REWRITE_DISCARD;
- SendSimulatedClick();
+ SendSimulatedClickOrTap();
SET_STATE(NO_FINGERS_DOWN);
return ui::EVENT_REWRITE_DISCARD;
@@ -452,7 +458,7 @@ ui::EventRewriteStatus TouchExplorationController::InTouchReleasePending(
if (current_touch_ids_.size() != 0)
return EVENT_REWRITE_DISCARD;
- SendSimulatedClick();
+ SendSimulatedClickOrTap();
SET_STATE(NO_FINGERS_DOWN);
return ui::EVENT_REWRITE_DISCARD;
}
@@ -473,6 +479,7 @@ ui::EventRewriteStatus TouchExplorationController::InTouchExploration(
} else if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) {
initial_press_.reset(new TouchEvent(event));
StartTapTimer();
+ MaybeSendSimulatedTapInLiftActivationBounds(event);
SET_STATE(TOUCH_EXPLORE_RELEASED);
} else if (type != ui::ET_TOUCH_MOVED) {
NOTREACHED();
@@ -614,7 +621,7 @@ ui::EventRewriteStatus TouchExplorationController::InTouchExploreSecondPress(
if (current_touch_ids_.size() != 1)
return EVENT_REWRITE_DISCARD;
- SendSimulatedClick();
+ SendSimulatedClickOrTap();
SET_STATE(TOUCH_EXPLORATION);
EnterTouchToMouseMode();
@@ -636,19 +643,17 @@ void TouchExplorationController::PlaySoundForTimer() {
delegate_->PlayVolumeAdjustEarcon();
}
-void TouchExplorationController::SendSimulatedClick() {
+void TouchExplorationController::SendSimulatedClickOrTap() {
// If we got an anchor point from ChromeVox, send a double-tap gesture
// and let ChromeVox handle the click.
if (anchor_point_state_ == ANCHOR_POINT_EXPLICITLY_SET) {
delegate_->HandleAccessibilityGesture(ui::AX_GESTURE_CLICK);
return;
}
+ SendSimulatedTap();
+}
- // If we don't have an anchor point, we can't send a simulated click.
- if (anchor_point_state_ == ANCHOR_POINT_NONE)
- return;
-
- // Otherwise send a simulated press/release at the anchor point.
+void TouchExplorationController::SendSimulatedTap() {
std::unique_ptr<ui::TouchEvent> touch_press;
touch_press.reset(new ui::TouchEvent(ui::ET_TOUCH_PRESSED, gfx::Point(),
Now(),
@@ -666,6 +671,16 @@ void TouchExplorationController::SendSimulatedClick() {
DispatchEvent(touch_release.get());
}
+void TouchExplorationController::MaybeSendSimulatedTapInLiftActivationBounds(
+ const ui::TouchEvent& event) {
+ gfx::Point location = event.location();
+ root_window_->GetHost()->ConvertScreenInPixelsToDIP(&location);
+ if (lift_activation_bounds_.Contains(anchor_point_.x(), anchor_point_.y()) &&
+ lift_activation_bounds_.Contains(location)) {
+ SendSimulatedTap();
+ }
+}
+
ui::EventRewriteStatus TouchExplorationController::InSlideGesture(
const ui::TouchEvent& event,
std::unique_ptr<ui::Event>* rewritten_event) {

Powered by Google App Engine
This is Rietveld 408576698