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 "content/browser/renderer_host/input/touch_selection_controller.h" | 5 #include "content/browser/renderer_host/input/touch_selection_controller.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "third_party/WebKit/public/web/WebInputEvent.h" | 8 #include "third_party/WebKit/public/web/WebInputEvent.h" |
9 | 9 |
10 namespace content { | 10 namespace content { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 end_selection_handle_->WillHandleTouchEvent(event); | 103 end_selection_handle_->WillHandleTouchEvent(event); |
104 } | 104 } |
105 | 105 |
106 return false; | 106 return false; |
107 } | 107 } |
108 | 108 |
109 void TouchSelectionController::OnLongPressEvent() { | 109 void TouchSelectionController::OnLongPressEvent() { |
110 last_input_event_type_ = LONG_PRESS; | 110 last_input_event_type_ = LONG_PRESS; |
111 ShowSelectionHandlesAutomatically(); | 111 ShowSelectionHandlesAutomatically(); |
112 ShowInsertionHandleAutomatically(); | 112 ShowInsertionHandleAutomatically(); |
113 ResetCachedValues(); | 113 ResetCachedValuesIfInactive(); |
114 } | 114 } |
115 | 115 |
116 void TouchSelectionController::OnTapEvent() { | 116 void TouchSelectionController::OnTapEvent() { |
117 last_input_event_type_ = TAP; | 117 last_input_event_type_ = TAP; |
118 activate_selection_automatically_ = false; | 118 activate_selection_automatically_ = false; |
119 DeactivateSelection(); | 119 DeactivateSelection(); |
120 ShowInsertionHandleAutomatically(); | 120 ShowInsertionHandleAutomatically(); |
121 ResetCachedValues(); | 121 ResetCachedValuesIfInactive(); |
122 } | 122 } |
123 | 123 |
124 void TouchSelectionController::HideAndDisallowShowingAutomatically() { | 124 void TouchSelectionController::HideAndDisallowShowingAutomatically() { |
125 last_input_event_type_ = INPUT_EVENT_TYPE_NONE; | 125 last_input_event_type_ = INPUT_EVENT_TYPE_NONE; |
126 DeactivateInsertion(); | 126 DeactivateInsertion(); |
127 DeactivateSelection(); | 127 DeactivateSelection(); |
128 activate_insertion_automatically_ = false; | 128 activate_insertion_automatically_ = false; |
129 activate_selection_automatically_ = false; | 129 activate_selection_automatically_ = false; |
130 } | 130 } |
131 | 131 |
132 void TouchSelectionController::SetTemporarilyHidden(bool hidden) { | 132 void TouchSelectionController::SetTemporarilyHidden(bool hidden) { |
133 if (temporarily_hidden_ == hidden) | 133 if (temporarily_hidden_ == hidden) |
134 return; | 134 return; |
135 temporarily_hidden_ = hidden; | 135 temporarily_hidden_ = hidden; |
136 | 136 |
137 TouchHandle::AnimationStyle animation_style = GetAnimationStyle(true); | 137 TouchHandle::AnimationStyle animation_style = GetAnimationStyle(true); |
138 if (is_selection_active_) { | 138 if (is_selection_active_) { |
139 start_selection_handle_->SetVisible(GetStartVisible(), animation_style); | 139 start_selection_handle_->SetVisible(GetStartVisible(), animation_style); |
140 end_selection_handle_->SetVisible(GetEndVisible(), animation_style); | 140 end_selection_handle_->SetVisible(GetEndVisible(), animation_style); |
141 } | 141 } |
142 if (is_insertion_active_) | 142 if (is_insertion_active_) |
143 insertion_handle_->SetVisible(GetStartVisible(), animation_style); | 143 insertion_handle_->SetVisible(GetStartVisible(), animation_style); |
144 } | 144 } |
145 | 145 |
146 void TouchSelectionController::OnSelectionEditable(bool editable) { | 146 void TouchSelectionController::OnSelectionEditable(bool editable) { |
147 if (selection_editable_ == editable) | 147 if (selection_editable_ == editable) |
148 return; | 148 return; |
149 selection_editable_ = editable; | 149 selection_editable_ = editable; |
150 ResetCachedValues(); | 150 ResetCachedValuesIfInactive(); |
151 if (!selection_editable_) | 151 if (!selection_editable_) |
152 DeactivateInsertion(); | 152 DeactivateInsertion(); |
153 } | 153 } |
154 | 154 |
155 void TouchSelectionController::OnSelectionEmpty(bool empty) { | 155 void TouchSelectionController::OnSelectionEmpty(bool empty) { |
156 if (selection_empty_ == empty) | 156 if (selection_empty_ == empty) |
157 return; | 157 return; |
158 selection_empty_ = empty; | 158 selection_empty_ = empty; |
159 ResetCachedValues(); | 159 ResetCachedValuesIfInactive(); |
160 } | 160 } |
161 | 161 |
162 bool TouchSelectionController::Animate(base::TimeTicks frame_time) { | 162 bool TouchSelectionController::Animate(base::TimeTicks frame_time) { |
163 if (is_insertion_active_) | 163 if (is_insertion_active_) |
164 return insertion_handle_->Animate(frame_time); | 164 return insertion_handle_->Animate(frame_time); |
165 | 165 |
166 if (is_selection_active_) { | 166 if (is_selection_active_) { |
167 bool needs_animate = start_selection_handle_->Animate(frame_time); | 167 bool needs_animate = start_selection_handle_->Animate(frame_time); |
168 needs_animate |= end_selection_handle_->Animate(frame_time); | 168 needs_animate |= end_selection_handle_->Animate(frame_time); |
169 return needs_animate; | 169 return needs_animate; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 } | 213 } |
214 | 214 |
215 scoped_ptr<TouchHandleDrawable> TouchSelectionController::CreateDrawable() { | 215 scoped_ptr<TouchHandleDrawable> TouchSelectionController::CreateDrawable() { |
216 return client_->CreateDrawable(); | 216 return client_->CreateDrawable(); |
217 } | 217 } |
218 | 218 |
219 void TouchSelectionController::ShowInsertionHandleAutomatically() { | 219 void TouchSelectionController::ShowInsertionHandleAutomatically() { |
220 if (activate_insertion_automatically_) | 220 if (activate_insertion_automatically_) |
221 return; | 221 return; |
222 activate_insertion_automatically_ = true; | 222 activate_insertion_automatically_ = true; |
223 if (!is_insertion_active_ && !is_selection_active_) | 223 ResetCachedValuesIfInactive(); |
224 ResetCachedValues(); | |
225 } | 224 } |
226 | 225 |
227 void TouchSelectionController::ShowSelectionHandlesAutomatically() { | 226 void TouchSelectionController::ShowSelectionHandlesAutomatically() { |
228 if (activate_selection_automatically_) | 227 if (activate_selection_automatically_) |
229 return; | 228 return; |
230 activate_selection_automatically_ = true; | 229 activate_selection_automatically_ = true; |
231 if (!is_insertion_active_ && !is_selection_active_) | 230 ResetCachedValuesIfInactive(); |
232 ResetCachedValues(); | |
233 } | 231 } |
234 | 232 |
235 void TouchSelectionController::OnInsertionChanged() { | 233 void TouchSelectionController::OnInsertionChanged() { |
236 DeactivateSelection(); | 234 DeactivateSelection(); |
237 | 235 |
238 if (last_input_event_type_ == TAP && selection_empty_) { | 236 if (last_input_event_type_ == TAP && selection_empty_) { |
239 HideAndDisallowShowingAutomatically(); | 237 HideAndDisallowShowingAutomatically(); |
240 return; | 238 return; |
241 } | 239 } |
242 | 240 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 if (!is_selection_active_) | 319 if (!is_selection_active_) |
322 return; | 320 return; |
323 DCHECK(start_selection_handle_); | 321 DCHECK(start_selection_handle_); |
324 DCHECK(end_selection_handle_); | 322 DCHECK(end_selection_handle_); |
325 start_selection_handle_->SetEnabled(false); | 323 start_selection_handle_->SetEnabled(false); |
326 end_selection_handle_->SetEnabled(false); | 324 end_selection_handle_->SetEnabled(false); |
327 is_selection_active_ = false; | 325 is_selection_active_ = false; |
328 client_->OnSelectionEvent(SELECTION_CLEARED, gfx::PointF()); | 326 client_->OnSelectionEvent(SELECTION_CLEARED, gfx::PointF()); |
329 } | 327 } |
330 | 328 |
331 void TouchSelectionController::ResetCachedValues() { | 329 void TouchSelectionController::ResetCachedValuesIfInactive() { |
| 330 if (is_insertion_active_ || is_selection_active_) |
| 331 return; |
| 332 |
332 start_rect_ = gfx::RectF(); | 333 start_rect_ = gfx::RectF(); |
333 end_rect_ = gfx::RectF(); | 334 end_rect_ = gfx::RectF(); |
334 start_orientation_ = TOUCH_HANDLE_ORIENTATION_UNDEFINED; | 335 start_orientation_ = TOUCH_HANDLE_ORIENTATION_UNDEFINED; |
335 end_orientation_ = TOUCH_HANDLE_ORIENTATION_UNDEFINED; | 336 end_orientation_ = TOUCH_HANDLE_ORIENTATION_UNDEFINED; |
336 start_visible_ = false; | 337 start_visible_ = false; |
337 end_visible_ = false; | 338 end_visible_ = false; |
338 } | 339 } |
339 | 340 |
340 gfx::PointF TouchSelectionController::GetStartPosition() const { | 341 gfx::PointF TouchSelectionController::GetStartPosition() const { |
341 return start_rect_.bottom_left(); | 342 return start_rect_.bottom_left(); |
(...skipping 20 matching lines...) Expand all Loading... |
362 } | 363 } |
363 | 364 |
364 TouchHandle::AnimationStyle TouchSelectionController::GetAnimationStyle( | 365 TouchHandle::AnimationStyle TouchSelectionController::GetAnimationStyle( |
365 bool was_active) const { | 366 bool was_active) const { |
366 return was_active && client_->SupportsAnimation() | 367 return was_active && client_->SupportsAnimation() |
367 ? TouchHandle::ANIMATION_SMOOTH | 368 ? TouchHandle::ANIMATION_SMOOTH |
368 : TouchHandle::ANIMATION_NONE; | 369 : TouchHandle::ANIMATION_NONE; |
369 } | 370 } |
370 | 371 |
371 } // namespace content | 372 } // namespace content |
OLD | NEW |