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

Side by Side Diff: ui/base/gestures/gesture_sequence.cc

Issue 10826209: gestures: Generate only either scroll-end or fling-start events at the end of a scroll gesture. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove-webkit-hack Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/aura/gestures/gesture_recognizer_unittest.cc ('k') | ui/views/events/event.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 float x_velocity, 635 float x_velocity,
636 float y_velocity) { 636 float y_velocity) {
637 float railed_x_velocity = x_velocity; 637 float railed_x_velocity = x_velocity;
638 float railed_y_velocity = y_velocity; 638 float railed_y_velocity = y_velocity;
639 639
640 if (scroll_type_ == ST_HORIZONTAL) 640 if (scroll_type_ == ST_HORIZONTAL)
641 railed_y_velocity = 0; 641 railed_y_velocity = 0;
642 else if (scroll_type_ == ST_VERTICAL) 642 else if (scroll_type_ == ST_VERTICAL)
643 railed_x_velocity = 0; 643 railed_x_velocity = 0;
644 644
645 // TODO(rjkroege): It is conceivable that we could suppress sending the
646 // GestureScrollEnd if it is immediately followed by a GestureFlingStart.
647 gestures->push_back(CreateGestureEvent(
648 GestureEventDetails(ui::ET_GESTURE_SCROLL_END, 0, 0),
649 location,
650 flags_,
651 base::Time::FromDoubleT(point.last_touch_time()),
652 1 << point.touch_id()));
653
654 if (railed_x_velocity != 0 || railed_y_velocity != 0) { 645 if (railed_x_velocity != 0 || railed_y_velocity != 0) {
655 // TODO(sad|rjkroege): fling-curve is currently configured to work well with 646 // TODO(sad|rjkroege): fling-curve is currently configured to work well with
656 // touchpad scroll-events. This curve needs to be adjusted to work correctly 647 // touchpad scroll-events. This curve needs to be adjusted to work correctly
657 // with both touchpad and touchscreen. Until then, scale quadratically. 648 // with both touchpad and touchscreen. Until then, scale quadratically.
658 // http://crbug.com/120154 649 // http://crbug.com/120154
659 const float velocity_scaling = 1.f / 900.f; 650 const float velocity_scaling = 1.f / 900.f;
660 651
661 gestures->push_back(CreateGestureEvent( 652 gestures->push_back(CreateGestureEvent(
662 GestureEventDetails(ui::ET_SCROLL_FLING_START, 653 GestureEventDetails(ui::ET_SCROLL_FLING_START,
663 velocity_scaling * railed_x_velocity * fabsf(railed_x_velocity), 654 velocity_scaling * railed_x_velocity * fabsf(railed_x_velocity),
664 velocity_scaling * railed_y_velocity * fabsf(railed_y_velocity)), 655 velocity_scaling * railed_y_velocity * fabsf(railed_y_velocity)),
665 location, 656 location,
666 flags_, 657 flags_,
667 base::Time::FromDoubleT(point.last_touch_time()), 658 base::Time::FromDoubleT(point.last_touch_time()),
668 1 << point.touch_id())); 659 1 << point.touch_id()));
660 } else {
661 gestures->push_back(CreateGestureEvent(
662 GestureEventDetails(ui::ET_GESTURE_SCROLL_END, 0, 0),
663 location,
664 flags_,
665 base::Time::FromDoubleT(point.last_touch_time()),
666 1 << point.touch_id()));
669 } 667 }
670 } 668 }
671 669
672 void GestureSequence::AppendScrollGestureUpdate(const GesturePoint& point, 670 void GestureSequence::AppendScrollGestureUpdate(const GesturePoint& point,
673 const gfx::Point& location, 671 const gfx::Point& location,
674 Gestures* gestures) { 672 Gestures* gestures) {
675 gfx::Point current_center = bounding_box_.CenterPoint(); 673 gfx::Point current_center = bounding_box_.CenterPoint();
676 int dx = current_center.x() - bounding_box_last_center_.x(); 674 int dx = current_center.x() - bounding_box_last_center_.x();
677 int dy = current_center.y() - bounding_box_last_center_.y(); 675 int dy = current_center.y() - bounding_box_last_center_.y();
678 if (scroll_type_ == ST_HORIZONTAL) 676 if (scroll_type_ == ST_HORIZONTAL)
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
1028 return; 1026 return;
1029 1027
1030 // Since long press timer has been started, there should be a non-NULL point. 1028 // Since long press timer has been started, there should be a non-NULL point.
1031 const GesturePoint* point = GetPointByPointId(0); 1029 const GesturePoint* point = GetPointByPointId(0);
1032 if (!ui::gestures::IsInsideManhattanSquare(point->first_touch_position(), 1030 if (!ui::gestures::IsInsideManhattanSquare(point->first_touch_position(),
1033 event.GetLocation())) 1031 event.GetLocation()))
1034 long_press_timer_->Stop(); 1032 long_press_timer_->Stop();
1035 } 1033 }
1036 1034
1037 } // namespace ui 1035 } // namespace ui
OLDNEW
« no previous file with comments | « ui/aura/gestures/gesture_recognizer_unittest.cc ('k') | ui/views/events/event.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698