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

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: 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
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 IsInSecondClickTimeWindow() &&
95 IsSecondClickInsideManhattanSquare(event); 98 IsSecondClickInsideManhattanSquare(event);
96 } 99 }
97 100
101 bool GesturePoint::IsInTripleClickWindow(const TouchEvent& event) const {
102 return IsInThirdClickTimeWindow() &&
103 IsThirdClickInsideManhattanSquare(event);
104 }
105
98 bool GesturePoint::IsInScrollWindow(const TouchEvent& event) const { 106 bool GesturePoint::IsInScrollWindow(const TouchEvent& event) const {
99 return event.type() == ui::ET_TOUCH_MOVED && 107 return event.type() == ui::ET_TOUCH_MOVED &&
100 !IsInsideManhattanSquare(event); 108 !IsInsideManhattanSquare(event);
101 } 109 }
102 110
103 bool GesturePoint::IsInFlickWindow(const TouchEvent& event) { 111 bool GesturePoint::IsInFlickWindow(const TouchEvent& event) {
104 return IsOverMinFlickSpeed() && 112 return IsOverMinFlickSpeed() &&
105 event.type() != ui::ET_TOUCH_CANCELLED; 113 event.type() != ui::ET_TOUCH_CANCELLED;
106 } 114 }
107 115
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 GestureConfiguration::min_touch_down_duration_in_seconds_for_click() && 167 GestureConfiguration::min_touch_down_duration_in_seconds_for_click() &&
160 duration < 168 duration <
161 GestureConfiguration::max_touch_down_duration_in_seconds_for_click(); 169 GestureConfiguration::max_touch_down_duration_in_seconds_for_click();
162 } 170 }
163 171
164 bool GesturePoint::IsInSecondClickTimeWindow() const { 172 bool GesturePoint::IsInSecondClickTimeWindow() const {
165 double duration = last_touch_time_ - last_tap_time_; 173 double duration = last_touch_time_ - last_tap_time_;
166 return duration < GestureConfiguration::max_seconds_between_double_click(); 174 return duration < GestureConfiguration::max_seconds_between_double_click();
167 } 175 }
168 176
177 bool GesturePoint::IsInThirdClickTimeWindow() const {
178 double duration1 = last_touch_time_ - last_tap_time_;
179 double duration2 = last_tap_time_ - second_last_tap_time_;
180 return duration1 < GestureConfiguration::max_seconds_between_double_click() &&
181 duration2 < GestureConfiguration::max_seconds_between_double_click();
182 }
183
sadrul 2013/05/28 17:48:46 Refactor IsInSecondClickTimeWindow and IsInThirdCl
Yufeng Shen (Slow to review) 2013/05/28 19:31:44 Done.
169 bool GesturePoint::IsInsideManhattanSquare(const TouchEvent& event) const { 184 bool GesturePoint::IsInsideManhattanSquare(const TouchEvent& event) const {
170 return ui::gestures::IsInsideManhattanSquare(event.location(), 185 return ui::gestures::IsInsideManhattanSquare(event.location(),
171 first_touch_position_); 186 first_touch_position_);
172 } 187 }
173 188
174 bool GesturePoint::IsSecondClickInsideManhattanSquare( 189 bool GesturePoint::IsSecondClickInsideManhattanSquare(
175 const TouchEvent& event) const { 190 const TouchEvent& event) const {
176 int manhattan_distance = abs(event.location().x() - last_tap_position_.x()) + 191 int manhattan_distance = abs(event.location().x() - last_tap_position_.x()) +
177 abs(event.location().y() - last_tap_position_.y()); 192 abs(event.location().y() - last_tap_position_.y());
178 return manhattan_distance < 193 return manhattan_distance <
179 GestureConfiguration::max_distance_between_taps_for_double_tap(); 194 GestureConfiguration::max_distance_between_taps_for_double_tap();
180 } 195 }
181 196
197 bool GesturePoint::IsThirdClickInsideManhattanSquare(
198 const TouchEvent& event) const {
199 int manhattan_distance1 =
200 abs(event.location().x() - last_tap_position_.x()) +
201 abs(event.location().y() - last_tap_position_.y());
202 int manhattan_distance2 =
203 abs(last_tap_position_.x() - second_last_tap_position_.x()) +
204 abs(last_tap_position_.y() - second_last_tap_position_.y());
205
206 return manhattan_distance1 <
207 GestureConfiguration::max_distance_between_taps_for_double_tap() &&
208 manhattan_distance2 <
209 GestureConfiguration::max_distance_between_taps_for_double_tap();
210 }
211
sadrul 2013/05/28 17:48:46 Similarly, IsLocationsInsideManhattanSquare(poin
Yufeng Shen (Slow to review) 2013/05/28 19:31:44 Done.
182 bool GesturePoint::IsOverMinFlickSpeed() { 212 bool GesturePoint::IsOverMinFlickSpeed() {
183 return velocity_calculator_.VelocitySquared() > 213 return velocity_calculator_.VelocitySquared() >
184 GestureConfiguration::min_flick_speed_squared(); 214 GestureConfiguration::min_flick_speed_squared();
185 } 215 }
186 216
187 void GesturePoint::UpdateEnclosingRectangle(const TouchEvent& event) { 217 void GesturePoint::UpdateEnclosingRectangle(const TouchEvent& event) {
188 int radius; 218 int radius;
189 219
190 // Ignore this TouchEvent if it has a radius larger than the maximum 220 // Ignore this TouchEvent if it has a radius larger than the maximum
191 // allowed radius size. 221 // allowed radius size.
(...skipping 16 matching lines...) Expand all
208 event.location().y() - radius, 238 event.location().y() - radius,
209 radius * 2, 239 radius * 2,
210 radius * 2); 240 radius * 2);
211 if (IsInClickWindow(event)) 241 if (IsInClickWindow(event))
212 enclosing_rect_.Union(rect); 242 enclosing_rect_.Union(rect);
213 else 243 else
214 enclosing_rect_ = rect; 244 enclosing_rect_ = rect;
215 } 245 }
216 246
217 } // namespace ui 247 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698