--- 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 <browser_platform_variant.hrh>
#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);