summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-20 05:34:23 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-20 05:34:23 +0000
commit2acceff3827a5e661fb1bb1eaac3cdd9cb3ac3aa (patch)
treeb6b7a47d1a45529c8040582073f2b48539e9334f /content
parentc8ba44e530579d51f972977be5d86d9199d4772e (diff)
downloadchromium_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.cc43
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);