| Index: content/browser/renderer_host/render_widget_host_view_android.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| index cf5cf24dd0e35a13c7f17ea94b49741ceeb9a070..d20841c250ab88f0b3819f627a6490126b462a80 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| @@ -129,19 +129,18 @@ OverscrollGlow::DisplayParameters CreateOverscrollDisplayParameters(
|
| OverscrollGlow::DisplayParameters params;
|
| params.size = gfx::ScaleSize(
|
| frame_metadata.scrollable_viewport_size, scale_factor);
|
| - params.edge_offsets[EdgeEffect::EDGE_TOP] =
|
| + params.edge_offsets[OverscrollGlow::EDGE_TOP] =
|
| -frame_metadata.root_scroll_offset.y() * scale_factor;
|
| - params.edge_offsets[EdgeEffect::EDGE_LEFT] =
|
| + params.edge_offsets[OverscrollGlow::EDGE_LEFT] =
|
| -frame_metadata.root_scroll_offset.x() * scale_factor;
|
| - params.edge_offsets[EdgeEffect::EDGE_BOTTOM] =
|
| + params.edge_offsets[OverscrollGlow::EDGE_BOTTOM] =
|
| (frame_metadata.root_layer_size.height() -
|
| frame_metadata.root_scroll_offset.y() -
|
| frame_metadata.scrollable_viewport_size.height()) * scale_factor;
|
| - params.edge_offsets[EdgeEffect::EDGE_RIGHT] =
|
| + params.edge_offsets[OverscrollGlow::EDGE_RIGHT] =
|
| (frame_metadata.root_layer_size.width() -
|
| frame_metadata.root_scroll_offset.x() -
|
| frame_metadata.scrollable_viewport_size.width()) * scale_factor;
|
| - params.device_scale_factor = frame_metadata.device_scale_factor;
|
|
|
| return params;
|
| }
|
| @@ -1111,12 +1110,25 @@ void RenderWidgetHostViewAndroid::ProcessAckedTouchEvent(
|
| void RenderWidgetHostViewAndroid::GestureEventAck(
|
| const blink::WebGestureEvent& event,
|
| InputEventAckState ack_result) {
|
| + // The overscroll effect requires an explicit release signal that may not be
|
| + // sent from the renderer compositor.
|
| + if (event.type == blink::WebInputEvent::GestureScrollEnd ||
|
| + event.type == blink::WebInputEvent::GestureFlingStart) {
|
| + DidOverscroll(DidOverscrollParams());
|
| + }
|
| +
|
| if (content_view_core_)
|
| content_view_core_->OnGestureEventAck(event, ack_result);
|
| }
|
|
|
| InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent(
|
| const blink::WebInputEvent& input_event) {
|
| + if (input_event.type == blink::WebInputEvent::GestureScrollUpdate) {
|
| + const blink::WebGestureEvent& gesture =
|
| + static_cast<const blink::WebGestureEvent&>(input_event);
|
| + last_scroll_update_position_ = gfx::PointF(gesture.x, gesture.y);
|
| + }
|
| +
|
| if (content_view_core_ &&
|
| content_view_core_->FilterInputEvent(input_event))
|
| return INPUT_EVENT_ACK_STATE_CONSUMED;
|
| @@ -1242,6 +1254,8 @@ void RenderWidgetHostViewAndroid::DidOverscroll(
|
| gfx::ScaleVector2d(params.latest_overscroll_delta,
|
| device_scale_factor),
|
| gfx::ScaleVector2d(params.current_fling_velocity,
|
| + device_scale_factor),
|
| + gfx::ScaleVector2d(last_scroll_update_position_.OffsetFromOrigin(),
|
| device_scale_factor))) {
|
| SetNeedsAnimate();
|
| }
|
|
|