| Index: content/browser/android/overscroll_glow.cc
|
| diff --git a/content/browser/android/overscroll_glow.cc b/content/browser/android/overscroll_glow.cc
|
| index 0aa00e04ac6ad8d8addf8875fa1952befd04963a..8638be5efc5a9b7c5c1e9560a00856669de8b472 100644
|
| --- a/content/browser/android/overscroll_glow.cc
|
| +++ b/content/browser/android/overscroll_glow.cc
|
| @@ -77,7 +77,11 @@ gfx::SizeF ComputeSize(OverscrollGlow::Edge edge,
|
| } // namespace
|
|
|
| OverscrollGlow::OverscrollGlow(OverscrollGlowClient* client)
|
| - : client_(client), edge_offsets_(), initialized_(false) {
|
| + : client_(client),
|
| + edge_offsets_(),
|
| + initialized_(false),
|
| + allow_horizontal_overscroll_(true),
|
| + allow_vertical_overscroll_(true) {
|
| DCHECK(client);
|
| }
|
|
|
| @@ -116,12 +120,21 @@ bool OverscrollGlow::OnOverscrolled(base::TimeTicks current_time,
|
| const gfx::Vector2dF& accumulated_overscroll,
|
| gfx::Vector2dF overscroll_delta,
|
| gfx::Vector2dF velocity,
|
| - const gfx::Vector2dF& displacement) {
|
| + const gfx::Vector2dF& overscroll_location) {
|
| // The size of the glow determines the relative effect of the inputs; an
|
| // empty-sized effect is effectively disabled.
|
| if (viewport_size_.IsEmpty())
|
| return false;
|
|
|
| + if (!allow_horizontal_overscroll_) {
|
| + overscroll_delta.set_x(0);
|
| + velocity.set_x(0);
|
| + }
|
| + if (!allow_vertical_overscroll_) {
|
| + overscroll_delta.set_y(0);
|
| + velocity.set_y(0);
|
| + }
|
| +
|
| // Ignore sufficiently small values that won't meaningfuly affect animation.
|
| overscroll_delta = ZeroSmallComponents(overscroll_delta);
|
| if (overscroll_delta.IsZero()) {
|
| @@ -143,7 +156,7 @@ bool OverscrollGlow::OnOverscrolled(base::TimeTicks current_time,
|
| if (!velocity.IsZero())
|
| Absorb(current_time, velocity, x_overscroll_started, y_overscroll_started);
|
| else
|
| - Pull(current_time, overscroll_delta, displacement);
|
| + Pull(current_time, overscroll_delta, overscroll_location);
|
|
|
| return CheckNeedsAnimate();
|
| }
|
| @@ -180,6 +193,12 @@ void OverscrollGlow::OnFrameUpdated(
|
| viewport_size.height();
|
| edge_offsets_[OverscrollGlow::EDGE_RIGHT] =
|
| content_size.width() - content_scroll_offset.x() - viewport_size.width();
|
| +
|
| + // Only allow overscroll on scrollable axes, matching platform behavior.
|
| + allow_horizontal_overscroll_ =
|
| + std::ceil(viewport_size_.width()) < std::floor(content_size.width());
|
| + allow_vertical_overscroll_ =
|
| + std::ceil(viewport_size_.height()) < std::floor(content_size.height());
|
| }
|
|
|
| bool OverscrollGlow::CheckNeedsAnimate() {
|
|
|