webengine/osswebengine/WebKit/s60/webview/WebScrollingDeceleratorGH.cpp
branchRCL_3
changeset 94 919f36ff910f
parent 93 79859ed3eea9
--- 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);