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; |