diff -r a359256acfc6 -r c8a366e56285 webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp --- 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)