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

Side by Side Diff: ui/touch_selection/touch_handle.cc

Issue 903143003: wip: Touch Text Selection Prototypes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@selection_granularity_on_unified
Patch Set: Created 5 years, 10 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/touch_selection/touch_handle.h ('k') | ui/touch_selection/touch_selection_controller.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 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/touch_selection/touch_handle.h" 5 #include "ui/touch_selection/touch_handle.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 namespace ui { 9 namespace ui {
10 10
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 std::min(kMaxTouchMajorForHitTesting, event.GetTouchMajor())) * 0.5f; 145 std::min(kMaxTouchMajorForHitTesting, event.GetTouchMajor())) * 0.5f;
146 if (!RectIntersectsCircle(drawable_->GetVisibleBounds(), 146 if (!RectIntersectsCircle(drawable_->GetVisibleBounds(),
147 touch_point, 147 touch_point,
148 touch_radius)) { 148 touch_radius)) {
149 EndDrag(); 149 EndDrag();
150 return false; 150 return false;
151 } 151 }
152 touch_down_position_ = touch_point; 152 touch_down_position_ = touch_point;
153 touch_to_focus_offset_ = position_ - touch_down_position_; 153 touch_to_focus_offset_ = position_ - touch_down_position_;
154 touch_down_time_ = event.GetEventTime(); 154 touch_down_time_ = event.GetEventTime();
155 BeginDrag(); 155 BeginDrag(event.GetEventTime());
156 } break; 156 } break;
157 157
158 case MotionEvent::ACTION_MOVE: { 158 case MotionEvent::ACTION_MOVE: {
159 gfx::PointF touch_move_position(event.GetX(), event.GetY()); 159 gfx::PointF touch_move_position(event.GetX(), event.GetY());
160 if (is_drag_within_tap_region_) { 160 if (is_drag_within_tap_region_) {
161 const float tap_slop = client_->GetTapSlop(); 161 const float tap_slop = client_->GetTapSlop();
162 is_drag_within_tap_region_ = 162 is_drag_within_tap_region_ =
163 (touch_move_position - touch_down_position_).LengthSquared() < 163 (touch_move_position - touch_down_position_).LengthSquared() <
164 tap_slop * tap_slop; 164 tap_slop * tap_slop;
165 } 165 }
166 166
167 // Note that we signal drag update even if we're inside the tap region, 167 // Note that we signal drag update even if we're inside the tap region,
168 // as there are cases where characters are narrower than the slop length. 168 // as there are cases where characters are narrower than the slop length.
169 client_->OnHandleDragUpdate(*this, 169 client_->OnHandleDragUpdate(*this,
170 touch_move_position + touch_to_focus_offset_); 170 touch_move_position + touch_to_focus_offset_,
171 event.GetEventTime());
171 } break; 172 } break;
172 173
173 case MotionEvent::ACTION_UP: { 174 case MotionEvent::ACTION_UP: {
174 if (is_drag_within_tap_region_ && 175 if (is_drag_within_tap_region_ &&
175 (event.GetEventTime() - touch_down_time_) < 176 (event.GetEventTime() - touch_down_time_) <
176 client_->GetTapTimeout()) { 177 client_->GetTapTimeout()) {
177 client_->OnHandleTapped(*this); 178 client_->OnHandleTapped(*this);
178 } 179 }
179 180
180 EndDrag(); 181 EndDrag();
(...skipping 23 matching lines...) Expand all
204 SetAlpha(is_visible_ ? u : 1.f - u); 205 SetAlpha(is_visible_ ? u : 1.f - u);
205 206
206 if (u >= 1.f) { 207 if (u >= 1.f) {
207 EndFade(); 208 EndFade();
208 return false; 209 return false;
209 } 210 }
210 211
211 return true; 212 return true;
212 } 213 }
213 214
214 void TouchHandle::BeginDrag() { 215 void TouchHandle::BeginDrag(base::TimeTicks event_time) {
215 DCHECK(enabled_); 216 DCHECK(enabled_);
216 if (is_dragging_) 217 if (is_dragging_)
217 return; 218 return;
218 EndFade(); 219 EndFade();
219 is_dragging_ = true; 220 is_dragging_ = true;
220 is_drag_within_tap_region_ = true; 221 is_drag_within_tap_region_ = true;
221 client_->OnHandleDragBegin(*this); 222 client_->OnHandleDragBegin(*this, event_time);
222 } 223 }
223 224
224 void TouchHandle::EndDrag() { 225 void TouchHandle::EndDrag() {
225 DCHECK(enabled_); 226 DCHECK(enabled_);
226 if (!is_dragging_) 227 if (!is_dragging_)
227 return; 228 return;
228 229
229 is_dragging_ = false; 230 is_dragging_ = false;
230 is_drag_within_tap_region_ = false; 231 is_drag_within_tap_region_ = false;
231 client_->OnHandleDragEnd(*this); 232 client_->OnHandleDragEnd(*this);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 272
272 void TouchHandle::SetAlpha(float alpha) { 273 void TouchHandle::SetAlpha(float alpha) {
273 alpha = std::max(0.f, std::min(1.f, alpha)); 274 alpha = std::max(0.f, std::min(1.f, alpha));
274 if (alpha_ == alpha) 275 if (alpha_ == alpha)
275 return; 276 return;
276 alpha_ = alpha; 277 alpha_ = alpha;
277 drawable_->SetAlpha(alpha); 278 drawable_->SetAlpha(alpha);
278 } 279 }
279 280
280 } // namespace ui 281 } // namespace ui
OLDNEW
« no previous file with comments | « ui/touch_selection/touch_handle.h ('k') | ui/touch_selection/touch_selection_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698