webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp
changeset 11 c8a366e56285
parent 10 a359256acfc6
child 15 60c5402cb945
--- a/webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp	Thu Aug 27 07:44:59 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp	Thu Sep 24 12:53:48 2009 +0300
@@ -262,7 +262,12 @@
 // -----------------------------------------------------------------------------
 void WebCursor::cursorUpdate(bool visible)
 {
-    if (!m_view || !m_view->brCtl()->settings())
+    if (!m_view || !m_view->brCtl() || !m_view->brCtl()->settings())
+        return;
+    //If cursor show mode defined inside cenrep key is no cursor shown in non-tab navigation mode,
+    //then no need to update the cursor
+    if (m_view->brCtl()->settings()->getNavigationType() != SettingsContainer:: NavigationTypeTabbed &&
+            (m_view->brCtl()->settings()->brctlSetting(TBrCtlDefs::ESettingsCursorShowMode) == TBrCtlDefs::ENoCursor))
         return;
     if ( m_view->showCursor() ) {
         m_visible = visible && ((m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeCursor)|| m_view->focusedElementType() == TBrCtlDefs::EElementSelectMultiBox); // check for tabbedNavigation here because it is called from so many places.
@@ -562,6 +567,60 @@
 
 
 //-------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------
+// WebCursor::scrollingDirection()
+//-------------------------------------------------------------------------------
+void WebCursor::scrollingDirection(int dir, int& lr, int& tb)
+{
+     switch (dir)
+       {
+         case EKeyUpArrow:             // North
+           tb = -1;
+           break;
+
+         case EKeyRightUpArrow:        // Northeast
+         case EStdKeyDevice11:         //   : Extra KeyEvent supports diagonal event simulator wedge
+           tb = -1;
+           lr = +2;                    // Make it run closer to 45 degrees
+           break;
+
+         case EKeyRightArrow:          // East
+           lr = +1;
+           break;
+
+         case EKeyRightDownArrow:      // Southeast
+         case EStdKeyDevice12:         //   : Extra KeyEvent supports diagonal event simulator wedge
+           tb = +1;
+           lr = +2;
+           break;
+
+         case EKeyDownArrow:           // South
+           tb = +1;
+           break;
+
+         case EKeyLeftDownArrow:       // Southwest
+         case EStdKeyDevice13:         //   : Extra KeyEvent supports diagonal event simulator wedge
+           tb = +1;
+           lr = -2;
+           break;
+
+         case EKeyLeftArrow:           // West
+           lr = -1;
+           break;
+
+         case EKeyLeftUpArrow:         // Northwest
+         case EStdKeyDevice10:         //   : Extra KeyEvent supports diagonal event simulator wedge
+           tb = -1;
+           lr = -2;
+           break;
+
+         default:
+           break;
+       }
+    }
+
+
+//-------------------------------------------------------------------------------
 // WebCursor::scrollAndMoveCursor
 //
 // Method that scrolls and moves the cursor based on the navigation algorithm
@@ -578,53 +637,7 @@
     int deltaX;
     int deltaY;
 
-    switch (dir)
-      {
-
-        case EKeyUpArrow:             // North
-          tb = -1;
-          break;
-
-        case EKeyRightUpArrow:        // Northeast
-        case EStdKeyDevice11:         //   : Extra KeyEvent supports diagonal event simulator wedge
-          tb = -1;
-          lr = +2;                    // Make it run closer to 45 degrees
-          break;
-
-        case EKeyRightArrow:          // East
-          lr = +1;
-          break;
-
-        case EKeyRightDownArrow:      // Southeast
-        case EStdKeyDevice12:         //   : Extra KeyEvent supports diagonal event simulator wedge
-          tb = +1;
-          lr = +2;
-          break;
-
-        case EKeyDownArrow:           // South
-          tb = +1;
-          break;
-
-        case EKeyLeftDownArrow:       // Southwest
-        case EStdKeyDevice13:         //   : Extra KeyEvent supports diagonal event simulator wedge
-          tb = +1;
-          lr = -2;
-          break;
-
-        case EKeyLeftArrow:           // West
-          lr = -1;
-          break;
-
-        case EKeyLeftUpArrow:         // Northwest
-        case EStdKeyDevice10:         //   : Extra KeyEvent supports diagonal event simulator wedge
-          tb = -1;
-          lr = -2;
-          break;
-
-        default:
-          break;
-
-      }
+    scrollingDirection(dir, lr, tb);
 
     deltaX = lr * scrollRange/2;
     deltaY = tb * scrollRange;
@@ -709,6 +722,47 @@
 }
 
 // -----------------------------------------------------------------------------
+// WebCursor::simpleScroll
+// -----------------------------------------------------------------------------
+void WebCursor::simpleScroll(int dir, int scrollRange, bool autoscroll)
+{
+    if (!m_view)
+        return;
+
+    int lr = 0;
+    int tb = 0;
+
+    scrollingDirection(dir, lr, tb);
+
+    int deltaX = lr * scrollRange/2;
+    int deltaY = tb * scrollRange;
+
+    TPoint delta = TPoint(deltaX, deltaY);
+    WebFrameView* fv = m_view->mainFrame()->frameView();
+    TPoint oldpos = fv->contentPos();
+
+    if (autoscroll || m_view->pageView()) {
+        // just simple scroll
+        fv->scrollTo(oldpos + delta);
+    }
+
+    if (!m_view->pageView()) {
+        TPoint cp = position();
+        if (fv->contentPos() == oldpos) {
+            // not scrolling, move the cursor instead
+            cp.iX += deltaX;
+            cp.iY += deltaY;
+        } else {
+            // move cursor slowly out of the way
+            cp.iX += deltaX/6;
+            cp.iY += deltaY/6;
+        }
+        setPosition(cp);
+        reset();
+    }
+}
+
+// -----------------------------------------------------------------------------
 // WebCursor::updatePositionAndElemType
 // -----------------------------------------------------------------------------
 void WebCursor::updatePositionAndElemType(const TPoint& pt)