summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-10-27 11:30:28 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-10-27 11:32:49 +0200
commit48bd6a61f95cbebc090cad5c1f1c88d79864b8de (patch)
treee1ec79d12a277e81ce22a11a9e2c1e716bcb8f85
parenta5f88126f6b7948d938875468702c0e68935b875 (diff)
downloadqtwebengine-chromium-48bd6a61f95cbebc090cad5c1f1c88d79864b8de.tar.gz
Make scroll animation less "drunk"
Tries to use the new bezier curves to approximate our old smooth scrolling behavior. Change-Id: I3b319025fb0339ec95c0a29525f2dde0631866ed Reviewed-by: Michael BrĂ¼ning <michael.bruning@theqtcompany.com>
-rw-r--r--chromium/cc/animation/scroll_offset_animation_curve.cc8
-rw-r--r--chromium/cc/animation/scroll_offset_animations_impl.cc2
-rw-r--r--chromium/cc/animation/timing_function.cc3
-rw-r--r--chromium/cc/animation/timing_function.h2
-rw-r--r--chromium/third_party/blink/renderer/platform/animation/timing_function.cc6
5 files changed, 15 insertions, 6 deletions
diff --git a/chromium/cc/animation/scroll_offset_animation_curve.cc b/chromium/cc/animation/scroll_offset_animation_curve.cc
index dad0ee27e43..b8da2b15c95 100644
--- a/chromium/cc/animation/scroll_offset_animation_curve.cc
+++ b/chromium/cc/animation/scroll_offset_animation_curve.cc
@@ -43,13 +43,13 @@ static float MaximumDimension(const gfx::Vector2dF& delta) {
static std::unique_ptr<TimingFunction> EaseOutWithInitialVelocity(
double velocity) {
// Clamp velocity to a sane value.
- velocity = std::min(std::max(velocity, -1000.0), 1000.0);
+ velocity = std::min(std::max(velocity, -100.0), 100.0);
- // Based on CubicBezierTimingFunction::EaseType::EASE_IN_OUT preset
+ // Based on CubicBezierTimingFunction::EaseType::EASE_OUT_NATURAL preset
// with first control point scaled.
- const double x1 = 0.42;
+ const double x1 = 0.25;
const double y1 = velocity * x1;
- return CubicBezierTimingFunction::Create(x1, y1, 0.58, 1);
+ return CubicBezierTimingFunction::Create(x1, y1, 0.45, 0.94);
}
} // namespace
diff --git a/chromium/cc/animation/scroll_offset_animations_impl.cc b/chromium/cc/animation/scroll_offset_animations_impl.cc
index 2e1a274e925..e1be4103a19 100644
--- a/chromium/cc/animation/scroll_offset_animations_impl.cc
+++ b/chromium/cc/animation/scroll_offset_animations_impl.cc
@@ -43,7 +43,7 @@ void ScrollOffsetAnimationsImpl::ScrollAnimationCreate(
std::unique_ptr<ScrollOffsetAnimationCurve> curve =
ScrollOffsetAnimationCurve::Create(
target_offset, CubicBezierTimingFunction::CreatePreset(
- CubicBezierTimingFunction::EaseType::EASE_IN_OUT),
+ CubicBezierTimingFunction::EaseType::EASE_OUT_NATURAL),
ScrollOffsetAnimationCurve::DurationBehavior::INVERSE_DELTA);
curve->SetInitialValue(current_offset, delayed_by);
TRACE_EVENT_INSTANT1("cc", "ScrollAnimationCreate", TRACE_EVENT_SCOPE_THREAD,
diff --git a/chromium/cc/animation/timing_function.cc b/chromium/cc/animation/timing_function.cc
index ad73588c6e4..0bf3f966aa7 100644
--- a/chromium/cc/animation/timing_function.cc
+++ b/chromium/cc/animation/timing_function.cc
@@ -33,6 +33,9 @@ CubicBezierTimingFunction::CreatePreset(EaseType ease_type) {
case EaseType::EASE_IN_OUT:
return base::WrapUnique(
new CubicBezierTimingFunction(ease_type, 0.42, 0.0, 0.58, 1));
+ case EaseType::EASE_OUT_NATURAL:
+ return base::WrapUnique(
+ new CubicBezierTimingFunction(ease_type, 0.26, 0.46, 0.45, 0.94));
default:
NOTREACHED();
return nullptr;
diff --git a/chromium/cc/animation/timing_function.h b/chromium/cc/animation/timing_function.h
index 32bbf95fe56..2ac2a35b5d9 100644
--- a/chromium/cc/animation/timing_function.h
+++ b/chromium/cc/animation/timing_function.h
@@ -34,7 +34,7 @@ class CC_ANIMATION_EXPORT TimingFunction {
class CC_ANIMATION_EXPORT CubicBezierTimingFunction : public TimingFunction {
public:
- enum class EaseType { EASE, EASE_IN, EASE_OUT, EASE_IN_OUT, CUSTOM };
+ enum class EaseType { EASE, EASE_IN, EASE_OUT, EASE_IN_OUT, EASE_OUT_NATURAL, CUSTOM };
static std::unique_ptr<CubicBezierTimingFunction> CreatePreset(
EaseType ease_type);
diff --git a/chromium/third_party/blink/renderer/platform/animation/timing_function.cc b/chromium/third_party/blink/renderer/platform/animation/timing_function.cc
index 51a362704e0..a9fa01c7f0c 100644
--- a/chromium/third_party/blink/renderer/platform/animation/timing_function.cc
+++ b/chromium/third_party/blink/renderer/platform/animation/timing_function.cc
@@ -36,6 +36,9 @@ CubicBezierTimingFunction* CubicBezierTimingFunction::Preset(
DEFINE_STATIC_REF(
CubicBezierTimingFunction, ease_in_out,
(base::AdoptRef(new CubicBezierTimingFunction(EaseType::EASE_IN_OUT))));
+ DEFINE_STATIC_REF(
+ CubicBezierTimingFunction, ease_out_natural,
+ (base::AdoptRef(new CubicBezierTimingFunction(EaseType::EASE_OUT_NATURAL))));
switch (ease_type) {
case EaseType::EASE:
@@ -46,6 +49,8 @@ CubicBezierTimingFunction* CubicBezierTimingFunction::Preset(
return ease_out;
case EaseType::EASE_IN_OUT:
return ease_in_out;
+ case EaseType::EASE_OUT_NATURAL:
+ return ease_out_natural;
default:
NOTREACHED();
return nullptr;
@@ -62,6 +67,7 @@ String CubicBezierTimingFunction::ToString() const {
return "ease-out";
case CubicBezierTimingFunction::EaseType::EASE_IN_OUT:
return "ease-in-out";
+ case CubicBezierTimingFunction::EaseType::EASE_OUT_NATURAL:
case CubicBezierTimingFunction::EaseType::CUSTOM:
return "cubic-bezier(" + String::NumberToStringECMAScript(this->X1()) +
", " + String::NumberToStringECMAScript(this->Y1()) + ", " +