diff -r 6297cdf66332 -r d39add9822e2 webengine/osswebengine/WebKit/s60/webview/WebScrollingDeceleratorGH.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebScrollingDeceleratorGH.cpp Mon Jan 18 21:20:18 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/webview/WebScrollingDeceleratorGH.cpp Tue Feb 02 00:56:45 2010 +0200 @@ -28,7 +28,6 @@ #include "WebKitLogger.h" -using namespace RT_GestureHelper; // constants const int KRecordSize = 4; @@ -38,7 +37,9 @@ const int KScrollIntervalTimeout = 60000; // scroll timer interval in microseconds -const float KDecceleration = -700.0; +const float KDeccelerationLow = -350.0; +const float KDeccelerationHigh = -600.0; +const float KSpeedHigh = 2000.0; int decelTimerCB(TAny* ptr); @@ -78,6 +79,7 @@ void WebScrollingDeceleratorGH::ConstructL() { m_decelTimer = CPeriodic::NewL(CActive::EPriorityStandard); + m_deceleration = KDeccelerationHigh; } // ----------------------------------------------------------------------------- @@ -91,7 +93,7 @@ int WebScrollingDeceleratorGH::getDecceleration() { - return KDecceleration; + return m_deceleration; } @@ -114,8 +116,22 @@ { m_decelelatorSwitch = true; m_scrollbarDrawer = scrollbarDrawer; - m_initSpeed.iX = (-1) * speed.iX; - m_initSpeed.iY = (-1) * speed.iY; + float speedX = speed.iX; + float speedY = speed.iY; + float absSpeedX = abs(speedX); + float absSpeedY = abs(speedY); + + if (absSpeedX > KSpeedHigh) { + speedX = KSpeedHigh * speedX/absSpeedX ; + m_deceleration = KDeccelerationLow; + } + if (absSpeedY > KSpeedHigh) { + speedY = KSpeedHigh * speedY/absSpeedY; + m_deceleration = KDeccelerationLow; + } + + m_initSpeed.iX = (-1) * speedX; + m_initSpeed.iY = (-1) * speedY; m_numscrollsteps = 0; if (m_decelTimer->IsActive()) { @@ -145,14 +161,16 @@ TReal32 accelX = 0.0; TReal32 accelY = 0.0; + TReal32 deceleration = getDecceleration(); + if (m_initSpeed.iX) { - accelX = (m_initSpeed.iX > 0) ? KDecceleration : (-1) * KDecceleration; + accelX = (m_initSpeed.iX > 0) ? deceleration : (-1) * deceleration; vx = m_initSpeed.iX + accelX * t; dx = m_initSpeed.iX * t + 0.5 * accelX * (t * t); } if (m_initSpeed.iY) { - accelY = (m_initSpeed.iY > 0) ? KDecceleration : (-1) * KDecceleration; + accelY = (m_initSpeed.iY > 0) ? deceleration : (-1) * deceleration; vy = m_initSpeed.iY + accelY * t; dy = m_initSpeed.iY * t + 0.5 * accelY * (t * t); }