| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "cc/input/browser_controls_offset_manager.h" | 5 #include "cc/input/browser_controls_offset_manager.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 BrowserControlsOffsetManager::BrowserControlsOffsetManager( | 36 BrowserControlsOffsetManager::BrowserControlsOffsetManager( |
| 37 BrowserControlsOffsetManagerClient* client, | 37 BrowserControlsOffsetManagerClient* client, |
| 38 float controls_show_threshold, | 38 float controls_show_threshold, |
| 39 float controls_hide_threshold) | 39 float controls_hide_threshold) |
| 40 : client_(client), | 40 : client_(client), |
| 41 animation_start_value_(0.f), | 41 animation_start_value_(0.f), |
| 42 animation_stop_value_(0.f), | 42 animation_stop_value_(0.f), |
| 43 animation_direction_(NO_ANIMATION), | 43 animation_direction_(NO_ANIMATION), |
| 44 permitted_state_(BOTH), | 44 permitted_state_(BOTH), |
| 45 accumulated_scroll_delta_(0.f), | 45 accumulated_scroll_delta_(0.f), |
| 46 baseline_content_offset_(0.f), | 46 baseline_top_content_offset_(0.f), |
| 47 baseline_bottom_content_offset_(0.f), |
| 47 controls_show_threshold_(controls_hide_threshold), | 48 controls_show_threshold_(controls_hide_threshold), |
| 48 controls_hide_threshold_(controls_show_threshold), | 49 controls_hide_threshold_(controls_show_threshold), |
| 49 pinch_gesture_active_(false) { | 50 pinch_gesture_active_(false) { |
| 50 CHECK(client_); | 51 CHECK(client_); |
| 51 } | 52 } |
| 52 | 53 |
| 53 BrowserControlsOffsetManager::~BrowserControlsOffsetManager() {} | 54 BrowserControlsOffsetManager::~BrowserControlsOffsetManager() {} |
| 54 | 55 |
| 55 float BrowserControlsOffsetManager::ControlsTopOffset() const { | 56 float BrowserControlsOffsetManager::ControlsTopOffset() const { |
| 56 return ContentTopOffset() - TopControlsHeight(); | 57 return ContentTopOffset() - TopControlsHeight(); |
| 57 } | 58 } |
| 58 | 59 |
| 59 float BrowserControlsOffsetManager::ContentTopOffset() const { | 60 float BrowserControlsOffsetManager::ContentTopOffset() const { |
| 60 return TopControlsShownRatio() * TopControlsHeight(); | 61 return TopControlsHeight() > 0 |
| 62 ? TopControlsShownRatio() * TopControlsHeight() : 0.0f; |
| 61 } | 63 } |
| 62 | 64 |
| 63 float BrowserControlsOffsetManager::TopControlsShownRatio() const { | 65 float BrowserControlsOffsetManager::TopControlsShownRatio() const { |
| 64 return client_->CurrentBrowserControlsShownRatio(); | 66 return client_->CurrentBrowserControlsShownRatio(); |
| 65 } | 67 } |
| 66 | 68 |
| 67 float BrowserControlsOffsetManager::TopControlsHeight() const { | 69 float BrowserControlsOffsetManager::TopControlsHeight() const { |
| 68 return client_->TopControlsHeight(); | 70 return client_->TopControlsHeight(); |
| 69 } | 71 } |
| 70 | 72 |
| 71 float BrowserControlsOffsetManager::BottomControlsHeight() const { | 73 float BrowserControlsOffsetManager::BottomControlsHeight() const { |
| 72 return client_->BottomControlsHeight(); | 74 return client_->BottomControlsHeight(); |
| 73 } | 75 } |
| 74 | 76 |
| 75 float BrowserControlsOffsetManager::ContentBottomOffset() const { | 77 float BrowserControlsOffsetManager::ContentBottomOffset() const { |
| 76 return BottomControlsShownRatio() * BottomControlsHeight(); | 78 return BottomControlsHeight() > 0 |
| 79 ? BottomControlsShownRatio() * BottomControlsHeight() : 0.0f; |
| 77 } | 80 } |
| 78 | 81 |
| 79 float BrowserControlsOffsetManager::BottomControlsShownRatio() const { | 82 float BrowserControlsOffsetManager::BottomControlsShownRatio() const { |
| 80 return TopControlsShownRatio(); | 83 return TopControlsShownRatio(); |
| 81 } | 84 } |
| 82 | 85 |
| 83 void BrowserControlsOffsetManager::UpdateBrowserControlsState( | 86 void BrowserControlsOffsetManager::UpdateBrowserControlsState( |
| 84 BrowserControlsState constraints, | 87 BrowserControlsState constraints, |
| 85 BrowserControlsState current, | 88 BrowserControlsState current, |
| 86 bool animate) { | 89 bool animate) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 113 void BrowserControlsOffsetManager::ScrollBegin() { | 116 void BrowserControlsOffsetManager::ScrollBegin() { |
| 114 if (pinch_gesture_active_) | 117 if (pinch_gesture_active_) |
| 115 return; | 118 return; |
| 116 | 119 |
| 117 ResetAnimations(); | 120 ResetAnimations(); |
| 118 ResetBaseline(); | 121 ResetBaseline(); |
| 119 } | 122 } |
| 120 | 123 |
| 121 gfx::Vector2dF BrowserControlsOffsetManager::ScrollBy( | 124 gfx::Vector2dF BrowserControlsOffsetManager::ScrollBy( |
| 122 const gfx::Vector2dF& pending_delta) { | 125 const gfx::Vector2dF& pending_delta) { |
| 123 if (!TopControlsHeight()) | 126 // If one or both of the top/bottom controls are showing, the shown ratio |
| 127 // needs to be computed. |
| 128 float controls_height = |
| 129 TopControlsHeight() ? TopControlsHeight() : BottomControlsHeight(); |
| 130 |
| 131 if (!controls_height) |
| 124 return pending_delta; | 132 return pending_delta; |
| 125 | 133 |
| 126 if (pinch_gesture_active_) | 134 if (pinch_gesture_active_) |
| 127 return pending_delta; | 135 return pending_delta; |
| 128 | 136 |
| 129 if (permitted_state_ == SHOWN && pending_delta.y() > 0) | 137 if (permitted_state_ == SHOWN && pending_delta.y() > 0) |
| 130 return pending_delta; | 138 return pending_delta; |
| 131 else if (permitted_state_ == HIDDEN && pending_delta.y() < 0) | 139 else if (permitted_state_ == HIDDEN && pending_delta.y() < 0) |
| 132 return pending_delta; | 140 return pending_delta; |
| 133 | 141 |
| 134 accumulated_scroll_delta_ += pending_delta.y(); | 142 accumulated_scroll_delta_ += pending_delta.y(); |
| 135 | 143 |
| 136 float old_offset = ContentTopOffset(); | 144 float old_top_offset = ContentTopOffset(); |
| 145 float baseline_content_offset = TopControlsHeight() |
| 146 ? baseline_top_content_offset_ : baseline_bottom_content_offset_; |
| 137 client_->SetCurrentBrowserControlsShownRatio( | 147 client_->SetCurrentBrowserControlsShownRatio( |
| 138 (baseline_content_offset_ - accumulated_scroll_delta_) / | 148 (baseline_content_offset - accumulated_scroll_delta_) / controls_height); |
| 139 TopControlsHeight()); | |
| 140 | 149 |
| 141 // If the controls are fully visible, treat the current position as the | 150 // If the controls are fully visible, treat the current position as the |
| 142 // new baseline even if the gesture didn't end. | 151 // new baseline even if the gesture didn't end. |
| 143 if (TopControlsShownRatio() == 1.f) | 152 if (TopControlsShownRatio() == 1.f) |
| 144 ResetBaseline(); | 153 ResetBaseline(); |
| 145 | 154 |
| 146 ResetAnimations(); | 155 ResetAnimations(); |
| 147 | 156 |
| 148 gfx::Vector2dF applied_delta(0.f, old_offset - ContentTopOffset()); | 157 // applied_delta will negate any scroll on the content if the top browser |
| 158 // controls are showing in favor of hiding the controls and resizing the |
| 159 // content. If the top controls have no height, the content should scroll |
| 160 // immediately. |
| 161 gfx::Vector2dF applied_delta(0.f, old_top_offset - ContentTopOffset()); |
| 149 return pending_delta - applied_delta; | 162 return pending_delta - applied_delta; |
| 150 } | 163 } |
| 151 | 164 |
| 152 void BrowserControlsOffsetManager::ScrollEnd() { | 165 void BrowserControlsOffsetManager::ScrollEnd() { |
| 153 if (pinch_gesture_active_) | 166 if (pinch_gesture_active_) |
| 154 return; | 167 return; |
| 155 | 168 |
| 156 StartAnimationIfNecessary(); | 169 StartAnimationIfNecessary(); |
| 157 } | 170 } |
| 158 | 171 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 } | 261 } |
| 249 } | 262 } |
| 250 | 263 |
| 251 bool BrowserControlsOffsetManager::IsAnimationComplete(float new_ratio) { | 264 bool BrowserControlsOffsetManager::IsAnimationComplete(float new_ratio) { |
| 252 return (animation_direction_ == SHOWING_CONTROLS && new_ratio >= 1.f) || | 265 return (animation_direction_ == SHOWING_CONTROLS && new_ratio >= 1.f) || |
| 253 (animation_direction_ == HIDING_CONTROLS && new_ratio <= 0.f); | 266 (animation_direction_ == HIDING_CONTROLS && new_ratio <= 0.f); |
| 254 } | 267 } |
| 255 | 268 |
| 256 void BrowserControlsOffsetManager::ResetBaseline() { | 269 void BrowserControlsOffsetManager::ResetBaseline() { |
| 257 accumulated_scroll_delta_ = 0.f; | 270 accumulated_scroll_delta_ = 0.f; |
| 258 baseline_content_offset_ = ContentTopOffset(); | 271 baseline_top_content_offset_ = ContentTopOffset(); |
| 272 baseline_bottom_content_offset_ = ContentBottomOffset(); |
| 259 } | 273 } |
| 260 | 274 |
| 261 } // namespace cc | 275 } // namespace cc |
| OLD | NEW |