diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-20 05:34:23 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-20 05:34:23 +0000 |
commit | 2acceff3827a5e661fb1bb1eaac3cdd9cb3ac3aa (patch) | |
tree | b6b7a47d1a45529c8040582073f2b48539e9334f /content | |
parent | c8ba44e530579d51f972977be5d86d9199d4772e (diff) | |
download | chromium_src-2acceff3827a5e661fb1bb1eaac3cdd9cb3ac3aa.zip chromium_src-2acceff3827a5e661fb1bb1eaac3cdd9cb3ac3aa.tar.gz chromium_src-2acceff3827a5e661fb1bb1eaac3cdd9cb3ac3aa.tar.bz2 |
overscroll: Minor adjustment to the window transforms during overscroll.
BUG=160668
Review URL: https://codereview.chromium.org/11417078
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@168742 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/web_contents/web_contents_view_aura.cc | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc index 7d55ce2..eeb9d0a 100644 --- a/content/browser/web_contents/web_contents_view_aura.cc +++ b/content/browser/web_contents/web_contents_view_aura.cc @@ -232,6 +232,21 @@ int ConvertAuraEventFlagsToWebInputEventModifiers(int aura_event_flags) { return web_input_event_modifiers; } +// Given the scrolled amount (|scroll|) and the threshold (|threshold|), returns +// the amount the window should be translated. +int GetResistedScrollAmount(int scroll, int threshold) { + CHECK_GE(scroll, 0); + if (scroll <= threshold) + return scroll / 2; + + // Start resisting after the threshold. + int resisted = threshold / 2; + float extra = scroll - threshold; + while ((extra /= 1.3f) > 1.f) + resisted += 1; + return resisted; +} + } // namespace @@ -368,15 +383,9 @@ gfx::Vector2d WebContentsViewAura::GetTranslationForOverscroll(int delta_x, if (current_overscroll_gesture_ == OVERSCROLL_NORTH || current_overscroll_gesture_ == OVERSCROLL_SOUTH) { // For vertical overscroll, always do a resisted drag. - const int kVerticalOverscrollAmount = 40; - if (abs(delta_y) <= kVerticalOverscrollAmount) - return gfx::Vector2d(0, delta_y); - - // Start resisting after the threshold. - int scroll = kVerticalOverscrollAmount; - int resist = abs(delta_y) - scroll; - while (resist /= 2) - scroll += 3; + const int kVerticalOverscrollAmount = 30; + int scroll = GetResistedScrollAmount(abs(delta_y), + kVerticalOverscrollAmount); return gfx::Vector2d(0, delta_y < 0 ? -scroll : scroll); } @@ -391,15 +400,9 @@ gfx::Vector2d WebContentsViewAura::GetTranslationForOverscroll(int delta_x, return gfx::Vector2d(delta_x, 0); } - const int kHorizontalOverscrollAmount = 60; - if (abs(delta_x) < kHorizontalOverscrollAmount) - return gfx::Vector2d(delta_x, 0); - - // Start resisting after the threshold. - int scroll = kHorizontalOverscrollAmount; - int resist = abs(delta_x) - scroll; - while (resist /= 2) - scroll += 3; + const int kHorizontalOverscrollAmount = 30; + int scroll = GetResistedScrollAmount(abs(delta_x), + kHorizontalOverscrollAmount); return gfx::Vector2d(delta_x < 0 ? -scroll : scroll, 0); } @@ -636,9 +639,9 @@ void WebContentsViewAura::OnOverscrollUpdate(float delta_x, float delta_y) { return; aura::Window* target = GetWindowToAnimateForOverscroll(); - gfx::Vector2d translate = GetTranslationForOverscroll(delta_x, delta_y); ui::ScopedLayerAnimationSettings settings(target->layer()->GetAnimator()); - settings.SetPreemptionStrategy(ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS); + settings.SetPreemptionStrategy(ui::LayerAnimator::IMMEDIATELY_SET_NEW_TARGET); + gfx::Vector2d translate = GetTranslationForOverscroll(delta_x, delta_y); gfx::Transform transform; transform.SetTranslate(translate.x(), translate.y()); target->SetTransform(transform); |