| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/base/gestures/gesture_sequence.h" | 5 #include "ui/base/gestures/gesture_sequence.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 | 241 |
| 242 // NOTE: when modifying these state transitions, also update gestures.dot | 242 // NOTE: when modifying these state transitions, also update gestures.dot |
| 243 scoped_ptr<Gestures> gestures(new Gestures()); | 243 scoped_ptr<Gestures> gestures(new Gestures()); |
| 244 GesturePoint& point = GesturePointForEvent(event); | 244 GesturePoint& point = GesturePointForEvent(event); |
| 245 point.UpdateValues(event); | 245 point.UpdateValues(event); |
| 246 RecreateBoundingBox(); | 246 RecreateBoundingBox(); |
| 247 flags_ = event.GetEventFlags(); | 247 flags_ = event.GetEventFlags(); |
| 248 const int point_id = points_[event.GetTouchId()].point_id(); | 248 const int point_id = points_[event.GetTouchId()].point_id(); |
| 249 if (point_id < 0) | 249 if (point_id < 0) |
| 250 return NULL; | 250 return NULL; |
| 251 |
| 252 // Send GESTURE_BEGIN for any touch pressed. |
| 253 if (event.GetEventType() == ui::ET_TOUCH_PRESSED) |
| 254 AppendBeginGestureEvent(point, gestures.get()); |
| 255 |
| 251 switch (Signature(state_, point_id, event.GetEventType(), false)) { | 256 switch (Signature(state_, point_id, event.GetEventType(), false)) { |
| 252 case GST_NO_GESTURE_FIRST_PRESSED: | 257 case GST_NO_GESTURE_FIRST_PRESSED: |
| 253 TouchDown(event, point, gestures.get()); | 258 TouchDown(event, point, gestures.get()); |
| 254 set_state(GS_PENDING_SYNTHETIC_CLICK); | 259 set_state(GS_PENDING_SYNTHETIC_CLICK); |
| 255 break; | 260 break; |
| 256 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: | 261 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: |
| 257 if (Click(event, point, gestures.get())) | 262 if (Click(event, point, gestures.get())) |
| 258 point.UpdateForTap(); | 263 point.UpdateForTap(); |
| 259 set_state(GS_NO_GESTURE); | 264 set_state(GS_NO_GESTURE); |
| 260 break; | 265 break; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 // Nothing else to do if we have more than 2 fingers active, since after | 349 // Nothing else to do if we have more than 2 fingers active, since after |
| 345 // the release/cancel, there are still enough fingers to do pinch. | 350 // the release/cancel, there are still enough fingers to do pinch. |
| 346 // pinch_distance_current_ and pinch_distance_start_ will be updated | 351 // pinch_distance_current_ and pinch_distance_start_ will be updated |
| 347 // when the bounding-box is updated. | 352 // when the bounding-box is updated. |
| 348 } | 353 } |
| 349 ResetVelocities(); | 354 ResetVelocities(); |
| 350 break; | 355 break; |
| 351 case GST_PINCH_THIRD_PRESSED: | 356 case GST_PINCH_THIRD_PRESSED: |
| 352 case GST_PINCH_FOURTH_PRESSED: | 357 case GST_PINCH_FOURTH_PRESSED: |
| 353 case GST_PINCH_FIFTH_PRESSED: | 358 case GST_PINCH_FIFTH_PRESSED: |
| 354 AppendTapDownGestureEvent(point, gestures.get()); | |
| 355 pinch_distance_current_ = BoundingBoxDiagonal(bounding_box_); | 359 pinch_distance_current_ = BoundingBoxDiagonal(bounding_box_); |
| 356 pinch_distance_start_ = pinch_distance_current_; | 360 pinch_distance_start_ = pinch_distance_current_; |
| 357 break; | 361 break; |
| 358 } | 362 } |
| 359 | 363 |
| 360 if (event.GetEventType() == ui::ET_TOUCH_RELEASED || | 364 if (event.GetEventType() == ui::ET_TOUCH_RELEASED || |
| 361 event.GetEventType() == ui::ET_TOUCH_CANCELLED) | 365 event.GetEventType() == ui::ET_TOUCH_CANCELLED) |
| 362 AppendTapUpGestureEvent(point, gestures.get()); | 366 AppendEndGestureEvent(point, gestures.get()); |
| 363 | 367 |
| 364 if (state_ != last_state) | 368 if (state_ != last_state) |
| 365 DVLOG(4) << "Gesture Sequence" | 369 DVLOG(4) << "Gesture Sequence" |
| 366 << " State: " << state_ | 370 << " State: " << state_ |
| 367 << " touch id: " << event.GetTouchId(); | 371 << " touch id: " << event.GetTouchId(); |
| 368 | 372 |
| 369 if (last_state == GS_PENDING_SYNTHETIC_CLICK && state_ != last_state) | 373 if (last_state == GS_PENDING_SYNTHETIC_CLICK && state_ != last_state) |
| 370 long_press_timer_->Stop(); | 374 long_press_timer_->Stop(); |
| 371 | 375 |
| 372 // The set of point_ids must be contiguous and include 0. | 376 // The set of point_ids must be contiguous and include 0. |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 return false; | 473 return false; |
| 470 } | 474 } |
| 471 | 475 |
| 472 void GestureSequence::AppendTapDownGestureEvent(const GesturePoint& point, | 476 void GestureSequence::AppendTapDownGestureEvent(const GesturePoint& point, |
| 473 Gestures* gestures) { | 477 Gestures* gestures) { |
| 474 gestures->push_back(helper_->CreateGestureEvent( | 478 gestures->push_back(helper_->CreateGestureEvent( |
| 475 ui::ET_GESTURE_TAP_DOWN, | 479 ui::ET_GESTURE_TAP_DOWN, |
| 476 point.first_touch_position(), | 480 point.first_touch_position(), |
| 477 flags_, | 481 flags_, |
| 478 base::Time::FromDoubleT(point.last_touch_time()), | 482 base::Time::FromDoubleT(point.last_touch_time()), |
| 483 0, 0.f, 1 << point.touch_id())); |
| 484 } |
| 485 |
| 486 void GestureSequence::AppendBeginGestureEvent(const GesturePoint& point, |
| 487 Gestures* gestures) { |
| 488 gestures->push_back(helper_->CreateGestureEvent( |
| 489 ui::ET_GESTURE_BEGIN, |
| 490 point.first_touch_position(), |
| 491 flags_, |
| 492 base::Time::FromDoubleT(point.last_touch_time()), |
| 479 point_count_, 0.f, 1 << point.touch_id())); | 493 point_count_, 0.f, 1 << point.touch_id())); |
| 480 } | 494 } |
| 481 | 495 |
| 482 void GestureSequence::AppendTapUpGestureEvent(const GesturePoint& point, | 496 void GestureSequence::AppendEndGestureEvent(const GesturePoint& point, |
| 483 Gestures* gestures) { | 497 Gestures* gestures) { |
| 484 gestures->push_back(helper_->CreateGestureEvent( | 498 gestures->push_back(helper_->CreateGestureEvent( |
| 485 ui::ET_GESTURE_TAP_UP, | 499 ui::ET_GESTURE_END, |
| 486 point.first_touch_position(), | 500 point.first_touch_position(), |
| 487 flags_, | 501 flags_, |
| 488 base::Time::FromDoubleT(point.last_touch_time()), | 502 base::Time::FromDoubleT(point.last_touch_time()), |
| 489 point_count_, 0.f, 1 << point.touch_id())); | 503 point_count_, 0.f, 1 << point.touch_id())); |
| 490 } | 504 } |
| 491 | 505 |
| 492 void GestureSequence::AppendClickGestureEvent(const GesturePoint& point, | 506 void GestureSequence::AppendClickGestureEvent(const GesturePoint& point, |
| 493 Gestures* gestures) { | 507 Gestures* gestures) { |
| 494 gfx::Rect er = point.enclosing_rectangle(); | 508 gfx::Rect er = point.enclosing_rectangle(); |
| 495 gfx::Point center = er.CenterPoint(); | 509 gfx::Point center = er.CenterPoint(); |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 895 sign_y = 0; | 909 sign_y = 0; |
| 896 else | 910 else |
| 897 sign_x = 0; | 911 sign_x = 0; |
| 898 | 912 |
| 899 AppendSwipeGesture(point, sign_x, sign_y, gestures); | 913 AppendSwipeGesture(point, sign_x, sign_y, gestures); |
| 900 | 914 |
| 901 return true; | 915 return true; |
| 902 } | 916 } |
| 903 | 917 |
| 904 } // namespace ui | 918 } // namespace ui |
| OLD | NEW |