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

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

Issue 16018006: Generate tap gesture with tap_count = 3 for triple-tap (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: fix sky's comment Created 7 years, 6 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
« no previous file with comments | « ui/base/gestures/gesture_point.h ('k') | ui/base/gestures/gesture_sequence.cc » ('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_point.h" 5 #include "ui/base/gestures/gesture_point.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "ui/base/events/event.h" 10 #include "ui/base/events/event.h"
11 #include "ui/base/events/event_constants.h" 11 #include "ui/base/events/event_constants.h"
12 #include "ui/base/gestures/gesture_configuration.h" 12 #include "ui/base/gestures/gesture_configuration.h"
13 #include "ui/base/gestures/gesture_types.h" 13 #include "ui/base/gestures/gesture_types.h"
14 #include "ui/base/gestures/gesture_util.h" 14 #include "ui/base/gestures/gesture_util.h"
15 15
16 namespace ui { 16 namespace ui {
17 17
18 GesturePoint::GesturePoint() 18 GesturePoint::GesturePoint()
19 : first_touch_time_(0.0), 19 : first_touch_time_(0.0),
20 second_last_touch_time_(0.0), 20 second_last_touch_time_(0.0),
21 last_touch_time_(0.0), 21 last_touch_time_(0.0),
22 second_last_tap_time_(0.0),
22 last_tap_time_(0.0), 23 last_tap_time_(0.0),
23 velocity_calculator_( 24 velocity_calculator_(
24 GestureConfiguration::points_buffered_for_velocity()), 25 GestureConfiguration::points_buffered_for_velocity()),
25 point_id_(-1), 26 point_id_(-1),
26 touch_id_(-1) { 27 touch_id_(-1) {
27 } 28 }
28 29
29 GesturePoint::~GesturePoint() {} 30 GesturePoint::~GesturePoint() {}
30 31
31 void GesturePoint::Reset() { 32 void GesturePoint::Reset() {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 velocity_calculator_.PointSeen(event.location().x(), 70 velocity_calculator_.PointSeen(event.location().x(),
70 event.location().y(), 71 event.location().y(),
71 event_timestamp_microseconds); 72 event_timestamp_microseconds);
72 } 73 }
73 74
74 UpdateEnclosingRectangle(event); 75 UpdateEnclosingRectangle(event);
75 } 76 }
76 77
77 void GesturePoint::UpdateForTap() { 78 void GesturePoint::UpdateForTap() {
78 // Update the tap-position and time, and reset every other state. 79 // Update the tap-position and time, and reset every other state.
80 second_last_tap_position_ = last_tap_position_;
81 second_last_tap_time_ = last_tap_time_;
79 last_tap_time_ = last_touch_time_; 82 last_tap_time_ = last_touch_time_;
80 last_tap_position_ = last_touch_position_; 83 last_tap_position_ = last_touch_position_;
81 } 84 }
82 85
83 void GesturePoint::UpdateForScroll() { 86 void GesturePoint::UpdateForScroll() {
84 second_last_touch_position_ = last_touch_position_; 87 second_last_touch_position_ = last_touch_position_;
85 second_last_touch_time_ = last_touch_time_; 88 second_last_touch_time_ = last_touch_time_;
86 same_direction_count_ = gfx::Vector2d(); 89 same_direction_count_ = gfx::Vector2d();
87 } 90 }
88 91
89 bool GesturePoint::IsInClickWindow(const TouchEvent& event) const { 92 bool GesturePoint::IsInClickWindow(const TouchEvent& event) const {
90 return IsInClickTimeWindow() && IsInsideManhattanSquare(event); 93 return IsInClickTimeWindow() && IsInsideManhattanSquare(event);
91 } 94 }
92 95
93 bool GesturePoint::IsInDoubleClickWindow(const TouchEvent& event) const { 96 bool GesturePoint::IsInDoubleClickWindow(const TouchEvent& event) const {
94 return IsInSecondClickTimeWindow() && 97 return IsInClickAggregateTimeWindow(last_tap_time_, last_touch_time_) &&
95 IsSecondClickInsideManhattanSquare(event); 98 IsPointInsideManhattanSquare(event.location(), last_tap_position_);
99 }
100
101 bool GesturePoint::IsInTripleClickWindow(const TouchEvent& event) const {
102 return IsInClickAggregateTimeWindow(last_tap_time_, last_touch_time_) &&
103 IsInClickAggregateTimeWindow(second_last_tap_time_, last_tap_time_) &&
104 IsPointInsideManhattanSquare(event.location(), last_tap_position_) &&
105 IsPointInsideManhattanSquare(last_tap_position_,
106 second_last_tap_position_);
96 } 107 }
97 108
98 bool GesturePoint::IsInScrollWindow(const TouchEvent& event) const { 109 bool GesturePoint::IsInScrollWindow(const TouchEvent& event) const {
99 return event.type() == ui::ET_TOUCH_MOVED && 110 return event.type() == ui::ET_TOUCH_MOVED &&
100 !IsInsideManhattanSquare(event); 111 !IsInsideManhattanSquare(event);
101 } 112 }
102 113
103 bool GesturePoint::IsInFlickWindow(const TouchEvent& event) { 114 bool GesturePoint::IsInFlickWindow(const TouchEvent& event) {
104 return IsOverMinFlickSpeed() && 115 return IsOverMinFlickSpeed() &&
105 event.type() != ui::ET_TOUCH_CANCELLED; 116 event.type() != ui::ET_TOUCH_CANCELLED;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 } 165 }
155 166
156 bool GesturePoint::IsInClickTimeWindow() const { 167 bool GesturePoint::IsInClickTimeWindow() const {
157 double duration = last_touch_time_ - first_touch_time_; 168 double duration = last_touch_time_ - first_touch_time_;
158 return duration >= 169 return duration >=
159 GestureConfiguration::min_touch_down_duration_in_seconds_for_click() && 170 GestureConfiguration::min_touch_down_duration_in_seconds_for_click() &&
160 duration < 171 duration <
161 GestureConfiguration::max_touch_down_duration_in_seconds_for_click(); 172 GestureConfiguration::max_touch_down_duration_in_seconds_for_click();
162 } 173 }
163 174
164 bool GesturePoint::IsInSecondClickTimeWindow() const { 175 bool GesturePoint::IsInClickAggregateTimeWindow(double before,
165 double duration = last_touch_time_ - last_tap_time_; 176 double after) const {
177 double duration = after - before;
166 return duration < GestureConfiguration::max_seconds_between_double_click(); 178 return duration < GestureConfiguration::max_seconds_between_double_click();
167 } 179 }
168 180
169 bool GesturePoint::IsInsideManhattanSquare(const TouchEvent& event) const { 181 bool GesturePoint::IsInsideManhattanSquare(const TouchEvent& event) const {
170 return ui::gestures::IsInsideManhattanSquare(event.location(), 182 return ui::gestures::IsInsideManhattanSquare(event.location(),
171 first_touch_position_); 183 first_touch_position_);
172 } 184 }
173 185
174 bool GesturePoint::IsSecondClickInsideManhattanSquare( 186 bool GesturePoint::IsPointInsideManhattanSquare(gfx::Point p1,
175 const TouchEvent& event) const { 187 gfx::Point p2) const {
176 int manhattan_distance = abs(event.location().x() - last_tap_position_.x()) + 188 int manhattan_distance = abs(p1.x() - p2.x()) + abs(p1.y() - p2.y());
177 abs(event.location().y() - last_tap_position_.y());
178 return manhattan_distance < 189 return manhattan_distance <
179 GestureConfiguration::max_distance_between_taps_for_double_tap(); 190 GestureConfiguration::max_distance_between_taps_for_double_tap();
180 } 191 }
181 192
182 bool GesturePoint::IsOverMinFlickSpeed() { 193 bool GesturePoint::IsOverMinFlickSpeed() {
183 return velocity_calculator_.VelocitySquared() > 194 return velocity_calculator_.VelocitySquared() >
184 GestureConfiguration::min_flick_speed_squared(); 195 GestureConfiguration::min_flick_speed_squared();
185 } 196 }
186 197
187 void GesturePoint::UpdateEnclosingRectangle(const TouchEvent& event) { 198 void GesturePoint::UpdateEnclosingRectangle(const TouchEvent& event) {
(...skipping 20 matching lines...) Expand all
208 event.location().y() - radius, 219 event.location().y() - radius,
209 radius * 2, 220 radius * 2,
210 radius * 2); 221 radius * 2);
211 if (IsInClickWindow(event)) 222 if (IsInClickWindow(event))
212 enclosing_rect_.Union(rect); 223 enclosing_rect_.Union(rect);
213 else 224 else
214 enclosing_rect_ = rect; 225 enclosing_rect_ = rect;
215 } 226 }
216 227
217 } // namespace ui 228 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/gestures/gesture_point.h ('k') | ui/base/gestures/gesture_sequence.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698