OLD | NEW |
---|---|
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_selection_controller.h" | 5 #include "ui/touch_selection/touch_selection_controller.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 | 9 |
10 namespace ui { | 10 namespace ui { |
(...skipping 12 matching lines...) Expand all Loading... | |
23 } | 23 } |
24 NOTREACHED() << "Invalid selection bound type: " << type; | 24 NOTREACHED() << "Invalid selection bound type: " << type; |
25 return TOUCH_HANDLE_ORIENTATION_UNDEFINED; | 25 return TOUCH_HANDLE_ORIENTATION_UNDEFINED; |
26 } | 26 } |
27 | 27 |
28 } // namespace | 28 } // namespace |
29 | 29 |
30 TouchSelectionController::TouchSelectionController( | 30 TouchSelectionController::TouchSelectionController( |
31 TouchSelectionControllerClient* client, | 31 TouchSelectionControllerClient* client, |
32 base::TimeDelta tap_timeout, | 32 base::TimeDelta tap_timeout, |
33 float tap_slop) | 33 float tap_slop, |
34 bool show_on_tap_for_empty_editable) | |
34 : client_(client), | 35 : client_(client), |
35 tap_timeout_(tap_timeout), | 36 tap_timeout_(tap_timeout), |
36 tap_slop_(tap_slop), | 37 tap_slop_(tap_slop), |
38 show_on_tap_for_empty_editable_(show_on_tap_for_empty_editable), | |
37 response_pending_input_event_(INPUT_EVENT_TYPE_NONE), | 39 response_pending_input_event_(INPUT_EVENT_TYPE_NONE), |
38 start_orientation_(TOUCH_HANDLE_ORIENTATION_UNDEFINED), | 40 start_orientation_(TOUCH_HANDLE_ORIENTATION_UNDEFINED), |
39 end_orientation_(TOUCH_HANDLE_ORIENTATION_UNDEFINED), | 41 end_orientation_(TOUCH_HANDLE_ORIENTATION_UNDEFINED), |
40 is_insertion_active_(false), | 42 is_insertion_active_(false), |
41 activate_insertion_automatically_(false), | 43 activate_insertion_automatically_(false), |
42 is_selection_active_(false), | 44 is_selection_active_(false), |
43 activate_selection_automatically_(false), | 45 activate_selection_automatically_(false), |
44 selection_empty_(false), | 46 selection_empty_(false), |
45 selection_editable_(false), | 47 selection_editable_(false), |
46 temporarily_hidden_(false) { | 48 temporarily_hidden_(false) { |
47 DCHECK(client_); | 49 DCHECK(client_); |
48 HideAndDisallowShowingAutomatically(); | |
49 } | 50 } |
50 | 51 |
51 TouchSelectionController::~TouchSelectionController() { | 52 TouchSelectionController::~TouchSelectionController() { |
52 } | 53 } |
53 | 54 |
54 void TouchSelectionController::OnSelectionBoundsChanged( | 55 void TouchSelectionController::OnSelectionBoundsUpdated( |
55 const SelectionBound& start, | 56 const SelectionBound& start, |
56 const SelectionBound& end) { | 57 const SelectionBound& end) { |
57 if (start == start_ && end_ == end) | 58 if (start == start_ && end_ == end) |
58 return; | 59 return; |
59 | 60 |
60 start_ = start; | 61 start_ = start; |
61 end_ = end; | 62 end_ = end; |
62 start_orientation_ = ToTouchHandleOrientation(start_.type()); | 63 start_orientation_ = ToTouchHandleOrientation(start_.type()); |
63 end_orientation_ = ToTouchHandleOrientation(end_.type()); | 64 end_orientation_ = ToTouchHandleOrientation(end_.type()); |
64 | 65 |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
206 | 207 |
207 if (is_selection_active_) { | 208 if (is_selection_active_) { |
208 bool needs_animate = start_selection_handle_->Animate(frame_time); | 209 bool needs_animate = start_selection_handle_->Animate(frame_time); |
209 needs_animate |= end_selection_handle_->Animate(frame_time); | 210 needs_animate |= end_selection_handle_->Animate(frame_time); |
210 return needs_animate; | 211 return needs_animate; |
211 } | 212 } |
212 | 213 |
213 return false; | 214 return false; |
214 } | 215 } |
215 | 216 |
217 void TouchSelectionController::TryActivateSelection() { | |
jdduke (slow)
2015/01/28 16:35:32
How exactly does this differ from |AllowShowingFro
mohsen
2015/02/22 23:23:09
Oh, I missed |AllowShowingFromCurrentSelection()|
| |
218 if (GetStartPosition() != GetEndPosition()) { | |
219 SelectionBound start = start_; | |
220 SelectionBound end = end_; | |
221 ShowSelectionHandlesAutomatically(); | |
222 OnSelectionBoundsUpdated(start, end); | |
223 } | |
224 } | |
225 | |
216 void TouchSelectionController::OnHandleDragBegin(const TouchHandle& handle) { | 226 void TouchSelectionController::OnHandleDragBegin(const TouchHandle& handle) { |
217 if (&handle == insertion_handle_.get()) { | 227 if (&handle == insertion_handle_.get()) { |
218 client_->OnSelectionEvent(INSERTION_DRAG_STARTED, handle.position()); | 228 client_->OnSelectionEvent(INSERTION_DRAG_STARTED, handle.position()); |
219 return; | 229 return; |
220 } | 230 } |
221 | 231 |
222 gfx::PointF base, extent; | 232 gfx::PointF base, extent; |
223 if (&handle == start_selection_handle_.get()) { | 233 if (&handle == start_selection_handle_.get()) { |
224 base = end_selection_handle_->position() + GetEndLineOffset(); | 234 base = end_selection_handle_->position() + GetEndLineOffset(); |
225 extent = start_selection_handle_->position() + GetStartLineOffset(); | 235 extent = start_selection_handle_->position() + GetStartLineOffset(); |
(...skipping 18 matching lines...) Expand all Loading... | |
244 : GetEndLineOffset(); | 254 : GetEndLineOffset(); |
245 gfx::PointF line_position = position + line_offset; | 255 gfx::PointF line_position = position + line_offset; |
246 if (&handle == insertion_handle_.get()) { | 256 if (&handle == insertion_handle_.get()) { |
247 client_->MoveCaret(line_position); | 257 client_->MoveCaret(line_position); |
248 } else { | 258 } else { |
249 client_->MoveRangeSelectionExtent(line_position); | 259 client_->MoveRangeSelectionExtent(line_position); |
250 } | 260 } |
251 } | 261 } |
252 | 262 |
253 void TouchSelectionController::OnHandleDragEnd(const TouchHandle& handle) { | 263 void TouchSelectionController::OnHandleDragEnd(const TouchHandle& handle) { |
254 if (&handle != insertion_handle_.get()) | 264 if (&handle == insertion_handle_.get()) |
265 client_->OnSelectionEvent(INSERTION_DRAG_STOPPED, handle.position()); | |
266 else | |
255 client_->OnSelectionEvent(SELECTION_DRAG_STOPPED, handle.position()); | 267 client_->OnSelectionEvent(SELECTION_DRAG_STOPPED, handle.position()); |
256 } | 268 } |
257 | 269 |
258 void TouchSelectionController::OnHandleTapped(const TouchHandle& handle) { | 270 void TouchSelectionController::OnHandleTapped(const TouchHandle& handle) { |
259 if (insertion_handle_ && &handle == insertion_handle_.get()) | 271 if (insertion_handle_ && &handle == insertion_handle_.get()) |
260 client_->OnSelectionEvent(INSERTION_TAPPED, handle.position()); | 272 client_->OnSelectionEvent(INSERTION_TAPPED, handle.position()); |
261 } | 273 } |
262 | 274 |
263 void TouchSelectionController::SetNeedsAnimate() { | 275 void TouchSelectionController::SetNeedsAnimate() { |
264 client_->SetNeedsAnimate(); | 276 client_->SetNeedsAnimate(); |
(...skipping 21 matching lines...) Expand all Loading... | |
286 void TouchSelectionController::ShowSelectionHandlesAutomatically() { | 298 void TouchSelectionController::ShowSelectionHandlesAutomatically() { |
287 if (activate_selection_automatically_) | 299 if (activate_selection_automatically_) |
288 return; | 300 return; |
289 activate_selection_automatically_ = true; | 301 activate_selection_automatically_ = true; |
290 ResetCachedValuesIfInactive(); | 302 ResetCachedValuesIfInactive(); |
291 } | 303 } |
292 | 304 |
293 void TouchSelectionController::OnInsertionChanged() { | 305 void TouchSelectionController::OnInsertionChanged() { |
294 DeactivateSelection(); | 306 DeactivateSelection(); |
295 | 307 |
296 if (response_pending_input_event_ == TAP && selection_empty_) { | 308 if (response_pending_input_event_ == TAP && selection_empty_ && |
309 !show_on_tap_for_empty_editable_) { | |
297 HideAndDisallowShowingAutomatically(); | 310 HideAndDisallowShowingAutomatically(); |
298 return; | 311 return; |
299 } | 312 } |
300 | 313 |
301 if (!activate_insertion_automatically_) | 314 if (!activate_insertion_automatically_) |
302 return; | 315 return; |
303 | 316 |
304 const bool was_active = is_insertion_active_; | 317 const bool was_active = is_insertion_active_; |
305 const gfx::PointF position = GetStartPosition(); | 318 const gfx::PointF position = GetStartPosition(); |
306 if (!is_insertion_active_) | 319 if (!is_insertion_active_) |
307 ActivateInsertion(); | 320 ActivateInsertion(); |
308 else | 321 else |
309 client_->OnSelectionEvent(INSERTION_MOVED, position); | 322 client_->OnSelectionEvent(INSERTION_MOVED, position); |
310 | 323 |
311 insertion_handle_->SetVisible(GetStartVisible(), | 324 insertion_handle_->SetVisible(GetStartVisible(), |
312 GetAnimationStyle(was_active)); | 325 GetAnimationStyle(was_active)); |
313 insertion_handle_->SetPosition(position); | 326 insertion_handle_->SetPosition(position); |
314 } | 327 } |
315 | 328 |
316 void TouchSelectionController::OnSelectionChanged() { | 329 void TouchSelectionController::OnSelectionChanged() { |
317 DeactivateInsertion(); | 330 DeactivateInsertion(); |
318 | 331 |
319 if (!activate_selection_automatically_) | 332 if (!activate_selection_automatically_) // XXX: needed? |
320 return; | 333 return; |
321 | 334 |
322 const bool was_active = is_selection_active_; | 335 const bool was_active = is_selection_active_; |
323 ActivateSelection(); | 336 ActivateSelection(); |
324 | 337 |
325 const TouchHandle::AnimationStyle animation = GetAnimationStyle(was_active); | 338 const TouchHandle::AnimationStyle animation = GetAnimationStyle(was_active); |
326 start_selection_handle_->SetVisible(GetStartVisible(), animation); | 339 start_selection_handle_->SetVisible(GetStartVisible(), animation); |
327 end_selection_handle_->SetVisible(GetEndVisible(), animation); | 340 end_selection_handle_->SetVisible(GetEndVisible(), animation); |
328 | 341 |
329 start_selection_handle_->SetPosition(GetStartPosition()); | 342 start_selection_handle_->SetPosition(GetStartPosition()); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
424 } | 437 } |
425 | 438 |
426 TouchHandle::AnimationStyle TouchSelectionController::GetAnimationStyle( | 439 TouchHandle::AnimationStyle TouchSelectionController::GetAnimationStyle( |
427 bool was_active) const { | 440 bool was_active) const { |
428 return was_active && client_->SupportsAnimation() | 441 return was_active && client_->SupportsAnimation() |
429 ? TouchHandle::ANIMATION_SMOOTH | 442 ? TouchHandle::ANIMATION_SMOOTH |
430 : TouchHandle::ANIMATION_NONE; | 443 : TouchHandle::ANIMATION_NONE; |
431 } | 444 } |
432 | 445 |
433 } // namespace ui | 446 } // namespace ui |
OLD | NEW |