| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/chromeos/touch_exploration_controller.h" | 5 #include "ui/chromeos/touch_exploration_controller.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "ui/aura/client/cursor_client.h" | 9 #include "ui/aura/client/cursor_client.h" |
| 10 #include "ui/aura/window.h" | 10 #include "ui/aura/window.h" |
| 11 #include "ui/aura/window_event_dispatcher.h" | 11 #include "ui/aura/window_event_dispatcher.h" |
| 12 #include "ui/aura/window_tree_host.h" | 12 #include "ui/aura/window_tree_host.h" |
| 13 #include "ui/events/event.h" | 13 #include "ui/events/event.h" |
| 14 #include "ui/events/event_processor.h" | 14 #include "ui/events/event_processor.h" |
| 15 | 15 |
| 16 #define VLOG_STATE() if (VLOG_IS_ON(0)) VlogState(__func__) | 16 #define VLOG_STATE() if (VLOG_IS_ON(0)) VlogState(__func__) |
| 17 #define VLOG_EVENT(event) if (VLOG_IS_ON(0)) VlogEvent(event, __func__) | 17 #define VLOG_EVENT(event) if (VLOG_IS_ON(0)) VlogEvent(event, __func__) |
| 18 | 18 |
| 19 namespace ui { | 19 namespace ui { |
| 20 | 20 |
| 21 TouchExplorationController::TouchExplorationController( | 21 TouchExplorationController::TouchExplorationController( |
| 22 aura::Window* root_window) | 22 aura::Window* root_window) |
| 23 : root_window_(root_window), | 23 : root_window_(root_window), |
| 24 state_(NO_FINGERS_DOWN), | 24 state_(NO_FINGERS_DOWN), |
| 25 event_handler_for_testing_(NULL), | 25 event_handler_for_testing_(NULL), |
| 26 prev_state_(NO_FINGERS_DOWN), | 26 prev_state_(NO_FINGERS_DOWN) { |
| 27 VLOG_on_(true) { | |
| 28 CHECK(root_window); | 27 CHECK(root_window); |
| 29 root_window->GetHost()->GetEventSource()->AddEventRewriter(this); | 28 root_window->GetHost()->GetEventSource()->AddEventRewriter(this); |
| 30 } | 29 } |
| 31 | 30 |
| 32 | 31 |
| 33 TouchExplorationController::~TouchExplorationController() { | 32 TouchExplorationController::~TouchExplorationController() { |
| 34 root_window_->GetHost()->GetEventSource()->RemoveEventRewriter(this); | 33 root_window_->GetHost()->GetEventSource()->RemoveEventRewriter(this); |
| 35 } | 34 } |
| 36 | 35 |
| 37 void TouchExplorationController::CallTapTimerNowForTesting() { | 36 void TouchExplorationController::CallTapTimerNowForTesting() { |
| 38 DCHECK(tap_timer_.IsRunning()); | 37 DCHECK(tap_timer_.IsRunning()); |
| 39 tap_timer_.Stop(); | 38 tap_timer_.Stop(); |
| 40 OnTapTimerFired(); | 39 OnTapTimerFired(); |
| 41 } | 40 } |
| 42 | 41 |
| 43 void TouchExplorationController::CallTapTimerNowIfRunningForTesting() { | |
| 44 if (tap_timer_.IsRunning()) { | |
| 45 tap_timer_.Stop(); | |
| 46 OnTapTimerFired(); | |
| 47 } | |
| 48 } | |
| 49 | |
| 50 void TouchExplorationController::SetEventHandlerForTesting( | 42 void TouchExplorationController::SetEventHandlerForTesting( |
| 51 ui::EventHandler* event_handler_for_testing) { | 43 ui::EventHandler* event_handler_for_testing) { |
| 52 event_handler_for_testing_ = event_handler_for_testing; | 44 event_handler_for_testing_ = event_handler_for_testing; |
| 53 } | 45 } |
| 54 | 46 |
| 55 bool TouchExplorationController::IsInNoFingersDownStateForTesting() const { | 47 bool TouchExplorationController::IsInNoFingersDownStateForTesting() const { |
| 56 return state_ == NO_FINGERS_DOWN; | 48 return state_ == NO_FINGERS_DOWN; |
| 57 } | 49 } |
| 58 | 50 |
| 59 void TouchExplorationController::SuppressVLOGsForTesting(bool suppress) { | |
| 60 VLOG_on_ = !suppress; | |
| 61 } | |
| 62 | |
| 63 ui::EventRewriteStatus TouchExplorationController::RewriteEvent( | 51 ui::EventRewriteStatus TouchExplorationController::RewriteEvent( |
| 64 const ui::Event& event, | 52 const ui::Event& event, |
| 65 scoped_ptr<ui::Event>* rewritten_event) { | 53 scoped_ptr<ui::Event>* rewritten_event) { |
| 66 if (!event.IsTouchEvent()) { | 54 if (!event.IsTouchEvent()) { |
| 67 if (event.IsKeyEvent()) { | 55 if (event.IsKeyEvent()) { |
| 68 const ui::KeyEvent& key_event = static_cast<const ui::KeyEvent&>(event); | 56 const ui::KeyEvent& key_event = static_cast<const ui::KeyEvent&>(event); |
| 69 VLOG(0) << "\nKeyboard event: " << key_event.name() | 57 VLOG(0) << "\nKeyboard event: " << key_event.name() << "\n" |
| 70 << "\n Key code: " << key_event.key_code() | 58 << " Key code: " << key_event.key_code() |
| 71 << ", Flags: " << key_event.flags() | 59 << ", Flags: " << key_event.flags() |
| 72 << ", Is char: " << key_event.is_char(); | 60 << ", Is char: " << key_event.is_char(); |
| 73 } | 61 } |
| 74 if(event.IsGestureEvent()){ | 62 if(event.IsGestureEvent()){ |
| 75 VLOG(0) << "\n Gesture event " << event.name(); | 63 VLOG(0) << "\n Gesture event " << event.name(); |
| 76 } | 64 } |
| 77 return ui::EVENT_REWRITE_CONTINUE; | 65 return ui::EVENT_REWRITE_CONTINUE; |
| 78 } | 66 } |
| 79 const ui::TouchEvent& touch_event = static_cast<const ui::TouchEvent&>(event); | 67 const ui::TouchEvent& touch_event = static_cast<const ui::TouchEvent&>(event); |
| 80 | 68 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 initial_press_.reset(new TouchEvent(event)); | 149 initial_press_.reset(new TouchEvent(event)); |
| 162 last_unused_finger_event_.reset(new TouchEvent(event)); | 150 last_unused_finger_event_.reset(new TouchEvent(event)); |
| 163 tap_timer_.Start(FROM_HERE, | 151 tap_timer_.Start(FROM_HERE, |
| 164 gesture_detector_config_.double_tap_timeout, | 152 gesture_detector_config_.double_tap_timeout, |
| 165 this, | 153 this, |
| 166 &TouchExplorationController::OnTapTimerFired); | 154 &TouchExplorationController::OnTapTimerFired); |
| 167 state_ = SINGLE_TAP_PRESSED; | 155 state_ = SINGLE_TAP_PRESSED; |
| 168 VLOG_STATE(); | 156 VLOG_STATE(); |
| 169 return ui::EVENT_REWRITE_DISCARD; | 157 return ui::EVENT_REWRITE_DISCARD; |
| 170 } | 158 } |
| 171 NOTREACHED() << "Unexpected event type received: " << event.name();; | 159 NOTREACHED() << "Unexpected event type received."; |
| 172 return ui::EVENT_REWRITE_CONTINUE; | 160 return ui::EVENT_REWRITE_CONTINUE; |
| 173 } | 161 } |
| 174 | 162 |
| 175 ui::EventRewriteStatus TouchExplorationController::InSingleTapPressed( | 163 ui::EventRewriteStatus TouchExplorationController::InSingleTapPressed( |
| 176 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event) { | 164 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event) { |
| 177 const ui::EventType type = event.type(); | 165 const ui::EventType type = event.type(); |
| 178 | 166 |
| 179 if (type == ui::ET_TOUCH_PRESSED) { | 167 if (type == ui::ET_TOUCH_PRESSED) { |
| 180 // Adding a second finger within the timeout period switches to | 168 // Adding a second finger within the timeout period switches to |
| 181 // passing through every event from the second finger and none form the | 169 // passing through every event from the second finger and none form the |
| (...skipping 19 matching lines...) Expand all Loading... |
| 201 // high enough, and touch exploration if the velocity is lower. | 189 // high enough, and touch exploration if the velocity is lower. |
| 202 float delta = (event.location() - initial_press_->location()).Length(); | 190 float delta = (event.location() - initial_press_->location()).Length(); |
| 203 if (delta > gesture_detector_config_.touch_slop) { | 191 if (delta > gesture_detector_config_.touch_slop) { |
| 204 EnterTouchToMouseMode(); | 192 EnterTouchToMouseMode(); |
| 205 state_ = TOUCH_EXPLORATION; | 193 state_ = TOUCH_EXPLORATION; |
| 206 VLOG_STATE(); | 194 VLOG_STATE(); |
| 207 return InTouchExploration(event, rewritten_event); | 195 return InTouchExploration(event, rewritten_event); |
| 208 } | 196 } |
| 209 return EVENT_REWRITE_DISCARD; | 197 return EVENT_REWRITE_DISCARD; |
| 210 } | 198 } |
| 211 NOTREACHED() << "Unexpected event type received: " << event.name();; | 199 NOTREACHED() << "Unexpected event type received."; |
| 212 return ui::EVENT_REWRITE_CONTINUE; | 200 return ui::EVENT_REWRITE_CONTINUE; |
| 213 } | 201 } |
| 214 | 202 |
| 215 ui::EventRewriteStatus | 203 ui::EventRewriteStatus |
| 216 TouchExplorationController::InSingleTapOrTouchExploreReleased( | 204 TouchExplorationController::InSingleTapOrTouchExploreReleased( |
| 217 const ui::TouchEvent& event, | 205 const ui::TouchEvent& event, |
| 218 scoped_ptr<ui::Event>* rewritten_event) { | 206 scoped_ptr<ui::Event>* rewritten_event) { |
| 219 const ui::EventType type = event.type(); | 207 const ui::EventType type = event.type(); |
| 220 if (type == ui::ET_TOUCH_PRESSED) { | 208 if (type == ui::ET_TOUCH_PRESSED) { |
| 221 // This is the second tap in a double-tap (or double tap-hold). | 209 // This is the second tap in a double-tap (or double tap-hold). |
| (...skipping 11 matching lines...) Expand all Loading... |
| 233 state_ = DOUBLE_TAP_PRESSED; | 221 state_ = DOUBLE_TAP_PRESSED; |
| 234 VLOG_STATE(); | 222 VLOG_STATE(); |
| 235 return ui::EVENT_REWRITE_REWRITTEN; | 223 return ui::EVENT_REWRITE_REWRITTEN; |
| 236 } else if (type == ui::ET_TOUCH_RELEASED && !last_touch_exploration_) { | 224 } else if (type == ui::ET_TOUCH_RELEASED && !last_touch_exploration_) { |
| 237 // If the previous press was discarded, we need to also handle its | 225 // If the previous press was discarded, we need to also handle its |
| 238 // release. | 226 // release. |
| 239 if (current_touch_ids_.size() == 0) { | 227 if (current_touch_ids_.size() == 0) { |
| 240 ResetToNoFingersDown(); | 228 ResetToNoFingersDown(); |
| 241 } | 229 } |
| 242 return ui::EVENT_REWRITE_DISCARD; | 230 return ui::EVENT_REWRITE_DISCARD; |
| 243 } else if (type == ui::ET_TOUCH_MOVED){ | |
| 244 return ui::EVENT_REWRITE_DISCARD; | |
| 245 } | 231 } |
| 246 NOTREACHED() << "Unexpected event type received: " << event.name(); | 232 NOTREACHED() << "Unexpected event type received."; |
| 247 return ui::EVENT_REWRITE_CONTINUE; | 233 return ui::EVENT_REWRITE_CONTINUE; |
| 248 } | 234 } |
| 249 | 235 |
| 250 ui::EventRewriteStatus TouchExplorationController::InDoubleTapPressed( | 236 ui::EventRewriteStatus TouchExplorationController::InDoubleTapPressed( |
| 251 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event) { | 237 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event) { |
| 252 const ui::EventType type = event.type(); | 238 const ui::EventType type = event.type(); |
| 253 if (type == ui::ET_TOUCH_PRESSED) { | 239 if (type == ui::ET_TOUCH_PRESSED) { |
| 254 return ui::EVENT_REWRITE_DISCARD; | 240 return ui::EVENT_REWRITE_DISCARD; |
| 255 } else if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) { | 241 } else if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) { |
| 256 if (current_touch_ids_.size() != 0) | 242 if (current_touch_ids_.size() != 0) |
| 257 return EVENT_REWRITE_DISCARD; | 243 return EVENT_REWRITE_DISCARD; |
| 258 | 244 |
| 259 // Rewrite release at location of last touch exploration with the same | 245 // Rewrite release at location of last touch exploration with the same |
| 260 // id as the prevoius press. | 246 // id as the prevoius press. |
| 261 rewritten_event->reset( | 247 rewritten_event->reset( |
| 262 new ui::TouchEvent(ui::ET_TOUCH_RELEASED, | 248 new ui::TouchEvent(ui::ET_TOUCH_RELEASED, |
| 263 last_touch_exploration_->location(), | 249 last_touch_exploration_->location(), |
| 264 initial_press_->touch_id(), | 250 initial_press_->touch_id(), |
| 265 event.time_stamp())); | 251 event.time_stamp())); |
| 266 (*rewritten_event)->set_flags(event.flags()); | 252 (*rewritten_event)->set_flags(event.flags()); |
| 267 ResetToNoFingersDown(); | 253 ResetToNoFingersDown(); |
| 268 return ui::EVENT_REWRITE_REWRITTEN; | 254 return ui::EVENT_REWRITE_REWRITTEN; |
| 269 } else if (type == ui::ET_TOUCH_MOVED) { | 255 } else if (type == ui::ET_TOUCH_MOVED) { |
| 270 return ui::EVENT_REWRITE_DISCARD; | 256 return ui::EVENT_REWRITE_DISCARD; |
| 271 } | 257 } |
| 272 NOTREACHED() << "Unexpected event type received: " << event.name(); | 258 NOTREACHED() << "Unexpected event type received."; |
| 273 return ui::EVENT_REWRITE_CONTINUE; | 259 return ui::EVENT_REWRITE_CONTINUE; |
| 274 } | 260 } |
| 275 | 261 |
| 276 ui::EventRewriteStatus TouchExplorationController::InTouchExploration( | 262 ui::EventRewriteStatus TouchExplorationController::InTouchExploration( |
| 277 const ui::TouchEvent& event, | 263 const ui::TouchEvent& event, |
| 278 scoped_ptr<ui::Event>* rewritten_event) { | 264 scoped_ptr<ui::Event>* rewritten_event) { |
| 279 const ui::EventType type = event.type(); | 265 const ui::EventType type = event.type(); |
| 280 if (type == ui::ET_TOUCH_PRESSED) { | 266 if (type == ui::ET_TOUCH_PRESSED) { |
| 281 // Handle split-tap. | 267 // Handle split-tap. |
| 282 initial_press_.reset(new TouchEvent(event)); | 268 initial_press_.reset(new TouchEvent(event)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 293 return ui::EVENT_REWRITE_REWRITTEN; | 279 return ui::EVENT_REWRITE_REWRITTEN; |
| 294 } else if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) { | 280 } else if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) { |
| 295 initial_press_.reset(new TouchEvent(event)); | 281 initial_press_.reset(new TouchEvent(event)); |
| 296 tap_timer_.Start(FROM_HERE, | 282 tap_timer_.Start(FROM_HERE, |
| 297 gesture_detector_config_.double_tap_timeout, | 283 gesture_detector_config_.double_tap_timeout, |
| 298 this, | 284 this, |
| 299 &TouchExplorationController::OnTapTimerFired); | 285 &TouchExplorationController::OnTapTimerFired); |
| 300 state_ = TOUCH_EXPLORE_RELEASED; | 286 state_ = TOUCH_EXPLORE_RELEASED; |
| 301 VLOG_STATE(); | 287 VLOG_STATE(); |
| 302 } else if (type != ui::ET_TOUCH_MOVED) { | 288 } else if (type != ui::ET_TOUCH_MOVED) { |
| 303 NOTREACHED() << "Unexpected event type received: " << event.name(); | 289 NOTREACHED() << "Unexpected event type received."; |
| 304 return ui::EVENT_REWRITE_CONTINUE; | 290 return ui::EVENT_REWRITE_CONTINUE; |
| 305 } | 291 } |
| 306 | 292 |
| 307 // Rewrite as a mouse-move event. | 293 // Rewrite as a mouse-move event. |
| 308 *rewritten_event = CreateMouseMoveEvent(event.location(), event.flags()); | 294 *rewritten_event = CreateMouseMoveEvent(event.location(), event.flags()); |
| 309 last_touch_exploration_.reset(new TouchEvent(event)); | 295 last_touch_exploration_.reset(new TouchEvent(event)); |
| 310 return ui::EVENT_REWRITE_REWRITTEN; | 296 return ui::EVENT_REWRITE_REWRITTEN; |
| 311 } | 297 } |
| 312 | 298 |
| 299 |
| 313 ui::EventRewriteStatus TouchExplorationController::InTwoToOneFinger( | 300 ui::EventRewriteStatus TouchExplorationController::InTwoToOneFinger( |
| 314 const ui::TouchEvent& event, | 301 const ui::TouchEvent& event, |
| 315 scoped_ptr<ui::Event>* rewritten_event) { | 302 scoped_ptr<ui::Event>* rewritten_event) { |
| 316 // The user should only ever be in TWO_TO_ONE_FINGER with two fingers down. | 303 // The user should only ever be in TWO_TO_ONE_FINGER with two fingers down. |
| 317 // If the user added or removed a finger, the state is changed. | 304 // If the user added or removed a finger, the state is changed. |
| 318 ui::EventType type = event.type(); | 305 ui::EventType type = event.type(); |
| 319 if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) { | 306 if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) { |
| 320 DCHECK(current_touch_ids_.size() == 1); | 307 DCHECK(current_touch_ids_.size() == 1); |
| 321 // Stop passing through the second finger and go to the wait state. | 308 // Stop passing through the second finger and go to the wait state. |
| 322 if (current_touch_ids_.size() == 1) { | 309 if (current_touch_ids_.size() == 1) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 if (event.touch_id() == last_two_to_one_->touch_id()) { | 348 if (event.touch_id() == last_two_to_one_->touch_id()) { |
| 362 last_two_to_one_.reset(new TouchEvent(event)); | 349 last_two_to_one_.reset(new TouchEvent(event)); |
| 363 rewritten_event->reset(new ui::TouchEvent(ui::ET_TOUCH_MOVED, | 350 rewritten_event->reset(new ui::TouchEvent(ui::ET_TOUCH_MOVED, |
| 364 event.location(), | 351 event.location(), |
| 365 event.touch_id(), | 352 event.touch_id(), |
| 366 event.time_stamp())); | 353 event.time_stamp())); |
| 367 (*rewritten_event)->set_flags(event.flags()); | 354 (*rewritten_event)->set_flags(event.flags()); |
| 368 return ui::EVENT_REWRITE_REWRITTEN; | 355 return ui::EVENT_REWRITE_REWRITTEN; |
| 369 } | 356 } |
| 370 } | 357 } |
| 371 NOTREACHED() << "Unexpected event type received: " << event.name(); | 358 NOTREACHED() << "Unexpected event type received"; |
| 372 return ui::EVENT_REWRITE_CONTINUE; | 359 return ui::EVENT_REWRITE_CONTINUE; |
| 373 } | 360 } |
| 374 | 361 |
| 375 ui::EventRewriteStatus TouchExplorationController::InPassthrough( | 362 ui::EventRewriteStatus TouchExplorationController::InPassthrough( |
| 376 const ui::TouchEvent& event, | 363 const ui::TouchEvent& event, |
| 377 scoped_ptr<ui::Event>* rewritten_event) { | 364 scoped_ptr<ui::Event>* rewritten_event) { |
| 378 ui::EventType type = event.type(); | 365 ui::EventType type = event.type(); |
| 379 | 366 |
| 380 if (!(type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED || | 367 if (!(type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED || |
| 381 type == ui::ET_TOUCH_MOVED || type == ui::ET_TOUCH_PRESSED)) { | 368 type == ui::ET_TOUCH_MOVED || type == ui::ET_TOUCH_PRESSED)) { |
| 382 NOTREACHED() << "Unexpected event type received: " << event.name(); | 369 NOTREACHED() << "Unexpected event type received."; |
| 383 return ui::EVENT_REWRITE_CONTINUE; | 370 return ui::EVENT_REWRITE_CONTINUE; |
| 384 } | 371 } |
| 385 | 372 |
| 386 rewritten_event->reset(new ui::TouchEvent( | 373 rewritten_event->reset(new ui::TouchEvent( |
| 387 type, event.location(), event.touch_id(), event.time_stamp())); | 374 type, event.location(), event.touch_id(), event.time_stamp())); |
| 388 (*rewritten_event)->set_flags(event.flags()); | 375 (*rewritten_event)->set_flags(event.flags()); |
| 389 | 376 |
| 390 if (current_touch_ids_.size() == 0) { | 377 if (current_touch_ids_.size() == 0) { |
| 391 ResetToNoFingersDown(); | 378 ResetToNoFingersDown(); |
| 392 } | 379 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 rewritten_event->reset( | 411 rewritten_event->reset( |
| 425 new ui::TouchEvent(ui::ET_TOUCH_RELEASED, | 412 new ui::TouchEvent(ui::ET_TOUCH_RELEASED, |
| 426 last_touch_exploration_->location(), | 413 last_touch_exploration_->location(), |
| 427 initial_press_->touch_id(), | 414 initial_press_->touch_id(), |
| 428 event.time_stamp())); | 415 event.time_stamp())); |
| 429 (*rewritten_event)->set_flags(event.flags()); | 416 (*rewritten_event)->set_flags(event.flags()); |
| 430 state_ = TOUCH_EXPLORATION; | 417 state_ = TOUCH_EXPLORATION; |
| 431 VLOG_STATE(); | 418 VLOG_STATE(); |
| 432 return ui::EVENT_REWRITE_REWRITTEN; | 419 return ui::EVENT_REWRITE_REWRITTEN; |
| 433 } | 420 } |
| 434 NOTREACHED() << "Unexpected event type received: " << event.name(); | 421 NOTREACHED() << "Unexpected event type received."; |
| 435 return ui::EVENT_REWRITE_CONTINUE; | 422 return ui::EVENT_REWRITE_CONTINUE; |
| 436 } | 423 } |
| 437 | 424 |
| 438 ui::EventRewriteStatus TouchExplorationController::InWaitForRelease( | 425 ui::EventRewriteStatus TouchExplorationController::InWaitForRelease( |
| 439 const ui::TouchEvent& event, | 426 const ui::TouchEvent& event, |
| 440 scoped_ptr<ui::Event>* rewritten_event) { | 427 scoped_ptr<ui::Event>* rewritten_event) { |
| 441 ui::EventType type = event.type(); | 428 ui::EventType type = event.type(); |
| 442 if (!(type == ui::ET_TOUCH_PRESSED || type == ui::ET_TOUCH_MOVED || | 429 if (!(type == ui::ET_TOUCH_PRESSED || type == ui::ET_TOUCH_MOVED || |
| 443 type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED)) { | 430 type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED)) { |
| 444 NOTREACHED() << "Unexpected event type received: " << event.name(); | 431 NOTREACHED() << "Unexpected event type received."; |
| 445 return ui::EVENT_REWRITE_CONTINUE; | 432 return ui::EVENT_REWRITE_CONTINUE; |
| 446 } | 433 } |
| 447 if (current_touch_ids_.size() == 0) { | 434 if (current_touch_ids_.size() == 0) { |
| 448 state_ = NO_FINGERS_DOWN; | 435 state_ = NO_FINGERS_DOWN; |
| 449 ResetToNoFingersDown(); | 436 ResetToNoFingersDown(); |
| 450 } | 437 } |
| 451 return EVENT_REWRITE_DISCARD; | 438 return EVENT_REWRITE_DISCARD; |
| 452 } | 439 } |
| 453 | 440 |
| 454 void TouchExplorationController::OnTapTimerFired() { | 441 void TouchExplorationController::OnTapTimerFired() { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 } | 493 } |
| 507 | 494 |
| 508 void TouchExplorationController::ResetToNoFingersDown() { | 495 void TouchExplorationController::ResetToNoFingersDown() { |
| 509 state_ = NO_FINGERS_DOWN; | 496 state_ = NO_FINGERS_DOWN; |
| 510 VLOG_STATE(); | 497 VLOG_STATE(); |
| 511 if (tap_timer_.IsRunning()) | 498 if (tap_timer_.IsRunning()) |
| 512 tap_timer_.Stop(); | 499 tap_timer_.Stop(); |
| 513 } | 500 } |
| 514 | 501 |
| 515 void TouchExplorationController::VlogState(const char* function_name) { | 502 void TouchExplorationController::VlogState(const char* function_name) { |
| 516 if (!VLOG_on_) | |
| 517 return; | |
| 518 if (prev_state_ == state_) | 503 if (prev_state_ == state_) |
| 519 return; | 504 return; |
| 520 prev_state_ = state_; | 505 prev_state_ = state_; |
| 521 const char* state_string = EnumStateToString(state_); | 506 const char* state_string = EnumStateToString(state_); |
| 522 VLOG(0) << "\n Function name: " << function_name | 507 VLOG(0) << "\n Function name: " << function_name |
| 523 << "\n State: " << state_string; | 508 << "\n State: " << state_string; |
| 524 } | 509 } |
| 525 | 510 |
| 526 void TouchExplorationController::VlogEvent(const ui::TouchEvent& touch_event, | 511 void TouchExplorationController::VlogEvent(const ui::TouchEvent& touch_event, |
| 527 const char* function_name) { | 512 const char* function_name) { |
| 528 if (!VLOG_on_) | |
| 529 return; | |
| 530 | |
| 531 CHECK(touch_event.IsTouchEvent()); | 513 CHECK(touch_event.IsTouchEvent()); |
| 532 if (prev_event_ != NULL && | 514 if (prev_event_ != NULL && |
| 533 prev_event_->type() == touch_event.type() && | 515 prev_event_->type() == touch_event.type() && |
| 534 prev_event_->touch_id() == touch_event.touch_id()){ | 516 prev_event_->touch_id() == touch_event.touch_id()){ |
| 535 return; | 517 return; |
| 536 } | 518 } |
| 537 // The above statement prevents events of the same type and id from being | 519 // The above statement prevents events of the same type and id from being |
| 538 // printed in a row. However, if two fingers are down, they would both be | 520 // printed in a row. However, if two fingers are down, they would both be |
| 539 // moving and alternating printing move events unless we check for this. | 521 // moving and alternating printing move events unless we check for this. |
| 540 if (prev_event_ != NULL && | 522 if (prev_event_ != NULL && |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 return "TWO_TO_ONE_FINGER"; | 555 return "TWO_TO_ONE_FINGER"; |
| 574 case PASSTHROUGH: | 556 case PASSTHROUGH: |
| 575 return "PASSTHROUGH"; | 557 return "PASSTHROUGH"; |
| 576 case WAIT_FOR_RELEASE: | 558 case WAIT_FOR_RELEASE: |
| 577 return "WAIT_FOR_RELEASE"; | 559 return "WAIT_FOR_RELEASE"; |
| 578 } | 560 } |
| 579 return "Not a state"; | 561 return "Not a state"; |
| 580 } | 562 } |
| 581 | 563 |
| 582 } // namespace ui | 564 } // namespace ui |
| OLD | NEW |