diff -r 79859ed3eea9 -r 919f36ff910f webengine/osswebengine/WebKit/s60/webview/WebScrollingDeceleratorGH.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebScrollingDeceleratorGH.cpp Tue Aug 31 16:17:46 2010 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebScrollingDeceleratorGH.cpp Wed Sep 01 12:28:30 2010 +0100 @@ -17,6 +17,7 @@ // INCLUDE FILES +#include #include <../bidi.h> #include "WebScrollingDeceleratorGH.h" #include "WebView.h" @@ -28,7 +29,6 @@ #include "WebKitLogger.h" -using namespace RT_GestureHelper; // constants const int KRecordSize = 4; @@ -36,9 +36,18 @@ // It lists the timeout dt values in microseconds. const int KDecelCurveSize = 10; +#ifdef BRDO_PERF_IMPROVEMENTS_ENABLED_FF +const int KScrollIntervalTimeout = 30000; // scroll timer interval in microseconds +#else const int KScrollIntervalTimeout = 60000; // scroll timer interval in microseconds +#endif -const float KDecceleration = -700.0; +#ifdef BRDO_MULTITOUCH_ENABLED_FF +const float KDecceleration = -1300.0; +#else +const float KDecceleration = -750.0; +#endif +const float KSpeedHigh = 2000.0; int decelTimerCB(TAny* ptr); @@ -78,6 +87,7 @@ void WebScrollingDeceleratorGH::ConstructL() { m_decelTimer = CPeriodic::NewL(CActive::EPriorityStandard); + m_deceleration = KDecceleration; } // ----------------------------------------------------------------------------- @@ -91,7 +101,7 @@ int WebScrollingDeceleratorGH::getDecceleration() { - return KDecceleration; + return m_deceleration; } @@ -106,29 +116,50 @@ { m_decelelatorSwitch = false; if (m_decelTimer->IsActive()) { + m_webView.setViewIsScrolling(false); + m_webView.resumeJsTimers(); m_decelTimer->Cancel(); } } -void WebScrollingDeceleratorGH::startDecel(TRealPoint& speed, WebScrollbarDrawer* scrollbarDrawer) +bool WebScrollingDeceleratorGH::startDecel(TRealPoint& speed, WebScrollbarDrawer* scrollbarDrawer) { + bool started = false; 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 ; + } + if (absSpeedY > KSpeedHigh) { + speedY = KSpeedHigh * speedY/absSpeedY; + } + + m_initSpeed.iX = (-1) * speedX; + m_initSpeed.iY = (-1) * speedY; m_numscrollsteps = 0; if (m_decelTimer->IsActive()) { + m_webView.setViewIsScrolling(false); + m_webView.resumeJsTimers(); m_decelTimer->Cancel(); } WebFrameView* scrollingView = m_webView.pageScrollHandler()->currentScrollingFrameView(); if (scrollingView) { + m_webView.pauseJsTimers(); // pause the JS timers + m_webView.setViewIsScrolling(true); m_startPos = scrollingView->contentPos(); m_lastPos = m_startPos; m_decelTimer->Start(0, KScrollIntervalTimeout, TCallBack(&decelTimerCB, this)); + started = true; } + return started; } void WebScrollingDeceleratorGH::scroll() @@ -145,14 +176,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); } @@ -172,6 +205,9 @@ if (m_scrollbarDrawer) { m_scrollbarDrawer->fadeScrollbar(); } + + m_webView.resumeJsTimers(); // resume the js timers + m_webView.setViewIsScrolling(false); m_decelTimer->Cancel(); handler->clearScrollingElement(); m_webView.setViewIsScrolling(false);