diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-10-27 11:30:28 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-10-27 11:32:49 +0200 |
commit | 48bd6a61f95cbebc090cad5c1f1c88d79864b8de (patch) | |
tree | e1ec79d12a277e81ce22a11a9e2c1e716bcb8f85 | |
parent | a5f88126f6b7948d938875468702c0e68935b875 (diff) | |
download | qtwebengine-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>
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()) + ", " + |