webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp
changeset 11 c8a366e56285
parent 10 a359256acfc6
child 15 60c5402cb945
equal deleted inserted replaced
10:a359256acfc6 11:c8a366e56285
   260 // -----------------------------------------------------------------------------
   260 // -----------------------------------------------------------------------------
   261 // WebCursor::cursorUpdate
   261 // WebCursor::cursorUpdate
   262 // -----------------------------------------------------------------------------
   262 // -----------------------------------------------------------------------------
   263 void WebCursor::cursorUpdate(bool visible)
   263 void WebCursor::cursorUpdate(bool visible)
   264 {
   264 {
   265     if (!m_view || !m_view->brCtl()->settings())
   265     if (!m_view || !m_view->brCtl() || !m_view->brCtl()->settings())
       
   266         return;
       
   267     //If cursor show mode defined inside cenrep key is no cursor shown in non-tab navigation mode,
       
   268     //then no need to update the cursor
       
   269     if (m_view->brCtl()->settings()->getNavigationType() != SettingsContainer:: NavigationTypeTabbed &&
       
   270             (m_view->brCtl()->settings()->brctlSetting(TBrCtlDefs::ESettingsCursorShowMode) == TBrCtlDefs::ENoCursor))
   266         return;
   271         return;
   267     if ( m_view->showCursor() ) {
   272     if ( m_view->showCursor() ) {
   268         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.
   273         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.
   269     }
   274     }
   270 
   275 
   560   return ret_frame;
   565   return ret_frame;
   561 }
   566 }
   562 
   567 
   563 
   568 
   564 //-------------------------------------------------------------------------------
   569 //-------------------------------------------------------------------------------
       
   570 //-------------------------------------------------------------------------------
       
   571 // WebCursor::scrollingDirection()
       
   572 //-------------------------------------------------------------------------------
       
   573 void WebCursor::scrollingDirection(int dir, int& lr, int& tb)
       
   574 {
       
   575      switch (dir)
       
   576        {
       
   577          case EKeyUpArrow:             // North
       
   578            tb = -1;
       
   579            break;
       
   580 
       
   581          case EKeyRightUpArrow:        // Northeast
       
   582          case EStdKeyDevice11:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   583            tb = -1;
       
   584            lr = +2;                    // Make it run closer to 45 degrees
       
   585            break;
       
   586 
       
   587          case EKeyRightArrow:          // East
       
   588            lr = +1;
       
   589            break;
       
   590 
       
   591          case EKeyRightDownArrow:      // Southeast
       
   592          case EStdKeyDevice12:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   593            tb = +1;
       
   594            lr = +2;
       
   595            break;
       
   596 
       
   597          case EKeyDownArrow:           // South
       
   598            tb = +1;
       
   599            break;
       
   600 
       
   601          case EKeyLeftDownArrow:       // Southwest
       
   602          case EStdKeyDevice13:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   603            tb = +1;
       
   604            lr = -2;
       
   605            break;
       
   606 
       
   607          case EKeyLeftArrow:           // West
       
   608            lr = -1;
       
   609            break;
       
   610 
       
   611          case EKeyLeftUpArrow:         // Northwest
       
   612          case EStdKeyDevice10:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   613            tb = -1;
       
   614            lr = -2;
       
   615            break;
       
   616 
       
   617          default:
       
   618            break;
       
   619        }
       
   620     }
       
   621 
       
   622 
       
   623 //-------------------------------------------------------------------------------
   565 // WebCursor::scrollAndMoveCursor
   624 // WebCursor::scrollAndMoveCursor
   566 //
   625 //
   567 // Method that scrolls and moves the cursor based on the navigation algorithm
   626 // Method that scrolls and moves the cursor based on the navigation algorithm
   568 // TODO: Investigate "autoscroll" and diagonal events from real HW and the
   627 // TODO: Investigate "autoscroll" and diagonal events from real HW and the
   569 //       diagonal event simulator wedge.
   628 //       diagonal event simulator wedge.
   576     int lr = 0;
   635     int lr = 0;
   577     int tb = 0;
   636     int tb = 0;
   578     int deltaX;
   637     int deltaX;
   579     int deltaY;
   638     int deltaY;
   580 
   639 
   581     switch (dir)
   640     scrollingDirection(dir, lr, tb);
   582       {
       
   583 
       
   584         case EKeyUpArrow:             // North
       
   585           tb = -1;
       
   586           break;
       
   587 
       
   588         case EKeyRightUpArrow:        // Northeast
       
   589         case EStdKeyDevice11:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   590           tb = -1;
       
   591           lr = +2;                    // Make it run closer to 45 degrees
       
   592           break;
       
   593 
       
   594         case EKeyRightArrow:          // East
       
   595           lr = +1;
       
   596           break;
       
   597 
       
   598         case EKeyRightDownArrow:      // Southeast
       
   599         case EStdKeyDevice12:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   600           tb = +1;
       
   601           lr = +2;
       
   602           break;
       
   603 
       
   604         case EKeyDownArrow:           // South
       
   605           tb = +1;
       
   606           break;
       
   607 
       
   608         case EKeyLeftDownArrow:       // Southwest
       
   609         case EStdKeyDevice13:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   610           tb = +1;
       
   611           lr = -2;
       
   612           break;
       
   613 
       
   614         case EKeyLeftArrow:           // West
       
   615           lr = -1;
       
   616           break;
       
   617 
       
   618         case EKeyLeftUpArrow:         // Northwest
       
   619         case EStdKeyDevice10:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   620           tb = -1;
       
   621           lr = -2;
       
   622           break;
       
   623 
       
   624         default:
       
   625           break;
       
   626 
       
   627       }
       
   628 
   641 
   629     deltaX = lr * scrollRange/2;
   642     deltaX = lr * scrollRange/2;
   630     deltaY = tb * scrollRange;
   643     deltaY = tb * scrollRange;
   631 
   644 
   632     TPoint delta = TPoint(deltaX, deltaY);
   645     TPoint delta = TPoint(deltaX, deltaY);
   707         }
   720         }
   708     }
   721     }
   709 }
   722 }
   710 
   723 
   711 // -----------------------------------------------------------------------------
   724 // -----------------------------------------------------------------------------
       
   725 // WebCursor::simpleScroll
       
   726 // -----------------------------------------------------------------------------
       
   727 void WebCursor::simpleScroll(int dir, int scrollRange, bool autoscroll)
       
   728 {
       
   729     if (!m_view)
       
   730         return;
       
   731 
       
   732     int lr = 0;
       
   733     int tb = 0;
       
   734 
       
   735     scrollingDirection(dir, lr, tb);
       
   736 
       
   737     int deltaX = lr * scrollRange/2;
       
   738     int deltaY = tb * scrollRange;
       
   739 
       
   740     TPoint delta = TPoint(deltaX, deltaY);
       
   741     WebFrameView* fv = m_view->mainFrame()->frameView();
       
   742     TPoint oldpos = fv->contentPos();
       
   743 
       
   744     if (autoscroll || m_view->pageView()) {
       
   745         // just simple scroll
       
   746         fv->scrollTo(oldpos + delta);
       
   747     }
       
   748 
       
   749     if (!m_view->pageView()) {
       
   750         TPoint cp = position();
       
   751         if (fv->contentPos() == oldpos) {
       
   752             // not scrolling, move the cursor instead
       
   753             cp.iX += deltaX;
       
   754             cp.iY += deltaY;
       
   755         } else {
       
   756             // move cursor slowly out of the way
       
   757             cp.iX += deltaX/6;
       
   758             cp.iY += deltaY/6;
       
   759         }
       
   760         setPosition(cp);
       
   761         reset();
       
   762     }
       
   763 }
       
   764 
       
   765 // -----------------------------------------------------------------------------
   712 // WebCursor::updatePositionAndElemType
   766 // WebCursor::updatePositionAndElemType
   713 // -----------------------------------------------------------------------------
   767 // -----------------------------------------------------------------------------
   714 void WebCursor::updatePositionAndElemType(const TPoint& pt)
   768 void WebCursor::updatePositionAndElemType(const TPoint& pt)
   715 {
   769 {
   716     m_pos = pt;
   770     m_pos = pt;