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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 BrowserControlsOffsetManager::~BrowserControlsOffsetManager() {} | 53 BrowserControlsOffsetManager::~BrowserControlsOffsetManager() {} |
54 | 54 |
55 float BrowserControlsOffsetManager::ControlsTopOffset() const { | 55 float BrowserControlsOffsetManager::ControlsTopOffset() const { |
56 return ContentTopOffset() - TopControlsHeight(); | 56 return ContentTopOffset() - TopControlsHeight(); |
57 } | 57 } |
58 | 58 |
59 float BrowserControlsOffsetManager::ContentTopOffset() const { | 59 float BrowserControlsOffsetManager::ContentTopOffset() const { |
60 return TopControlsShownRatio() * TopControlsHeight(); | 60 return TopControlsShownRatio() * TopControlsHeight(); |
61 } | 61 } |
62 | 62 |
63 float BrowserControlsOffsetManager::ContentOffsetInternal() const { | |
64 if (!TopControlsHeight()) | |
65 return BottomControlsShownRatio() * BottomControlsHeight(); | |
66 return ContentTopOffset(); | |
67 } | |
68 | |
69 float BrowserControlsOffsetManager::TopControlsShownRatio() const { | 63 float BrowserControlsOffsetManager::TopControlsShownRatio() const { |
70 return client_->CurrentBrowserControlsShownRatio(); | 64 return client_->CurrentBrowserControlsShownRatio(); |
71 } | 65 } |
72 | 66 |
73 float BrowserControlsOffsetManager::TopControlsHeight() const { | 67 float BrowserControlsOffsetManager::TopControlsHeight() const { |
74 return client_->TopControlsHeight(); | 68 return client_->TopControlsHeight(); |
75 } | 69 } |
76 | 70 |
77 float BrowserControlsOffsetManager::BottomControlsHeight() const { | 71 float BrowserControlsOffsetManager::BottomControlsHeight() const { |
78 return client_->BottomControlsHeight(); | 72 return client_->BottomControlsHeight(); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 void BrowserControlsOffsetManager::ScrollBegin() { | 113 void BrowserControlsOffsetManager::ScrollBegin() { |
120 if (pinch_gesture_active_) | 114 if (pinch_gesture_active_) |
121 return; | 115 return; |
122 | 116 |
123 ResetAnimations(); | 117 ResetAnimations(); |
124 ResetBaseline(); | 118 ResetBaseline(); |
125 } | 119 } |
126 | 120 |
127 gfx::Vector2dF BrowserControlsOffsetManager::ScrollBy( | 121 gfx::Vector2dF BrowserControlsOffsetManager::ScrollBy( |
128 const gfx::Vector2dF& pending_delta) { | 122 const gfx::Vector2dF& pending_delta) { |
129 // If one or both of the top/bottom controls are showing, the shown ratio | 123 if (!TopControlsHeight()) |
130 // needs to be computed. | |
131 float controls_height = | |
132 TopControlsHeight() ? TopControlsHeight() : BottomControlsHeight(); | |
133 | |
134 if (!controls_height) | |
135 return pending_delta; | 124 return pending_delta; |
136 | 125 |
137 if (pinch_gesture_active_) | 126 if (pinch_gesture_active_) |
138 return pending_delta; | 127 return pending_delta; |
139 | 128 |
140 if (permitted_state_ == SHOWN && pending_delta.y() > 0) | 129 if (permitted_state_ == SHOWN && pending_delta.y() > 0) |
141 return pending_delta; | 130 return pending_delta; |
142 else if (permitted_state_ == HIDDEN && pending_delta.y() < 0) | 131 else if (permitted_state_ == HIDDEN && pending_delta.y() < 0) |
143 return pending_delta; | 132 return pending_delta; |
144 | 133 |
145 accumulated_scroll_delta_ += pending_delta.y(); | 134 accumulated_scroll_delta_ += pending_delta.y(); |
146 | 135 |
147 float old_offset = ContentOffsetInternal(); | 136 float old_offset = ContentTopOffset(); |
148 client_->SetCurrentBrowserControlsShownRatio( | 137 client_->SetCurrentBrowserControlsShownRatio( |
149 (baseline_content_offset_ - accumulated_scroll_delta_) / controls_height); | 138 (baseline_content_offset_ - accumulated_scroll_delta_) / |
| 139 TopControlsHeight()); |
150 | 140 |
151 // If the controls are fully visible, treat the current position as the | 141 // If the controls are fully visible, treat the current position as the |
152 // new baseline even if the gesture didn't end. | 142 // new baseline even if the gesture didn't end. |
153 if (TopControlsShownRatio() == 1.f) | 143 if (TopControlsShownRatio() == 1.f) |
154 ResetBaseline(); | 144 ResetBaseline(); |
155 | 145 |
156 ResetAnimations(); | 146 ResetAnimations(); |
157 | 147 |
158 gfx::Vector2dF applied_delta(0.f, old_offset - ContentOffsetInternal()); | 148 gfx::Vector2dF applied_delta(0.f, old_offset - ContentTopOffset()); |
159 return pending_delta - applied_delta; | 149 return pending_delta - applied_delta; |
160 } | 150 } |
161 | 151 |
162 void BrowserControlsOffsetManager::ScrollEnd() { | 152 void BrowserControlsOffsetManager::ScrollEnd() { |
163 if (pinch_gesture_active_) | 153 if (pinch_gesture_active_) |
164 return; | 154 return; |
165 | 155 |
166 StartAnimationIfNecessary(); | 156 StartAnimationIfNecessary(); |
167 } | 157 } |
168 | 158 |
(...skipping 13 matching lines...) Expand all Loading... |
182 | 172 |
183 void BrowserControlsOffsetManager::MainThreadHasStoppedFlinging() { | 173 void BrowserControlsOffsetManager::MainThreadHasStoppedFlinging() { |
184 StartAnimationIfNecessary(); | 174 StartAnimationIfNecessary(); |
185 } | 175 } |
186 | 176 |
187 gfx::Vector2dF BrowserControlsOffsetManager::Animate( | 177 gfx::Vector2dF BrowserControlsOffsetManager::Animate( |
188 base::TimeTicks monotonic_time) { | 178 base::TimeTicks monotonic_time) { |
189 if (!has_animation() || !client_->HaveRootScrollLayer()) | 179 if (!has_animation() || !client_->HaveRootScrollLayer()) |
190 return gfx::Vector2dF(); | 180 return gfx::Vector2dF(); |
191 | 181 |
192 float old_offset = ContentOffsetInternal(); | 182 float old_offset = ContentTopOffset(); |
193 float new_ratio = gfx::Tween::ClampedFloatValueBetween( | 183 float new_ratio = gfx::Tween::ClampedFloatValueBetween( |
194 monotonic_time, animation_start_time_, animation_start_value_, | 184 monotonic_time, animation_start_time_, animation_start_value_, |
195 animation_stop_time_, animation_stop_value_); | 185 animation_stop_time_, animation_stop_value_); |
196 client_->SetCurrentBrowserControlsShownRatio(new_ratio); | 186 client_->SetCurrentBrowserControlsShownRatio(new_ratio); |
197 | 187 |
198 if (IsAnimationComplete(new_ratio)) | 188 if (IsAnimationComplete(new_ratio)) |
199 ResetAnimations(); | 189 ResetAnimations(); |
200 | 190 |
201 gfx::Vector2dF scroll_delta(0.f, ContentOffsetInternal() - old_offset); | 191 gfx::Vector2dF scroll_delta(0.f, ContentTopOffset() - old_offset); |
202 return scroll_delta; | 192 return scroll_delta; |
203 } | 193 } |
204 | 194 |
205 void BrowserControlsOffsetManager::ResetAnimations() { | 195 void BrowserControlsOffsetManager::ResetAnimations() { |
206 animation_start_time_ = base::TimeTicks(); | 196 animation_start_time_ = base::TimeTicks(); |
207 animation_start_value_ = 0.f; | 197 animation_start_value_ = 0.f; |
208 animation_stop_time_ = base::TimeTicks(); | 198 animation_stop_time_ = base::TimeTicks(); |
209 animation_stop_value_ = 0.f; | 199 animation_stop_value_ = 0.f; |
210 | 200 |
211 animation_direction_ = NO_ANIMATION; | 201 animation_direction_ = NO_ANIMATION; |
212 } | 202 } |
213 | 203 |
214 void BrowserControlsOffsetManager::SetupAnimation( | 204 void BrowserControlsOffsetManager::SetupAnimation( |
215 AnimationDirection direction) { | 205 AnimationDirection direction) { |
216 DCHECK_NE(NO_ANIMATION, direction); | 206 DCHECK_NE(NO_ANIMATION, direction); |
217 DCHECK(direction != HIDING_CONTROLS || TopControlsShownRatio() > 0.f); | 207 DCHECK(direction != HIDING_CONTROLS || TopControlsShownRatio() > 0.f); |
218 DCHECK(direction != SHOWING_CONTROLS || TopControlsShownRatio() < 1.f); | 208 DCHECK(direction != SHOWING_CONTROLS || TopControlsShownRatio() < 1.f); |
219 | 209 |
220 if (has_animation() && animation_direction_ == direction) | 210 if (has_animation() && animation_direction_ == direction) |
221 return; | 211 return; |
222 | 212 |
223 if (!TopControlsHeight() && !BottomControlsHeight()) { | 213 if (!TopControlsHeight()) { |
224 client_->SetCurrentBrowserControlsShownRatio( | 214 client_->SetCurrentBrowserControlsShownRatio( |
225 direction == HIDING_CONTROLS ? 0.f : 1.f); | 215 direction == HIDING_CONTROLS ? 0.f : 1.f); |
226 return; | 216 return; |
227 } | 217 } |
228 | 218 |
229 animation_start_time_ = base::TimeTicks::Now(); | 219 animation_start_time_ = base::TimeTicks::Now(); |
230 animation_start_value_ = TopControlsShownRatio(); | 220 animation_start_value_ = TopControlsShownRatio(); |
231 | 221 |
232 const float max_ending_ratio = (direction == SHOWING_CONTROLS ? 1 : -1); | 222 const float max_ending_ratio = (direction == SHOWING_CONTROLS ? 1 : -1); |
233 animation_stop_time_ = | 223 animation_stop_time_ = |
(...skipping 24 matching lines...) Expand all Loading... |
258 } | 248 } |
259 } | 249 } |
260 | 250 |
261 bool BrowserControlsOffsetManager::IsAnimationComplete(float new_ratio) { | 251 bool BrowserControlsOffsetManager::IsAnimationComplete(float new_ratio) { |
262 return (animation_direction_ == SHOWING_CONTROLS && new_ratio >= 1.f) || | 252 return (animation_direction_ == SHOWING_CONTROLS && new_ratio >= 1.f) || |
263 (animation_direction_ == HIDING_CONTROLS && new_ratio <= 0.f); | 253 (animation_direction_ == HIDING_CONTROLS && new_ratio <= 0.f); |
264 } | 254 } |
265 | 255 |
266 void BrowserControlsOffsetManager::ResetBaseline() { | 256 void BrowserControlsOffsetManager::ResetBaseline() { |
267 accumulated_scroll_delta_ = 0.f; | 257 accumulated_scroll_delta_ = 0.f; |
268 baseline_content_offset_ = ContentOffsetInternal(); | 258 baseline_content_offset_ = ContentTopOffset(); |
269 } | 259 } |
270 | 260 |
271 } // namespace cc | 261 } // namespace cc |
OLD | NEW |