| 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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 return end_selection_handle_->WillHandleTouchEvent(event); | 113 return end_selection_handle_->WillHandleTouchEvent(event); |
| 114 } | 114 } |
| 115 | 115 |
| 116 return false; | 116 return false; |
| 117 } | 117 } |
| 118 | 118 |
| 119 void TouchSelectionController::OnLongPressEvent() { | 119 void TouchSelectionController::OnLongPressEvent() { |
| 120 last_input_event_type_ = LONG_PRESS; | 120 last_input_event_type_ = LONG_PRESS; |
| 121 ShowSelectionHandlesAutomatically(); | 121 ShowSelectionHandlesAutomatically(); |
| 122 ShowInsertionHandleAutomatically(); | 122 ShowInsertionHandleAutomatically(); |
| 123 ResetCachedValues(); | 123 ResetCachedValuesIfInactive(); |
| 124 } | 124 } |
| 125 | 125 |
| 126 void TouchSelectionController::OnTapEvent() { | 126 void TouchSelectionController::OnTapEvent() { |
| 127 last_input_event_type_ = TAP; | 127 last_input_event_type_ = TAP; |
| 128 activate_selection_automatically_ = false; | 128 activate_selection_automatically_ = false; |
| 129 DeactivateSelection(); | 129 DeactivateSelection(); |
| 130 ShowInsertionHandleAutomatically(); | 130 ShowInsertionHandleAutomatically(); |
| 131 ResetCachedValues(); | 131 ResetCachedValuesIfInactive(); |
| 132 } | 132 } |
| 133 | 133 |
| 134 void TouchSelectionController::HideAndDisallowShowingAutomatically() { | 134 void TouchSelectionController::HideAndDisallowShowingAutomatically() { |
| 135 last_input_event_type_ = INPUT_EVENT_TYPE_NONE; | 135 last_input_event_type_ = INPUT_EVENT_TYPE_NONE; |
| 136 DeactivateInsertion(); | 136 DeactivateInsertion(); |
| 137 DeactivateSelection(); | 137 DeactivateSelection(); |
| 138 activate_insertion_automatically_ = false; | 138 activate_insertion_automatically_ = false; |
| 139 activate_selection_automatically_ = false; | 139 activate_selection_automatically_ = false; |
| 140 } | 140 } |
| 141 | 141 |
| 142 void TouchSelectionController::SetTemporarilyHidden(bool hidden) { | 142 void TouchSelectionController::SetTemporarilyHidden(bool hidden) { |
| 143 if (temporarily_hidden_ == hidden) | 143 if (temporarily_hidden_ == hidden) |
| 144 return; | 144 return; |
| 145 temporarily_hidden_ = hidden; | 145 temporarily_hidden_ = hidden; |
| 146 | 146 |
| 147 TouchHandle::AnimationStyle animation_style = GetAnimationStyle(true); | 147 TouchHandle::AnimationStyle animation_style = GetAnimationStyle(true); |
| 148 if (is_selection_active_) { | 148 if (is_selection_active_) { |
| 149 start_selection_handle_->SetVisible(GetStartVisible(), animation_style); | 149 start_selection_handle_->SetVisible(GetStartVisible(), animation_style); |
| 150 end_selection_handle_->SetVisible(GetEndVisible(), animation_style); | 150 end_selection_handle_->SetVisible(GetEndVisible(), animation_style); |
| 151 } | 151 } |
| 152 if (is_insertion_active_) | 152 if (is_insertion_active_) |
| 153 insertion_handle_->SetVisible(GetStartVisible(), animation_style); | 153 insertion_handle_->SetVisible(GetStartVisible(), animation_style); |
| 154 } | 154 } |
| 155 | 155 |
| 156 void TouchSelectionController::OnSelectionEditable(bool editable) { | 156 void TouchSelectionController::OnSelectionEditable(bool editable) { |
| 157 if (selection_editable_ == editable) | 157 if (selection_editable_ == editable) |
| 158 return; | 158 return; |
| 159 selection_editable_ = editable; | 159 selection_editable_ = editable; |
| 160 ResetCachedValues(); | 160 ResetCachedValuesIfInactive(); |
| 161 if (!selection_editable_) | 161 if (!selection_editable_) |
| 162 DeactivateInsertion(); | 162 DeactivateInsertion(); |
| 163 } | 163 } |
| 164 | 164 |
| 165 void TouchSelectionController::OnSelectionEmpty(bool empty) { | 165 void TouchSelectionController::OnSelectionEmpty(bool empty) { |
| 166 if (selection_empty_ == empty) | 166 if (selection_empty_ == empty) |
| 167 return; | 167 return; |
| 168 selection_empty_ = empty; | 168 selection_empty_ = empty; |
| 169 ResetCachedValues(); | 169 ResetCachedValuesIfInactive(); |
| 170 } | 170 } |
| 171 | 171 |
| 172 bool TouchSelectionController::Animate(base::TimeTicks frame_time) { | 172 bool TouchSelectionController::Animate(base::TimeTicks frame_time) { |
| 173 if (is_insertion_active_) | 173 if (is_insertion_active_) |
| 174 return insertion_handle_->Animate(frame_time); | 174 return insertion_handle_->Animate(frame_time); |
| 175 | 175 |
| 176 if (is_selection_active_) { | 176 if (is_selection_active_) { |
| 177 bool needs_animate = start_selection_handle_->Animate(frame_time); | 177 bool needs_animate = start_selection_handle_->Animate(frame_time); |
| 178 needs_animate |= end_selection_handle_->Animate(frame_time); | 178 needs_animate |= end_selection_handle_->Animate(frame_time); |
| 179 return needs_animate; | 179 return needs_animate; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 } | 223 } |
| 224 | 224 |
| 225 scoped_ptr<TouchHandleDrawable> TouchSelectionController::CreateDrawable() { | 225 scoped_ptr<TouchHandleDrawable> TouchSelectionController::CreateDrawable() { |
| 226 return client_->CreateDrawable(); | 226 return client_->CreateDrawable(); |
| 227 } | 227 } |
| 228 | 228 |
| 229 void TouchSelectionController::ShowInsertionHandleAutomatically() { | 229 void TouchSelectionController::ShowInsertionHandleAutomatically() { |
| 230 if (activate_insertion_automatically_) | 230 if (activate_insertion_automatically_) |
| 231 return; | 231 return; |
| 232 activate_insertion_automatically_ = true; | 232 activate_insertion_automatically_ = true; |
| 233 if (!is_insertion_active_ && !is_selection_active_) | 233 ResetCachedValuesIfInactive(); |
| 234 ResetCachedValues(); | |
| 235 } | 234 } |
| 236 | 235 |
| 237 void TouchSelectionController::ShowSelectionHandlesAutomatically() { | 236 void TouchSelectionController::ShowSelectionHandlesAutomatically() { |
| 238 if (activate_selection_automatically_) | 237 if (activate_selection_automatically_) |
| 239 return; | 238 return; |
| 240 activate_selection_automatically_ = true; | 239 activate_selection_automatically_ = true; |
| 241 if (!is_insertion_active_ && !is_selection_active_) | 240 ResetCachedValuesIfInactive(); |
| 242 ResetCachedValues(); | |
| 243 } | 241 } |
| 244 | 242 |
| 245 void TouchSelectionController::OnInsertionChanged() { | 243 void TouchSelectionController::OnInsertionChanged() { |
| 246 DeactivateSelection(); | 244 DeactivateSelection(); |
| 247 | 245 |
| 248 if (last_input_event_type_ == TAP && selection_empty_) { | 246 if (last_input_event_type_ == TAP && selection_empty_) { |
| 249 HideAndDisallowShowingAutomatically(); | 247 HideAndDisallowShowingAutomatically(); |
| 250 return; | 248 return; |
| 251 } | 249 } |
| 252 | 250 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 if (!is_selection_active_) | 329 if (!is_selection_active_) |
| 332 return; | 330 return; |
| 333 DCHECK(start_selection_handle_); | 331 DCHECK(start_selection_handle_); |
| 334 DCHECK(end_selection_handle_); | 332 DCHECK(end_selection_handle_); |
| 335 start_selection_handle_->SetEnabled(false); | 333 start_selection_handle_->SetEnabled(false); |
| 336 end_selection_handle_->SetEnabled(false); | 334 end_selection_handle_->SetEnabled(false); |
| 337 is_selection_active_ = false; | 335 is_selection_active_ = false; |
| 338 client_->OnSelectionEvent(SELECTION_CLEARED, gfx::PointF()); | 336 client_->OnSelectionEvent(SELECTION_CLEARED, gfx::PointF()); |
| 339 } | 337 } |
| 340 | 338 |
| 341 void TouchSelectionController::ResetCachedValues() { | 339 void TouchSelectionController::ResetCachedValuesIfInactive() { |
| 340 if (is_selection_active_ || is_insertion_active_) |
| 341 return; |
| 342 start_rect_ = gfx::RectF(); | 342 start_rect_ = gfx::RectF(); |
| 343 end_rect_ = gfx::RectF(); | 343 end_rect_ = gfx::RectF(); |
| 344 start_orientation_ = TOUCH_HANDLE_ORIENTATION_UNDEFINED; | 344 start_orientation_ = TOUCH_HANDLE_ORIENTATION_UNDEFINED; |
| 345 end_orientation_ = TOUCH_HANDLE_ORIENTATION_UNDEFINED; | 345 end_orientation_ = TOUCH_HANDLE_ORIENTATION_UNDEFINED; |
| 346 start_visible_ = false; | 346 start_visible_ = false; |
| 347 end_visible_ = false; | 347 end_visible_ = false; |
| 348 } | 348 } |
| 349 | 349 |
| 350 gfx::PointF TouchSelectionController::GetStartPosition() const { | 350 gfx::PointF TouchSelectionController::GetStartPosition() const { |
| 351 return start_rect_.bottom_left(); | 351 return start_rect_.bottom_left(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 372 } | 372 } |
| 373 | 373 |
| 374 TouchHandle::AnimationStyle TouchSelectionController::GetAnimationStyle( | 374 TouchHandle::AnimationStyle TouchSelectionController::GetAnimationStyle( |
| 375 bool was_active) const { | 375 bool was_active) const { |
| 376 return was_active && client_->SupportsAnimation() | 376 return was_active && client_->SupportsAnimation() |
| 377 ? TouchHandle::ANIMATION_SMOOTH | 377 ? TouchHandle::ANIMATION_SMOOTH |
| 378 : TouchHandle::ANIMATION_NONE; | 378 : TouchHandle::ANIMATION_NONE; |
| 379 } | 379 } |
| 380 | 380 |
| 381 } // namespace content | 381 } // namespace content |
| OLD | NEW |