Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(532)

Side by Side Diff: content/browser/android/overscroll_controller_android.cc

Issue 2884423003: Use scroll-boundary-behavior to control overscroll-refresh/glow on android. (Closed)
Patch Set: Added missing files Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/android/overscroll_controller_android.h" 5 #include "content/browser/android/overscroll_controller_android.h"
6 6
7 #include "base/android/build_info.h" 7 #include "base/android/build_info.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "cc/layers/layer.h" 10 #include "cc/layers/layer.h"
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 // Suppress refresh detection if the glow effect is still prominent. 121 // Suppress refresh detection if the glow effect is still prominent.
122 if (glow_effect_ && glow_effect_->IsActive()) { 122 if (glow_effect_ && glow_effect_->IsActive()) {
123 if (glow_effect_->GetVisibleAlpha() > MinGlowAlphaToDisableRefresh()) 123 if (glow_effect_->GetVisibleAlpha() > MinGlowAlphaToDisableRefresh())
124 return false; 124 return false;
125 } 125 }
126 126
127 bool handled = false; 127 bool handled = false;
128 switch (event.GetType()) { 128 switch (event.GetType()) {
129 case blink::WebInputEvent::kGestureScrollBegin: 129 case blink::WebInputEvent::kGestureScrollBegin:
130 refresh_effect_->OnScrollBegin(); 130 refresh_effect_->OnScrollBegin();
131 consumed_ = false;
131 break; 132 break;
132 133
133 case blink::WebInputEvent::kGestureScrollUpdate: { 134 case blink::WebInputEvent::kGestureScrollUpdate: {
134 gfx::Vector2dF scroll_delta(event.data.scroll_update.delta_x, 135 gfx::Vector2dF scroll_delta(event.data.scroll_update.delta_x,
135 event.data.scroll_update.delta_y); 136 event.data.scroll_update.delta_y);
136 scroll_delta.Scale(dpi_scale_); 137 scroll_delta.Scale(dpi_scale_);
137 handled = refresh_effect_->WillHandleScrollUpdate(scroll_delta); 138 handled = refresh_effect_->WillHandleScrollUpdate(scroll_delta);
139 LOG(ERROR) << handled;
majidvp 2017/05/18 15:26:10 remove.
sunyunjia 2017/05/19 20:14:23 Done.
138 } break; 140 } break;
139 141
140 case blink::WebInputEvent::kGestureScrollEnd: 142 case blink::WebInputEvent::kGestureScrollEnd:
141 refresh_effect_->OnScrollEnd(gfx::Vector2dF()); 143 refresh_effect_->OnScrollEnd(gfx::Vector2dF());
142 break; 144 break;
143 145
144 case blink::WebInputEvent::kGestureFlingStart: { 146 case blink::WebInputEvent::kGestureFlingStart: {
145 if (refresh_effect_->IsActive()) { 147 if (refresh_effect_->IsActive()) {
146 gfx::Vector2dF scroll_velocity(event.data.fling_start.velocity_x, 148 gfx::Vector2dF scroll_velocity(event.data.fling_start.velocity_x,
147 event.data.fling_start.velocity_y); 149 event.data.fling_start.velocity_y);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 // sent from the renderer compositor. 184 // sent from the renderer compositor.
183 if (event.GetType() == blink::WebInputEvent::kGestureScrollEnd || 185 if (event.GetType() == blink::WebInputEvent::kGestureScrollEnd ||
184 event.GetType() == blink::WebInputEvent::kGestureFlingStart) { 186 event.GetType() == blink::WebInputEvent::kGestureFlingStart) {
185 OnOverscrolled(DidOverscrollParams()); 187 OnOverscrolled(DidOverscrollParams());
186 } 188 }
187 189
188 if (event.GetType() == blink::WebInputEvent::kGestureScrollUpdate && 190 if (event.GetType() == blink::WebInputEvent::kGestureScrollUpdate &&
189 refresh_effect_) { 191 refresh_effect_) {
190 // The effect should only be allowed if both the causal touch events go 192 // The effect should only be allowed if both the causal touch events go
191 // unconsumed and the generated scroll events go unconsumed. 193 // unconsumed and the generated scroll events go unconsumed.
192 bool consumed = 194 consumed_ = ack_result == INPUT_EVENT_ACK_STATE_CONSUMED ||
193 ack_result == INPUT_EVENT_ACK_STATE_CONSUMED || 195 event.data.scroll_update.previous_update_in_sequence_prevented;
194 event.data.scroll_update.previous_update_in_sequence_prevented;
195 refresh_effect_->OnScrollUpdateAck(consumed);
196 } 196 }
197 } 197 }
198 198
199 void OverscrollControllerAndroid::OnOverscrolled( 199 void OverscrollControllerAndroid::OnOverscrolled(
200 const DidOverscrollParams& params) { 200 const DidOverscrollParams& overscroll_params) {
201 if (!enabled_) 201 if (!enabled_)
202 return; 202 return;
203 203
204 DidOverscrollParams params = overscroll_params;
205
206 if (refresh_effect_) {
207 if (params.scroll_boundary_behavior.y ==
208 cc::ScrollBoundaryBehavior::ScrollBoundaryBehaviorType::
209 kScrollBoundaryBehaviorTypeAuto)
210 refresh_effect_->OnScrollUpdateAck(consumed_);
211 else
212 refresh_effect_->OnScrollUpdateAck(true);
majidvp 2017/05/18 15:26:10 This method is no longer invoked on ScrollUpdateAc
sunyunjia 2017/05/19 20:14:23 Done.
213 }
214
204 if (refresh_effect_ && (refresh_effect_->IsActive() || 215 if (refresh_effect_ && (refresh_effect_->IsActive() ||
205 refresh_effect_->IsAwaitingScrollUpdateAck())) { 216 refresh_effect_->IsAwaitingScrollUpdateAck())) {
majidvp 2017/05/18 15:26:10 nit: the first condition is the same of the above
sunyunjia 2017/05/19 20:14:23 Done.
206 // An active (or potentially active) refresh effect should always pre-empt 217 // An active (or potentially active) refresh effect should always pre-empt
207 // the passive glow effect. 218 // the passive glow effect.
208 return; 219 return;
209 } 220 }
210 221
222 if (params.scroll_boundary_behavior.y ==
223 cc::ScrollBoundaryBehavior::ScrollBoundaryBehaviorType::
224 kScrollBoundaryBehaviorTypeNone)
225 params.ClearY();
226
227 if (params.scroll_boundary_behavior.x ==
228 cc::ScrollBoundaryBehavior::ScrollBoundaryBehaviorType::
229 kScrollBoundaryBehaviorTypeNone)
230 params.ClearX();
majidvp 2017/05/18 15:26:10 I believe this is for glow. So please update the C
sunyunjia 2017/05/19 20:14:23 Done.
231
211 if (glow_effect_ && 232 if (glow_effect_ &&
212 glow_effect_->OnOverscrolled( 233 glow_effect_->OnOverscrolled(
213 base::TimeTicks::Now(), 234 base::TimeTicks::Now(),
214 gfx::ScaleVector2d(params.accumulated_overscroll, dpi_scale_), 235 gfx::ScaleVector2d(params.accumulated_overscroll, dpi_scale_),
215 gfx::ScaleVector2d(params.latest_overscroll_delta, dpi_scale_), 236 gfx::ScaleVector2d(params.latest_overscroll_delta, dpi_scale_),
216 gfx::ScaleVector2d(params.current_fling_velocity, dpi_scale_), 237 gfx::ScaleVector2d(params.current_fling_velocity, dpi_scale_),
217 gfx::ScaleVector2d( 238 gfx::ScaleVector2d(
218 params.causal_event_viewport_point.OffsetFromOrigin(), 239 params.causal_event_viewport_point.OffsetFromOrigin(),
219 dpi_scale_))) { 240 dpi_scale_))) {
220 SetNeedsAnimate(); 241 SetNeedsAnimate();
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 std::unique_ptr<EdgeEffectBase> 295 std::unique_ptr<EdgeEffectBase>
275 OverscrollControllerAndroid::CreateEdgeEffect() { 296 OverscrollControllerAndroid::CreateEdgeEffect() {
276 return CreateGlowEdgeEffect(&compositor_->GetResourceManager(), dpi_scale_); 297 return CreateGlowEdgeEffect(&compositor_->GetResourceManager(), dpi_scale_);
277 } 298 }
278 299
279 void OverscrollControllerAndroid::SetNeedsAnimate() { 300 void OverscrollControllerAndroid::SetNeedsAnimate() {
280 compositor_->SetNeedsAnimate(); 301 compositor_->SetNeedsAnimate();
281 } 302 }
282 303
283 } // namespace content 304 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698