| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/web_contents/aura/overscroll_window_delegate.h" | 5 #include "content/browser/web_contents/aura/overscroll_window_delegate.h" |
| 6 | 6 |
| 7 #include "base/i18n/rtl.h" | 7 #include "base/i18n/rtl.h" |
| 8 #include "content/browser/frame_host/navigation_controller_impl.h" | 8 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 9 #include "content/browser/frame_host/navigation_entry_impl.h" | 9 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 10 #include "content/browser/renderer_host/overscroll_controller_delegate.h" | 10 #include "content/browser/renderer_host/overscroll_controller_delegate.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHSCREEN)), | 27 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHSCREEN)), |
| 28 start_threshold_touchpad_(content::GetOverscrollConfig( | 28 start_threshold_touchpad_(content::GetOverscrollConfig( |
| 29 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHPAD)), | 29 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHPAD)), |
| 30 active_start_threshold_(0.f) { | 30 active_start_threshold_(0.f) { |
| 31 SetImage(image); | 31 SetImage(image); |
| 32 } | 32 } |
| 33 | 33 |
| 34 OverscrollWindowDelegate::~OverscrollWindowDelegate() { | 34 OverscrollWindowDelegate::~OverscrollWindowDelegate() { |
| 35 } | 35 } |
| 36 | 36 |
| 37 void OverscrollWindowDelegate::StartOverscroll() { | 37 void OverscrollWindowDelegate::StartOverscroll(OverscrollSource source) { |
| 38 OverscrollMode old_mode = overscroll_mode_; | 38 OverscrollMode old_mode = overscroll_mode_; |
| 39 if (delta_x_ > 0) | 39 if (delta_x_ > 0) |
| 40 overscroll_mode_ = OVERSCROLL_EAST; | 40 overscroll_mode_ = OVERSCROLL_EAST; |
| 41 else | 41 else |
| 42 overscroll_mode_ = OVERSCROLL_WEST; | 42 overscroll_mode_ = OVERSCROLL_WEST; |
| 43 delegate_->OnOverscrollModeChange(old_mode, overscroll_mode_); | 43 delegate_->OnOverscrollModeChange(old_mode, overscroll_mode_, source); |
| 44 } | 44 } |
| 45 | 45 |
| 46 void OverscrollWindowDelegate::ResetOverscroll() { | 46 void OverscrollWindowDelegate::ResetOverscroll() { |
| 47 if (overscroll_mode_ == OVERSCROLL_NONE) | 47 if (overscroll_mode_ == OVERSCROLL_NONE) |
| 48 return; | 48 return; |
| 49 delegate_->OnOverscrollModeChange(overscroll_mode_, OVERSCROLL_NONE); | 49 delegate_->OnOverscrollModeChange(overscroll_mode_, OVERSCROLL_NONE, |
| 50 OVERSCROLL_SOURCE_NONE); |
| 50 overscroll_mode_ = OVERSCROLL_NONE; | 51 overscroll_mode_ = OVERSCROLL_NONE; |
| 51 delta_x_ = 0; | 52 delta_x_ = 0; |
| 52 } | 53 } |
| 53 | 54 |
| 54 void OverscrollWindowDelegate::CompleteOrResetOverscroll() { | 55 void OverscrollWindowDelegate::CompleteOrResetOverscroll() { |
| 55 if (overscroll_mode_ == OVERSCROLL_NONE) | 56 if (overscroll_mode_ == OVERSCROLL_NONE) |
| 56 return; | 57 return; |
| 57 int width = delegate_->GetVisibleBounds().width(); | 58 int width = delegate_->GetVisibleBounds().width(); |
| 58 float ratio = (fabs(delta_x_)) / width; | 59 float ratio = (fabs(delta_x_)) / width; |
| 59 if (ratio < complete_threshold_ratio_) { | 60 if (ratio < complete_threshold_ratio_) { |
| 60 ResetOverscroll(); | 61 ResetOverscroll(); |
| 61 return; | 62 return; |
| 62 } | 63 } |
| 63 delegate_->OnOverscrollComplete(overscroll_mode_); | 64 delegate_->OnOverscrollComplete(overscroll_mode_); |
| 64 overscroll_mode_ = OVERSCROLL_NONE; | 65 overscroll_mode_ = OVERSCROLL_NONE; |
| 65 delta_x_ = 0; | 66 delta_x_ = 0; |
| 66 } | 67 } |
| 67 | 68 |
| 68 void OverscrollWindowDelegate::UpdateOverscroll(float delta_x) { | 69 void OverscrollWindowDelegate::UpdateOverscroll(float delta_x, |
| 70 OverscrollSource source) { |
| 69 float old_delta_x = delta_x_; | 71 float old_delta_x = delta_x_; |
| 70 delta_x_ += delta_x; | 72 delta_x_ += delta_x; |
| 71 if (overscroll_mode_ == OVERSCROLL_NONE) { | 73 if (overscroll_mode_ == OVERSCROLL_NONE) { |
| 72 if (fabs(delta_x_) > active_start_threshold_) | 74 if (fabs(delta_x_) > active_start_threshold_) |
| 73 StartOverscroll(); | 75 StartOverscroll(source); |
| 74 return; | 76 return; |
| 75 } | 77 } |
| 76 if ((old_delta_x < 0 && delta_x_ > 0) || (old_delta_x > 0 && delta_x_ < 0)) { | 78 if ((old_delta_x < 0 && delta_x_ > 0) || (old_delta_x > 0 && delta_x_ < 0)) { |
| 77 ResetOverscroll(); | 79 ResetOverscroll(); |
| 78 return; | 80 return; |
| 79 } | 81 } |
| 80 delegate_->OnOverscrollUpdate(delta_x_, 0.f); | 82 delegate_->OnOverscrollUpdate(delta_x_, 0.f); |
| 81 } | 83 } |
| 82 | 84 |
| 83 void OverscrollWindowDelegate::OnKeyEvent(ui::KeyEvent* event) { | 85 void OverscrollWindowDelegate::OnKeyEvent(ui::KeyEvent* event) { |
| 84 ResetOverscroll(); | 86 ResetOverscroll(); |
| 85 } | 87 } |
| 86 | 88 |
| 87 void OverscrollWindowDelegate::OnMouseEvent(ui::MouseEvent* event) { | 89 void OverscrollWindowDelegate::OnMouseEvent(ui::MouseEvent* event) { |
| 88 if (!(event->flags() & ui::EF_IS_SYNTHESIZED) && | 90 if (!(event->flags() & ui::EF_IS_SYNTHESIZED) && |
| 89 event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) { | 91 event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) { |
| 90 ResetOverscroll(); | 92 ResetOverscroll(); |
| 91 } | 93 } |
| 92 } | 94 } |
| 93 | 95 |
| 94 void OverscrollWindowDelegate::OnScrollEvent(ui::ScrollEvent* event) { | 96 void OverscrollWindowDelegate::OnScrollEvent(ui::ScrollEvent* event) { |
| 95 active_start_threshold_ = start_threshold_touchpad_; | 97 active_start_threshold_ = start_threshold_touchpad_; |
| 96 if (event->type() == ui::ET_SCROLL) | 98 if (event->type() == ui::ET_SCROLL) |
| 97 UpdateOverscroll(event->x_offset_ordinal()); | 99 UpdateOverscroll(event->x_offset_ordinal(), OVERSCROLL_TOUCHPAD); |
| 98 else if (event->type() == ui::ET_SCROLL_FLING_START) | 100 else if (event->type() == ui::ET_SCROLL_FLING_START) |
| 99 CompleteOrResetOverscroll(); | 101 CompleteOrResetOverscroll(); |
| 100 else | 102 else |
| 101 ResetOverscroll(); | 103 ResetOverscroll(); |
| 102 event->SetHandled(); | 104 event->SetHandled(); |
| 103 } | 105 } |
| 104 | 106 |
| 105 void OverscrollWindowDelegate::OnGestureEvent(ui::GestureEvent* event) { | 107 void OverscrollWindowDelegate::OnGestureEvent(ui::GestureEvent* event) { |
| 106 active_start_threshold_ = start_threshold_touchscreen_; | 108 active_start_threshold_ = start_threshold_touchscreen_; |
| 107 switch (event->type()) { | 109 switch (event->type()) { |
| 108 case ui::ET_GESTURE_SCROLL_UPDATE: | 110 case ui::ET_GESTURE_SCROLL_UPDATE: |
| 109 UpdateOverscroll(event->details().scroll_x()); | 111 UpdateOverscroll(event->details().scroll_x(), OVERSCROLL_TOUCHSCREEN); |
| 110 break; | 112 break; |
| 111 | 113 |
| 112 case ui::ET_GESTURE_SCROLL_END: | 114 case ui::ET_GESTURE_SCROLL_END: |
| 113 CompleteOrResetOverscroll(); | 115 CompleteOrResetOverscroll(); |
| 114 break; | 116 break; |
| 115 | 117 |
| 116 case ui::ET_SCROLL_FLING_START: | 118 case ui::ET_SCROLL_FLING_START: |
| 117 CompleteOrResetOverscroll(); | 119 CompleteOrResetOverscroll(); |
| 118 break; | 120 break; |
| 119 | 121 |
| 120 case ui::ET_GESTURE_PINCH_BEGIN: | 122 case ui::ET_GESTURE_PINCH_BEGIN: |
| 121 case ui::ET_GESTURE_PINCH_UPDATE: | 123 case ui::ET_GESTURE_PINCH_UPDATE: |
| 122 case ui::ET_GESTURE_PINCH_END: | 124 case ui::ET_GESTURE_PINCH_END: |
| 123 ResetOverscroll(); | 125 ResetOverscroll(); |
| 124 break; | 126 break; |
| 125 | 127 |
| 126 default: | 128 default: |
| 127 break; | 129 break; |
| 128 } | 130 } |
| 129 event->SetHandled(); | 131 event->SetHandled(); |
| 130 } | 132 } |
| 131 | 133 |
| 132 } // namespace content | 134 } // namespace content |
| OLD | NEW |