| Index: Source/WebCore/platform/ScrollAnimatorNone.cpp
|
| ===================================================================
|
| --- Source/WebCore/platform/ScrollAnimatorNone.cpp (revision 92725)
|
| +++ Source/WebCore/platform/ScrollAnimatorNone.cpp (working copy)
|
| @@ -44,6 +44,8 @@
|
| #include <wtf/CurrentTime.h>
|
| #include <wtf/PassOwnPtr.h>
|
|
|
| +using namespace std;
|
| +
|
| namespace WebCore {
|
|
|
| static double kTickTime = .0166;
|
| @@ -63,9 +65,10 @@
|
| {
|
| }
|
|
|
| -ScrollAnimatorNone::Parameters::Parameters(bool isEnabled, double animationTime, Curve attackCurve, double attackTime, Curve releaseCurve, double releaseTime)
|
| +ScrollAnimatorNone::Parameters::Parameters(bool isEnabled, double animationTime, double repeatMinimumSustainTime, Curve attackCurve, double attackTime, Curve releaseCurve, double releaseTime)
|
| : m_isEnabled(isEnabled)
|
| , m_animationTime(animationTime)
|
| + , m_repeatMinimumSustainTime(repeatMinimumSustainTime)
|
| , m_attackCurve(attackCurve)
|
| , m_attackTime(attackTime)
|
| , m_releaseCurve(releaseCurve)
|
| @@ -159,7 +162,8 @@
|
|
|
| bool ScrollAnimatorNone::PerAxisData::updateDataFromParameters(ScrollbarOrientation orientation, float step, float multiplier, float scrollableSize, double currentTime, Parameters* parameters)
|
| {
|
| - m_animationTime = parameters->m_animationTime;
|
| + if (parameters->m_animationTime > m_animationTime)
|
| + m_animationTime = parameters->m_animationTime;
|
| m_attackTime = parameters->m_attackTime;
|
| m_releaseTime = parameters->m_releaseTime;
|
| m_attackCurve = parameters->m_attackCurve;
|
| @@ -174,12 +178,12 @@
|
|
|
| m_orientation = orientation;
|
|
|
| - if (!m_desiredPosition)
|
| + if (!m_startTime)
|
| m_desiredPosition = *m_currentPosition;
|
| float newPosition = m_desiredPosition + (step * multiplier);
|
|
|
| if (newPosition < 0 || newPosition > scrollableSize)
|
| - newPosition = std::max(std::min(newPosition, scrollableSize), 0.0f);
|
| + newPosition = max(min(newPosition, scrollableSize), 0.0f);
|
|
|
| if (newPosition == m_desiredPosition)
|
| return false;
|
| @@ -199,15 +203,17 @@
|
| double attackAreaLeft = 0;
|
|
|
| double deltaTime = m_lastAnimationTime - m_startTime;
|
| + double attackTimeLeft = max(0., m_attackTime - deltaTime);
|
| double timeLeft = m_animationTime - deltaTime;
|
| - if (timeLeft < m_releaseTime) {
|
| - m_animationTime = deltaTime + m_releaseTime;
|
| - timeLeft = m_releaseTime;
|
| + double minTimeLeft = m_releaseTime + min(parameters->m_repeatMinimumSustainTime, m_animationTime - m_releaseTime - attackTimeLeft);
|
| + if (timeLeft < minTimeLeft) {
|
| + m_animationTime = deltaTime + minTimeLeft;
|
| + timeLeft = minTimeLeft;
|
| }
|
| - double releaseTimeLeft = std::min(timeLeft, m_releaseTime);
|
| - double attackTimeLeft = std::max(0., m_attackTime - deltaTime);
|
| - double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTimeLeft);
|
|
|
| + double releaseTimeLeft = min(timeLeft, m_releaseTime);
|
| + double sustainTimeLeft = max(0., timeLeft - releaseTimeLeft - attackTimeLeft);
|
| +
|
| if (attackTimeLeft) {
|
| double attackSpot = deltaTime / m_attackTime;
|
| attackAreaLeft = attackTimeLeft / (curveDerivativeAt(m_attackCurve, 1) - curveDerivativeAt(m_attackCurve, attackSpot));
|
| @@ -289,13 +295,13 @@
|
| case ScrollByDocument:
|
| break;
|
| case ScrollByLine:
|
| - parameters = Parameters(true, 10 * kTickTime, Quadratic, 3 * kTickTime, Quadratic, 3 * kTickTime);
|
| + parameters = Parameters(true, 10 * kTickTime, 7 * kTickTime, Quadratic, 3 * kTickTime, Quadratic, 3 * kTickTime);
|
| break;
|
| case ScrollByPage:
|
| - parameters = Parameters(true, 15 * kTickTime, Quadratic, 5 * kTickTime, Quadratic, 5 * kTickTime);
|
| + parameters = Parameters(true, 15 * kTickTime, 10 * kTickTime, Quadratic, 5 * kTickTime, Quadratic, 5 * kTickTime);
|
| break;
|
| case ScrollByPixel:
|
| - parameters = Parameters(true, 11 * kTickTime, Quadratic, 3 * kTickTime, Quadratic, 3 * kTickTime);
|
| + parameters = Parameters(true, 11 * kTickTime, 2 * kTickTime, Quadratic, 3 * kTickTime, Quadratic, 3 * kTickTime);
|
| break;
|
| default:
|
| break;
|
|
|