webengine/osswebengine/WebKit/s60/webview/WebView.cpp
changeset 1 7c90e6132015
parent 0 dd21522fd290
child 5 10e98eab6f85
equal deleted inserted replaced
0:dd21522fd290 1:7c90e6132015
   136 }
   136 }
   137 
   137 
   138 
   138 
   139 
   139 
   140 // -----------------------------------------------------------------------------
   140 // -----------------------------------------------------------------------------
   141 // CWebKitView::NewL
   141 // WebView::NewL
   142 // Public Class Method
   142 // Public Class Method
   143 // Two-phased constructor.
   143 // Two-phased constructor.
   144 // -----------------------------------------------------------------------------
   144 // -----------------------------------------------------------------------------
   145 WebView* WebView::NewL(
   145 WebView* WebView::NewL( CCoeControl& parent, CBrCtl* brctl )
   146                        CCoeControl& parent, CBrCtl* brctl )
       
   147 {
   146 {
   148     WebView* self = new (ELeave) WebView( brctl );
   147     WebView* self = new (ELeave) WebView( brctl );
   149 
   148 
   150     CleanupStack::PushL( self );
   149     CleanupStack::PushL( self );
   151     self->ConstructL( parent );
   150     self->ConstructL( parent );
   153 
   152 
   154     return self;
   153     return self;
   155 }
   154 }
   156 
   155 
   157 // -----------------------------------------------------------------------------
   156 // -----------------------------------------------------------------------------
   158 // CWebKitView::CWebKitView
   157 // WebView::CWebKitView
   159 // Private Class Method
   158 // Private Class Method
   160 // C++ default constructor can NOT contain any code, that might leave.
   159 // C++ default constructor can NOT contain any code, that might leave.
   161 // -----------------------------------------------------------------------------
   160 // -----------------------------------------------------------------------------
   162 WebView::WebView( CBrCtl* brctl ) :
   161 WebView::WebView( CBrCtl* brctl ) :
   163 m_brctl(brctl)
   162 m_brctl(brctl)
   164 , m_isEditable(false)
   163 , m_isEditable(false)
   165 , m_currentEventKey(KNullKeyEvent)
   164 , m_currentEventKey(KNullKeyEvent)
       
   165 , m_currentEventCode(EEventNull)
   166 , m_scrollingSpeed(KNormalScrollRange*KZoomLevelDefaultValue/100)
   166 , m_scrollingSpeed(KNormalScrollRange*KZoomLevelDefaultValue/100)
   167 , m_focusedElementType(TBrCtlDefs::EElementNone)
   167 , m_focusedElementType(TBrCtlDefs::EElementNone)
   168 , m_pageScaler(NULL)
   168 , m_pageScaler(NULL)
   169 , m_pageScalerEnabled(false)
   169 , m_pageScalerEnabled(false)
   170 , m_inFindState(false)
   170 , m_inFindState(false)
   230     delete m_userAgent;
   230     delete m_userAgent;
   231     delete m_pageFullScreenHandler;
   231     delete m_pageFullScreenHandler;
   232 }
   232 }
   233 
   233 
   234 // -----------------------------------------------------------------------------
   234 // -----------------------------------------------------------------------------
   235 // CWebKitView::ConstructL
   235 // WebView::ConstructL
   236 // Private Class Method
   236 // Private Class Method
   237 // Symbian 2nd phase constructor can leave.
   237 // Symbian 2nd phase constructor can leave.
   238 // -----------------------------------------------------------------------------
   238 // -----------------------------------------------------------------------------
   239 void WebView::ConstructL(
   239 void WebView::ConstructL( CCoeControl& parent )
   240                          CCoeControl& parent)
       
   241 {
   240 {
   242     SetContainerWindowL(parent);
   241     SetContainerWindowL(parent);
   243 
   242 
   244     CCoeControl::MakeVisible(ETrue);
   243     CCoeControl::MakeVisible(ETrue);
   245 
   244 
   358 {
   357 {
   359     CCoeEnv::Static()->SimulateKeyEventL(m_keyevent, m_eventcode);
   358     CCoeEnv::Static()->SimulateKeyEventL(m_keyevent, m_eventcode);
   360 }
   359 }
   361 
   360 
   362 //-------------------------------------------------------------------------------
   361 //-------------------------------------------------------------------------------
   363 // Draw ( from CCoeControl )
   362 // WebView::Draw ( from CCoeControl )
   364 // BitBlts the offscreen bitmap to the GraphicsContext
   363 // BitBlts the offscreen bitmap to the GraphicsContext
   365 //-------------------------------------------------------------------------------
   364 //-------------------------------------------------------------------------------
   366 void WebView::Draw(
   365 void WebView::Draw( const TRect& rect ) const
   367                    const TRect& rect ) const
       
   368 {
   366 {
   369     if (m_pluginFullscreen) return;
   367     if (m_pluginFullscreen) return;
   370 
   368 
   371     CWindowGc& gc = SystemGc();
   369     CWindowGc& gc = SystemGc();
   372     CEikBorderedControl::Draw( rect );
   370     CEikBorderedControl::Draw( rect );
   435         return NULL;
   433         return NULL;
   436     return kit(m_page->mainFrame());
   434     return kit(m_page->mainFrame());
   437 }
   435 }
   438 
   436 
   439 //-------------------------------------------------------------------------------
   437 //-------------------------------------------------------------------------------
   440 // SyncRepaint
   438 // WebView::syncRepaint
   441 // Repaint the given rectangle synchronously
   439 // Repaint the given rectangle synchronously
   442 //-------------------------------------------------------------------------------
   440 //-------------------------------------------------------------------------------
   443 void WebView::syncRepaint(
   441 void WebView::syncRepaint( const TRect& rect)
   444                           const TRect& rect)
       
   445 {
   442 {
   446     m_repaints.AddRect( rect );
   443     m_repaints.AddRect( rect );
   447     syncRepaint();
   444     syncRepaint();
   448 }
   445 }
   449 
   446 
   528 
   525 
   529     rect.Move(-p);
   526     rect.Move(-p);
   530 
   527 
   531       // draw to back buffer
   528       // draw to back buffer
   532 
   529 
   533    
   530 
   534     if(!(   m_widgetextension && m_widgetextension->IsWidgetPublising())) {
   531     if(!(   m_widgetextension && m_widgetextension->IsWidgetPublising())) {
   535         mainFrame()->frameView()->draw( *m_webcorecontext, rect );
   532         mainFrame()->frameView()->draw( *m_webcorecontext, rect );
   536         if ( zoomLevel < m_minZoomLevel ) zoomLevel = m_minZoomLevel;
   533         if ( zoomLevel < m_minZoomLevel ) zoomLevel = m_minZoomLevel;
   537         zoomLevelChanged( zoomLevel );
   534         zoomLevelChanged( zoomLevel );
   538     }
   535     }
   539 }
   536 }
   540 //-------------------------------------------------------------------------------
   537 //-------------------------------------------------------------------------------
   541 // SyncRepaint
   538 // WebView::syncRepaint
   542 // Repaint the current repaint region synchronously and clear it
   539 // Repaint the current repaint region synchronously and clear it
   543 //-------------------------------------------------------------------------------
   540 //-------------------------------------------------------------------------------
   544 void WebView::syncRepaint()
   541 void WebView::syncRepaint()
   545 {
   542 {
   546     if (m_pageScaler && m_pageScaler->FullScreenMode()) {
   543     if (m_pageScaler && m_pageScaler->FullScreenMode()) {
   611     static_cast<WebView*>(ptr)->doRepaint();
   608     static_cast<WebView*>(ptr)->doRepaint();
   612     return EFalse;
   609     return EFalse;
   613 }
   610 }
   614 
   611 
   615 //-------------------------------------------------------------------------------
   612 //-------------------------------------------------------------------------------
   616 // DoRepaint
   613 // WebView::doRepaint
   617 // Perform a scheduled repaint
   614 // Perform a scheduled repaint
   618 //-------------------------------------------------------------------------------
   615 //-------------------------------------------------------------------------------
   619 void WebView::doRepaint()
   616 void WebView::doRepaint()
   620 {
   617 {
   621     // the timer must always be canceled here!
   618     // the timer must always be canceled here!
   629           syncRepaint( );
   626           syncRepaint( );
   630       }
   627       }
   631 }
   628 }
   632 
   629 
   633 //-------------------------------------------------------------------------------
   630 //-------------------------------------------------------------------------------
   634 // CollectOffscreenbitmap
   631 // WebView::collectOffscreenbitmap
   635 // Get offscreen bitmap
   632 // Get offscreen bitmap
   636 //-------------------------------------------------------------------------------
   633 //-------------------------------------------------------------------------------
   637 void WebView::collectOffscreenbitmapL(CFbsBitmap& snapshot)
   634 void WebView::collectOffscreenbitmapL(CFbsBitmap& snapshot)
   638 {
   635 {
   639    
   636 
   640     (snapshot).Create(m_brctl->Size(), StaticObjectsContainer::instance()->webSurface()->displayMode());
   637     (snapshot).Create(m_brctl->Size(), StaticObjectsContainer::instance()->webSurface()->displayMode());
   641 
   638 
   642     CFbsBitmapDevice* device = CFbsBitmapDevice::NewL( &snapshot);
   639     CFbsBitmapDevice* device = CFbsBitmapDevice::NewL( &snapshot);
   643     CleanupStack::PushL(device);
   640     CleanupStack::PushL(device);
   644 
   641 
   650     CleanupStack::PopAndDestroy(2);
   647     CleanupStack::PopAndDestroy(2);
   651 
   648 
   652 }
   649 }
   653 
   650 
   654 //-------------------------------------------------------------------------------
   651 //-------------------------------------------------------------------------------
   655 // ScheduleRepaint
   652 // WebView::scheduleRepaint
   656 // Schedule an asynchronous repaint
   653 // Schedule an asynchronous repaint
   657 //-------------------------------------------------------------------------------
   654 //-------------------------------------------------------------------------------
   658 void WebView::scheduleRepaint(
   655 void WebView::scheduleRepaint(
   659                               const TRect& rect )
   656                               const TRect& rect )
   660 {
   657 {
   665         // Draw the miniview
   662         // Draw the miniview
   666         m_brctl->brCtlLayoutObserver()->NotifyLayoutChange(EOriginTopLeft);
   663         m_brctl->brCtlLayoutObserver()->NotifyLayoutChange(EOriginTopLeft);
   667 #endif
   664 #endif
   668         }
   665         }
   669     // if we are active, we'll repaint when timer fires
   666     // if we are active, we'll repaint when timer fires
   670     if( !m_repainttimer->IsActive() && !m_pageZoomHandler->isActive() && 
   667     if( !m_repainttimer->IsActive() && !m_pageZoomHandler->isActive() &&
   671          m_allowRepaints) {
   668          m_allowRepaints) {
   672         // no timer yet, repaint immediatly (but asynchronously)
   669         // no timer yet, repaint immediatly (but asynchronously)
   673         m_repainttimer->Start( 0, 0, TCallBack( &doRepaintCb, this ) );
   670         m_repainttimer->Start( 0, 0, TCallBack( &doRepaintCb, this ) );
   674     }
   671     }
   675 }
   672 }
   788         if ( m_webFormFillPopup && m_webFormFillPopup->IsVisible()) rv = m_webFormFillPopup;
   785         if ( m_webFormFillPopup && m_webFormFillPopup->IsVisible()) rv = m_webFormFillPopup;
   789 
   786 
   790     return rv;
   787     return rv;
   791 }
   788 }
   792 
   789 
       
   790 bool WebView::isNaviKey(const TKeyEvent& keyevent)
       
   791 {
       
   792     return (    keyevent.iCode == EKeyUpArrow         // North
       
   793              || keyevent.iCode == EKeyRightUpArrow    // Northeast
       
   794              || keyevent.iCode == EStdKeyDevice11     //   : Extra KeyEvent supports diagonal event simulator wedge
       
   795              || keyevent.iCode == EKeyRightArrow      // East
       
   796              || keyevent.iCode == EKeyRightDownArrow  // Southeast
       
   797              || keyevent.iCode == EStdKeyDevice12     //   : Extra KeyEvent supports diagonal event simulator wedge
       
   798              || keyevent.iCode == EKeyDownArrow       // South
       
   799              || keyevent.iCode == EKeyLeftDownArrow   // Southwest
       
   800              || keyevent.iCode == EStdKeyDevice13     //   : Extra KeyEvent supports diagonal event simulator wedge
       
   801              || keyevent.iCode == EKeyLeftArrow       // West
       
   802              || keyevent.iCode == EKeyLeftUpArrow     // Northwest
       
   803              || keyevent.iCode == EStdKeyDevice10);
       
   804 }
       
   805 
       
   806 bool WebView::handleEditable(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame )
       
   807 {
       
   808     bool consumed = false;
       
   809     consumed = frame->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode));
       
   810     // exit input on up/down key
       
   811     // EXCEPT on touch-enabled devices. We'll just consume in that case
       
   812     if ( !consumed && isNaviKey(keyevent) ) {
       
   813         if (m_webfeptexteditor->validateTextFormat() ) {
       
   814             setFocusNone();
       
   815         }
       
   816         else {
       
   817             consumed = true;
       
   818         }
       
   819     }
       
   820 
       
   821     return consumed;
       
   822 }
       
   823 
       
   824 
       
   825 bool WebView::handleEventKeyDown(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
       
   826 {
       
   827     m_currentEventKey = keyevent;
       
   828     m_currentEventCode = eventcode;
       
   829     return false; // not consumed
       
   830 }
       
   831 
       
   832 
       
   833 void WebView::sendMouseEventToEngine(TPointerEvent::TType eventType, TPoint pos, Frame* frame)
       
   834 {
       
   835     TPointerEvent event;
       
   836     event.iPosition = pos;
       
   837     event.iModifiers = 0;
       
   838     event.iType = eventType;
       
   839 
       
   840     switch (eventType) {
       
   841         case TPointerEvent::EButton1Down:
       
   842         {
       
   843             frame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(event));
       
   844             break;
       
   845         }
       
   846 
       
   847         case TPointerEvent::EButton1Up:
       
   848         {
       
   849             frame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(event));
       
   850             break;
       
   851         }
       
   852 
       
   853         case TPointerEvent::EMove:
       
   854         {
       
   855             frame->eventHandler()->handleMouseMoveEvent(PlatformMouseEvent(event));
       
   856             break;
       
   857         }
       
   858     };
       
   859 }
       
   860 
       
   861 
       
   862 void WebView::setFocusedNode(Frame* frame)
       
   863 {
       
   864     Node* node = frame->eventHandler()->mousePressNode();
       
   865     for (Node* n = node; n; n = n->parentNode()) {
       
   866         if ( n->isFocusable() ) {
       
   867             page()->focusController()->setFocusedNode(n, frame);
       
   868         }
       
   869     }
       
   870 }
       
   871 
       
   872 bool WebView::handleEventKeyL(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
       
   873 {
       
   874     WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
       
   875     bool consumed = false;
       
   876 
       
   877     TKeyEvent oldKeyEvent(m_currentEventKey);
       
   878     bool downEventConsumed = false;
       
   879     if (m_currentEventCode == EEventKeyDown &&
       
   880 	keyevent.iCode != EKeyDevice3 ){
       
   881         sendKeyEventToEngine(oldKeyEvent, EEventKeyDown, frame);
       
   882     }
       
   883     m_currentEventKey = keyevent;
       
   884     m_currentEventCode = eventcode;
       
   885     if (keyevent.iCode == EKeyDevice3) {
       
   886         // pass it to webcore
       
   887         sendMouseEventToEngine(TPointerEvent::EButton1Down,
       
   888 	                        cursor->position(), frame);
       
   889 
       
   890         // mimic ccb's behavior of onFocus
       
   891         setFocusedNode(frame);
       
   892 
       
   893        // Toolbar is activated on long key press only if the element
       
   894        // type is EElementNone during EEventKeyDown and EEventKey.
       
   895        // This prevents toolbar from popping up in DHTML pages. Also,
       
   896        // toolbar is activated when the user is not in fast scroll
       
   897        // mode, or in page overview mode, or on wml page.
       
   898        if ( ( m_focusedElementType == TBrCtlDefs::EElementNone ||
       
   899               m_focusedElementType == TBrCtlDefs::EElementBrokenImage ) &&
       
   900               keyevent.iRepeats && !m_brctl->wmlMode() ) {
       
   901            launchToolBarL();
       
   902        }
       
   903        consumed = true;
       
   904     }
       
   905     else if (isNaviKey(keyevent)) {
       
   906         if (m_brctl->settings()->getTabbedNavigation()) {
       
   907             consumed = downEventConsumed || handleTabbedNavigation(keyevent, eventcode);
       
   908         }
       
   909         else {
       
   910             consumed = handleKeyNavigation(keyevent, eventcode, frame);
       
   911         }
       
   912       } // if (m_brctl->settings()->getTabbedNavigation()
       
   913       else { // Not an arrow key..
       
   914              // activate hovered input element by just start typing
       
   915           consumed = handleInputElement(keyevent, eventcode, frame);
       
   916       }
       
   917 
       
   918       if (!consumed) {
       
   919           consumed = sendKeyEventToEngine(keyevent, eventcode, frame);
       
   920       }
       
   921     return consumed;
       
   922 }
       
   923 
       
   924 
       
   925 bool WebView::handleInputElement(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
       
   926 {
       
   927     WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
       
   928     if (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
       
   929         m_focusedElementType == TBrCtlDefs::EElementSelectBox ||
       
   930         m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox ||
       
   931         m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
       
   932 
       
   933         sendMouseEventToEngine(TPointerEvent::EButton1Down, cursor->position(), frame);
       
   934         sendMouseEventToEngine(TPointerEvent::EButton1Up, cursor->position(), frame);
       
   935 
       
   936         if (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
       
   937             m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
       
   938             if (!m_fepTimer) {
       
   939                 m_fepTimer = new WebCore::Timer<WebView>(this, &WebView::fepTimerFired);
       
   940             }
       
   941 
       
   942             m_fepTimer->startOneShot(0.2f);
       
   943             setEditable(true);
       
   944         }
       
   945         m_keyevent = keyevent;
       
   946         m_eventcode = eventcode;
       
   947     }
       
   948     return true;
       
   949 }
       
   950 
       
   951 
       
   952 bool WebView::handleKeyNavigation(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
       
   953 {
       
   954     WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
       
   955     bool consumed = false;
       
   956     bool fastscroll(m_fastScrollTimer->IsActive());
       
   957 
       
   958     // start fast scrolling
       
   959     m_showCursor = true;
       
   960     if (!cursor->isVisible()) {
       
   961         cursor->cursorUpdate(true);
       
   962     }
       
   963 
       
   964     m_savedPosition = mainFrame()->frameView()->contentPos();
       
   965     cursor->scrollAndMoveCursor(keyevent.iCode, m_scrollingSpeed, fastscroll);
       
   966     updateScrollbars();
       
   967     if (!fastscroll) {
       
   968         m_fastScrollTimer->Start(KCursorInitialDelay,KCursorUpdateFrquency,TCallBack(&scrollTimerCb,this));
       
   969         m_scrollingStartTime.HomeTime();
       
   970     }
       
   971 
       
   972     // and minimap comes on
       
   973     consumed = handleMinimapNavigation();
       
   974 
       
   975     if (!fastscroll) {
       
   976         sendMouseEventToEngine(TPointerEvent::EMove, cursor->position(), frame);
       
   977     }
       
   978 
       
   979     consumed = true;
       
   980     return consumed;
       
   981 }
       
   982 
       
   983 
       
   984 bool WebView::handleMinimapNavigation()
       
   985 {
       
   986     int scrollingTime = millisecondsScrolled();
       
   987     if (!AknLayoutUtils::PenEnabled() && m_pageScalerEnabled &&
       
   988           m_pageScaler && !isSmallPage() &&
       
   989           m_brctl->settings()->brctlSetting(TBrCtlDefs::ESettingsPageOverview) &&
       
   990          (scrollingTime > KPanningPageScalerStart || m_pageScaler->Visible())) {
       
   991         m_pageScaler->SetVisibleUntil(KScalerVisibilityTime);
       
   992     }
       
   993     return true;
       
   994 }
       
   995 
       
   996 bool WebView::handleTabbedNavigation(const TKeyEvent& keyevent, TEventCode eventcode)
       
   997 {
       
   998     int horizontal = 0;
       
   999     int vertical = 0;
       
  1000     switch(keyevent.iCode) {
       
  1001         case EKeyUpArrow:             // North
       
  1002             vertical = -1;
       
  1003             break;
       
  1004 
       
  1005         case EKeyRightUpArrow:        // Northeast
       
  1006         case EStdKeyDevice11:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
  1007             vertical   = -1;
       
  1008             horizontal = +1;
       
  1009             break;
       
  1010 
       
  1011         case EKeyRightArrow:          // East
       
  1012             horizontal = +1;
       
  1013             break;
       
  1014 
       
  1015         case EKeyRightDownArrow:      // Southeast
       
  1016         case EStdKeyDevice12:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
  1017             vertical   = +1;
       
  1018             horizontal = +1;
       
  1019             break;
       
  1020 
       
  1021         case EKeyDownArrow:           // South
       
  1022             vertical   = +1;
       
  1023             break;
       
  1024 
       
  1025         case EKeyLeftDownArrow:       // Southwest
       
  1026         case EStdKeyDevice13:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
  1027             vertical   = +1;
       
  1028             horizontal = -1;
       
  1029             break;
       
  1030 
       
  1031         case EKeyLeftArrow:           // West
       
  1032             horizontal = -1;
       
  1033             break;
       
  1034 
       
  1035         case EKeyLeftUpArrow:         // Northwest
       
  1036         case EStdKeyDevice10:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
  1037             vertical   = -1;
       
  1038             horizontal = -1;
       
  1039             break;
       
  1040 
       
  1041         default:                      // (Should never get here)
       
  1042             break;
       
  1043 
       
  1044     }
       
  1045     return m_tabbedNavigation->navigate(horizontal, vertical);
       
  1046 }
       
  1047 
       
  1048 
       
  1049 bool WebView::handleEventKeyUp(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
       
  1050 {
       
  1051     bool consumed = false;
       
  1052     TInt delay = 2 * KCursorInitialDelay;
       
  1053     WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
       
  1054     m_fastScrollTimer->Cancel();
       
  1055     m_scrollingSpeed = KNormalScrollRange*100/scalingFactor();
       
  1056 
       
  1057     if (viewIsFastScrolling()) {
       
  1058         setViewIsFastScrolling(false);
       
  1059         sendMouseEventToEngine(TPointerEvent::EMove, cursor->position(), frame);
       
  1060         toggleRepaintTimer(true);
       
  1061         if (!inPageViewMode()) {
       
  1062             delay = 0;
       
  1063         }
       
  1064     }
       
  1065     m_pageScrollHandler->scrollbarDrawer()->fadeScrollbar(delay);
       
  1066 
       
  1067     if ( (keyevent.iScanCode == EStdKeyDevice3) ||
       
  1068          (keyevent.iScanCode == EStdKeyEnter) ) {
       
  1069         // pass it to webcore
       
  1070 
       
  1071         if (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
       
  1072             m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
       
  1073             setEditable(true);
       
  1074         }
       
  1075         sendMouseEventToEngine(TPointerEvent::EButton1Up, cursor->position(), frame);
       
  1076         consumed = true;
       
  1077     }
       
  1078       if (!consumed) {
       
  1079           sendKeyEventToEngine(keyevent, eventcode, frame);
       
  1080       }
       
  1081       m_currentEventKey = KNullKeyEvent;
       
  1082       m_currentEventCode = EEventNull;
       
  1083     return consumed;
       
  1084 }
       
  1085 
       
  1086 
       
  1087 bool WebView::sendKeyEventToEngine(const TKeyEvent& keyevent,
       
  1088                                    TEventCode eventcode, Frame* frame)
       
  1089 {
       
  1090     bool consumed = frame->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode));
       
  1091 
       
  1092     if (!consumed && eventcode == EEventKey &&
       
  1093         (m_brctl->capabilities() & TBrCtlDefs::ECapabilityAccessKeys)) {
       
  1094 
       
  1095         TKeyEvent ke = keyevent;
       
  1096         TChar c(ke.iCode);
       
  1097         // Not consumed by WebCore, is alphanumeric and does not have any modifier
       
  1098         if (c.IsAlphaDigit() &&
       
  1099             !(ke.iModifiers & (EModifierCtrl | EModifierAlt | EModifierShift))) {
       
  1100             ke.iModifiers = EModifierCtrl;
       
  1101             frame->eventHandler()->keyEvent(PlatformKeyboardEvent(ke,EEventKeyDown));
       
  1102             consumed = true;
       
  1103         }
       
  1104     }
       
  1105     return consumed;
       
  1106 }
       
  1107 
       
  1108 
   793 TKeyResponse WebView::OfferKeyEventL(const TKeyEvent& keyevent, TEventCode eventcode )
  1109 TKeyResponse WebView::OfferKeyEventL(const TKeyEvent& keyevent, TEventCode eventcode )
   794 {
  1110 {
   795     WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
  1111     WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
   796     //hijack
  1112     //hijack
   797     if (isSynchRequestPending()) {
  1113     if (isSynchRequestPending()) {
   804         return m_popupDrawer->handleOfferKeyEventL(keyevent, eventcode );
  1120         return m_popupDrawer->handleOfferKeyEventL(keyevent, eventcode );
   805 
  1121 
   806     if ( m_webFormFillPopup && m_webFormFillPopup->IsVisible() && AknLayoutUtils::PenEnabled() ) {
  1122     if ( m_webFormFillPopup && m_webFormFillPopup->IsVisible() && AknLayoutUtils::PenEnabled() ) {
   807 	    if (EKeyWasConsumed == m_webFormFillPopup->HandleKeyEventL(keyevent, eventcode)) {
  1123 	    if (EKeyWasConsumed == m_webFormFillPopup->HandleKeyEventL(keyevent, eventcode)) {
   808             return EKeyWasConsumed;
  1124             return EKeyWasConsumed;
   809 	        }
  1125 	    }
   810     }
  1126     }
   811 
  1127 
   812     bool consumed = false;
  1128     bool consumed = false;
   813     Frame* coreFrame = core(mainFrame());
  1129     Frame* coreFrame = core(mainFrame());
   814     if (!coreFrame)
  1130     if (!coreFrame)
   815         return EKeyWasNotConsumed;
  1131         return EKeyWasNotConsumed;
   816 
       
   817     coreFrame = page()->focusController()->focusedOrMainFrame();
  1132     coreFrame = page()->focusController()->focusedOrMainFrame();
   818 
  1133 
   819     // edit events
  1134     // edit events
   820     if (m_isEditable) {
  1135     if (m_isEditable) {
   821         consumed = page()->focusController()->focusedOrMainFrame()->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode));
  1136         consumed = handleEditable(keyevent, eventcode, coreFrame);
   822         // exit input on up/down key
       
   823         // EXCEPT on touch-enabled devices. We'll just consume in that case
       
   824             if ( !consumed
       
   825                  && (    keyevent.iCode == EKeyUpArrow         // North
       
   826                       || keyevent.iCode == EKeyRightUpArrow    // Northeast
       
   827                       || keyevent.iCode == EStdKeyDevice11     //   : Extra KeyEvent supports diagonal event simulator wedge
       
   828                       || keyevent.iCode == EKeyRightArrow      // East
       
   829                       || keyevent.iCode == EKeyRightDownArrow  // Southeast
       
   830                       || keyevent.iCode == EStdKeyDevice12     //   : Extra KeyEvent supports diagonal event simulator wedge
       
   831                       || keyevent.iCode == EKeyDownArrow       // South
       
   832                       || keyevent.iCode == EKeyLeftDownArrow   // Southwest
       
   833                       || keyevent.iCode == EStdKeyDevice13     //   : Extra KeyEvent supports diagonal event simulator wedge
       
   834                       || keyevent.iCode == EKeyLeftArrow       // West
       
   835                       || keyevent.iCode == EKeyLeftUpArrow     // Northwest
       
   836                       || keyevent.iCode == EStdKeyDevice10 ) ) //   : Extra KeyEvent supports diagonal event simulator wedge
       
   837                 {
       
   838                 if (m_webfeptexteditor->validateTextFormat() ) {
       
   839                     setFocusNone();
       
   840                 } else {
       
   841                     consumed = true;
       
   842                 }
       
   843             }
       
   844     }
  1137     }
   845 
  1138 
   846     // scroll events
  1139     // scroll events
   847     if (!consumed) {
  1140     if (!consumed) {
   848         switch( eventcode ) {
  1141         switch( eventcode ) {
   849         case EEventKeyDown:
  1142         case EEventKeyDown:
   850             m_currentEventKey = keyevent;
  1143             handleEventKeyDown(keyevent, eventcode, coreFrame);
   851             //page()->mainFrame()->setFocusedNodeIfNeeded();
       
   852             //coreFrame->eventHandler()->mousePressNode()->focus();
       
   853 
       
   854             break;
  1144             break;
   855         case EEventKey:
  1145         case EEventKey:
   856             if (keyevent.iScanCode != m_currentEventKey.iScanCode ) return EKeyWasNotConsumed;
  1146             if (keyevent.iScanCode != m_currentEventKey.iScanCode ) return EKeyWasNotConsumed;
   857             //
  1147             consumed = handleEventKeyL(keyevent, eventcode, coreFrame);
   858             m_currentEventKey = keyevent;
       
   859             if (keyevent.iCode == EKeyDevice3) {
       
   860                 // pass it to webcore
       
   861                 TPointerEvent event;
       
   862                 event.iPosition = StaticObjectsContainer::instance()->webCursor()->position();
       
   863                 event.iModifiers = 0;
       
   864                 event.iType = TPointerEvent::EButton1Down ;
       
   865                 coreFrame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(event));
       
   866 
       
   867                 // mimic ccb's behavior of onFocus
       
   868                 Node* node = page()->focusController()->focusedOrMainFrame()->eventHandler()->mousePressNode();
       
   869                 for (Node* n = node; n; n = n->parentNode()) {
       
   870                     if ( n->isFocusable() ) {
       
   871                         page()->focusController()->setFocusedNode(n, page()->focusController()->focusedOrMainFrame());
       
   872                     }
       
   873                 }
       
   874 
       
   875                 // Toolbar is activated on long key press only if the element
       
   876                 // type is EElementNone during EEventKeyDown and EEventKey.
       
   877                 // This prevents toolbar from popping up in DHTML pages. Also,
       
   878                 // toolbar is activated when the user is not in fast scroll
       
   879                 // mode, or in page overview mode, or on wml page.
       
   880                 if ( ( m_focusedElementType == TBrCtlDefs::EElementNone ||
       
   881                        m_focusedElementType == TBrCtlDefs::EElementBrokenImage ) &&
       
   882                        keyevent.iRepeats && !m_brctl->wmlMode() )
       
   883                     {
       
   884                     launchToolBarL();
       
   885                     }
       
   886                 consumed = true;
       
   887             } else if (    keyevent.iCode == EKeyUpArrow              // North
       
   888                         || keyevent.iCode == EKeyRightUpArrow         // Northeast
       
   889                         || keyevent.iCode == EStdKeyDevice11          //   : Extra KeyEvent supports diagonal event simulator wedge
       
   890                         || keyevent.iCode == EKeyRightArrow           // East
       
   891                         || keyevent.iCode == EKeyRightDownArrow       // Southeast
       
   892                         || keyevent.iCode == EStdKeyDevice12          //   : Extra KeyEvent supports diagonal event simulator wedge
       
   893                         || keyevent.iCode == EKeyDownArrow            // South
       
   894                         || keyevent.iCode == EKeyLeftDownArrow        // Southwest
       
   895                         || keyevent.iCode == EStdKeyDevice13          //   : Extra KeyEvent supports diagonal event simulator wedge
       
   896                         || keyevent.iCode == EKeyLeftArrow            // West
       
   897                         || keyevent.iCode == EKeyLeftUpArrow          // Northwest
       
   898                         || keyevent.iCode == EStdKeyDevice10 )        //   : Extra KeyEvent supports diagonal event simulator wedge
       
   899             {
       
   900                 if (m_brctl->settings()->getTabbedNavigation()) {
       
   901                     int horizontal = 0;
       
   902                     int vertical = 0;
       
   903                     switch(keyevent.iCode)
       
   904                     {
       
   905                         case EKeyUpArrow:             // North
       
   906                             vertical = -1;
       
   907                             break;
       
   908 
       
   909                         case EKeyRightUpArrow:        // Northeast
       
   910                         case EStdKeyDevice11:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   911                             vertical   = -1;
       
   912                             horizontal = +1;
       
   913                             break;
       
   914 
       
   915                         case EKeyRightArrow:          // East
       
   916                             horizontal = +1;
       
   917                             break;
       
   918 
       
   919                         case EKeyRightDownArrow:      // Southeast
       
   920                         case EStdKeyDevice12:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   921                             vertical   = +1;
       
   922                             horizontal = +1;
       
   923                             break;
       
   924 
       
   925                         case EKeyDownArrow:           // South
       
   926                             vertical   = +1;
       
   927                             break;
       
   928 
       
   929                         case EKeyLeftDownArrow:       // Southwest
       
   930                         case EStdKeyDevice13:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   931                             vertical   = +1;
       
   932                             horizontal = -1;
       
   933                             break;
       
   934 
       
   935                         case EKeyLeftArrow:           // West
       
   936                             horizontal = -1;
       
   937                             break;
       
   938 
       
   939                         case EKeyLeftUpArrow:         // Northwest
       
   940                         case EStdKeyDevice10:         //   : Extra KeyEvent supports diagonal event simulator wedge
       
   941                             vertical   = -1;
       
   942                             horizontal = -1;
       
   943                             break;
       
   944 
       
   945                         default:                      // (Should never get here)
       
   946                             break;
       
   947 
       
   948                     }
       
   949                     
       
   950                    	consumed = m_tabbedNavigation->navigate(horizontal, vertical);
       
   951                 }
       
   952                 else {
       
   953                     // start fast scrolling
       
   954 					m_showCursor = true;
       
   955                     if (!cursor->isVisible()) {
       
   956                         cursor->cursorUpdate(true);
       
   957                     }
       
   958                     bool fastscroll(m_fastScrollTimer->IsActive());
       
   959                     m_savedPosition = mainFrame()->frameView()->contentPos();
       
   960                     cursor->scrollAndMoveCursor(keyevent.iCode, m_scrollingSpeed, fastscroll);
       
   961                     if (!fastscroll) {
       
   962                         m_fastScrollTimer->Start(KCursorInitialDelay,KCursorUpdateFrquency,TCallBack(&scrollTimerCb,this));
       
   963                         m_scrollingStartTime.HomeTime();
       
   964                     }
       
   965                     // and minimap comes on
       
   966                     int scrollingTime = millisecondsScrolled();
       
   967                     if (!AknLayoutUtils::PenEnabled() && m_pageScalerEnabled && m_pageScaler && !isSmallPage() &&
       
   968                         m_brctl->settings()->brctlSetting(TBrCtlDefs::ESettingsPageOverview) &&
       
   969                         (scrollingTime > KPanningPageScalerStart || m_pageScaler->Visible())) {
       
   970                         m_pageScaler->SetVisibleUntil(KScalerVisibilityTime);
       
   971 					}
       
   972                     //
       
   973                     if (!fastscroll) {
       
   974                       TPointerEvent event;
       
   975                       event.iPosition = cursor->position();
       
   976                       event.iModifiers = 0;
       
   977                       event.iType = TPointerEvent::EMove;
       
   978                       coreFrame->eventHandler()->handleMouseMoveEvent(PlatformMouseEvent(event));
       
   979                     }
       
   980                     consumed = true;
       
   981                 } // if (m_brctl->settings()->getTabbedNavigation()
       
   982             } else {
       
   983                 // activate hovered input element by just start typing
       
   984                 if (m_focusedElementType == TBrCtlDefs::EElementInputBox || m_focusedElementType == TBrCtlDefs::EElementSelectBox
       
   985                     || m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox || m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
       
   986                     TPointerEvent event;
       
   987                     event.iModifiers = 0;
       
   988                     event.iPosition = cursor->position();
       
   989                     event.iType = TPointerEvent::EButton1Down ;
       
   990                     coreFrame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(event));
       
   991                     event.iType = TPointerEvent::EButton1Up;
       
   992                     coreFrame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(event));
       
   993 
       
   994 
       
   995                     if (m_focusedElementType == TBrCtlDefs::EElementInputBox || m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
       
   996                         if (!m_fepTimer)
       
   997                             m_fepTimer = new WebCore::Timer<WebView>(this, &WebView::fepTimerFired);
       
   998 
       
   999                         m_fepTimer->startOneShot(0.2f);
       
  1000                         setEditable(true);
       
  1001                     }
       
  1002                     m_keyevent = keyevent;
       
  1003                     m_eventcode = eventcode;
       
  1004 
       
  1005                     consumed = true;
       
  1006             }
       
  1007             }
       
  1008             break;
  1148             break;
  1009         case EEventKeyUp:
  1149         case EEventKeyUp:
  1010             m_fastScrollTimer->Cancel();
  1150             consumed = handleEventKeyUp(keyevent, eventcode, coreFrame);
  1011             m_scrollingSpeed = KNormalScrollRange*100/scalingFactor();
       
  1012 
       
  1013             if (viewIsFastScrolling()) {
       
  1014 	      setViewIsFastScrolling(false);
       
  1015               toggleRepaintTimer(true);
       
  1016               if (AknLayoutUtils::PenEnabled() && !inPageViewMode()) {
       
  1017                   m_pageScrollHandler->scrollbarDrawer()->fadeScrollbar();
       
  1018               }
       
  1019             }
       
  1020             m_currentEventKey = KNullKeyEvent;
       
  1021             if ( (keyevent.iScanCode == EStdKeyDevice3) || (keyevent.iScanCode == EStdKeyEnter) ){
       
  1022                 // pass it to webcore
       
  1023                 TPointerEvent event;
       
  1024                 if (m_focusedElementType == TBrCtlDefs::EElementInputBox || 
       
  1025                         m_focusedElementType == TBrCtlDefs::EElementTextAreaBox)
       
  1026                     {
       
  1027                     setEditable(true);
       
  1028                     }
       
  1029                 event.iPosition = cursor->position();
       
  1030                 event.iType = TPointerEvent::EButton1Up;
       
  1031                 coreFrame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(event));
       
  1032                 consumed = true;
       
  1033             }
       
  1034             break;
  1151             break;
  1035         }
  1152         }
  1036     }
  1153     }
  1037 
  1154 
  1038     // keyevents
  1155     return (consumed) ? EKeyWasConsumed : EKeyWasNotConsumed;
  1039     if (!consumed) {
       
  1040         consumed = coreFrame->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode));
       
  1041         if (!consumed && eventcode == EEventKey && (m_brctl->capabilities() & TBrCtlDefs::ECapabilityAccessKeys)) {
       
  1042             TKeyEvent ke = keyevent;
       
  1043             TChar c(ke.iCode);
       
  1044             // Not consumed by WebCore, is alphanumeric and does not have any modifier
       
  1045             if (c.IsAlphaDigit() && !(ke.iModifiers & (EModifierCtrl | EModifierAlt | EModifierShift))) {
       
  1046                 ke.iModifiers = EModifierCtrl;
       
  1047                 coreFrame->eventHandler()->keyEvent(PlatformKeyboardEvent(ke,EEventKeyDown));
       
  1048                 consumed = true;
       
  1049             }
       
  1050         }
       
  1051     }
       
  1052 
       
  1053     //setEditable();
       
  1054 
       
  1055     return (consumed)?EKeyWasConsumed:EKeyWasNotConsumed;
       
  1056 }
  1156 }
  1057 
  1157 
  1058 
  1158 
  1059 void WebView::updateScrollbars(int documentHeight, int displayPosY, int documentWidth, int displayPosX)
  1159 void WebView::updateScrollbars(int documentHeight, int displayPosY, int documentWidth, int displayPosX)
  1060 {
  1160 {
  1061     m_brctl->updateScrollbars((documentHeight * scalingFactor()) / 100, Rect().Height(),
  1161     m_brctl->updateScrollbars((documentHeight * scalingFactor()) / 100, Rect().Height(),
  1062         (displayPosY * scalingFactor()) / 100, (documentWidth * scalingFactor()) / 100, Rect().Width(),
  1162         (displayPosY * scalingFactor()) / 100, (documentWidth * scalingFactor()) / 100, Rect().Width(),
  1063         (displayPosX * scalingFactor()) / 100);
  1163         (displayPosX * scalingFactor()) / 100);
       
  1164 }
       
  1165 void WebView::updateScrollbars()
       
  1166 {
       
  1167     TPoint scrollDelta = mainFrame()->frameView()->contentPos() - m_savedPosition;
       
  1168     scrollDelta.iX *= 100;
       
  1169     scrollDelta.iY *= 100;
       
  1170     if (!inPageViewMode()) {
       
  1171         if (scrollDelta.iX == 0 && scrollDelta.iY == 0) {
       
  1172             m_pageScrollHandler->scrollbarDrawer()->drawScrollbar(this);
       
  1173         }
       
  1174         else {
       
  1175             m_pageScrollHandler->scrollbarDrawer()->drawScrollbar(this, scrollDelta);
       
  1176         }
       
  1177     }
  1064 }
  1178 }
  1065 
  1179 
  1066 void WebView::openPageViewL()
  1180 void WebView::openPageViewL()
  1067 {
  1181 {
  1068     // don't show pageview if we are in lite mode
  1182     // don't show pageview if we are in lite mode
  1098         closePageView();
  1212         closePageView();
  1099     }
  1213     }
  1100 }
  1214 }
  1101 
  1215 
  1102 //-------------------------------------------------------------------------------
  1216 //-------------------------------------------------------------------------------
  1103 // launchToolBarL
  1217 // WebView::launchToolBarL
  1104 //-------------------------------------------------------------------------------
  1218 //-------------------------------------------------------------------------------
  1105 void WebView::launchToolBarL()
  1219 void WebView::launchToolBarL()
  1106 {
  1220 {
  1107     if ( AknLayoutUtils::PenEnabled() || m_brctl->wmlMode() ) {
  1221     if ( AknLayoutUtils::PenEnabled() || m_brctl->wmlMode() ) {
  1108         return;
  1222         return;
  1133     m_brctl->reportStateChanged(TBrCtlDefs::EStateToolBarMode, ETrue);
  1247     m_brctl->reportStateChanged(TBrCtlDefs::EStateToolBarMode, ETrue);
  1134 
  1248 
  1135 }
  1249 }
  1136 
  1250 
  1137 //-------------------------------------------------------------------------------
  1251 //-------------------------------------------------------------------------------
  1138 // closeToolBarL
  1252 // WebView::closeToolBarL
  1139 //-------------------------------------------------------------------------------
  1253 //-------------------------------------------------------------------------------
  1140 void WebView::closeToolBarL()
  1254 void WebView::closeToolBarL()
  1141 {
  1255 {
  1142     delete m_toolbar;
  1256     delete m_toolbar;
  1143     m_toolbar = 0;
  1257     m_toolbar = 0;
  1153 
  1267 
  1154     m_brctl->reportStateChanged(TBrCtlDefs::EStateToolBarMode, EFalse);
  1268     m_brctl->reportStateChanged(TBrCtlDefs::EStateToolBarMode, EFalse);
  1155 }
  1269 }
  1156 
  1270 
  1157 //-------------------------------------------------------------------------------
  1271 //-------------------------------------------------------------------------------
  1158 // DrawDocumentPart ( from MPageScalerCallback )
  1272 // WebView::DrawDocumentPart ( from MPageScalerCallback )
  1159 //
  1273 //
  1160 //
  1274 //
  1161 //-------------------------------------------------------------------------------
  1275 //-------------------------------------------------------------------------------
  1162 void WebView::DrawDocumentPart(
  1276 void WebView::DrawDocumentPart(
  1163                                CFbsBitGc& aGc,
  1277                                CFbsBitGc& aGc,
  1184         delete wcgc;
  1298         delete wcgc;
  1185     }
  1299     }
  1186 }
  1300 }
  1187 
  1301 
  1188 //-------------------------------------------------------------------------------
  1302 //-------------------------------------------------------------------------------
  1189 // DocumentViewport ( from MPageScalerCallback )
  1303 // WebView::DocumentViewport ( from MPageScalerCallback )
  1190 //
  1304 //
  1191 //
  1305 //
  1192 //-------------------------------------------------------------------------------
  1306 //-------------------------------------------------------------------------------
  1193 TRect WebView::DocumentViewport()
  1307 TRect WebView::DocumentViewport()
  1194 {
  1308 {
  1195     return mainFrame()->frameView()->toViewCoords(mainFrame()->frameView()->visibleRect());
  1309     return mainFrame()->frameView()->toViewCoords(mainFrame()->frameView()->visibleRect());
  1196 }
  1310 }
  1197 
  1311 
  1198 //-------------------------------------------------------------------------------
  1312 //-------------------------------------------------------------------------------
  1199 // ScaledPageChanged ( from MPageScalerCallback )
  1313 // WebView::ScaledPageChanged ( from MPageScalerCallback )
  1200 //
  1314 //
  1201 //
  1315 //
  1202 //-------------------------------------------------------------------------------
  1316 //-------------------------------------------------------------------------------
  1203 void WebView::ScaledPageChanged(
  1317 void WebView::ScaledPageChanged(
  1204                                 const TRect& aRect,
  1318                                 const TRect& aRect,
  1222         // ignore err since we will use the default image
  1336         // ignore err since we will use the default image
  1223     }
  1337     }
  1224 }
  1338 }
  1225 
  1339 
  1226 //-------------------------------------------------------------------------------
  1340 //-------------------------------------------------------------------------------
  1227 // DocumentSize ( from MPageScalerCallback )
  1341 // WebView::DocumentSize ( from MPageScalerCallback )
  1228 //
  1342 //
  1229 //
  1343 //
  1230 //-------------------------------------------------------------------------------
  1344 //-------------------------------------------------------------------------------
  1231 TSize WebView::DocumentSize()
  1345 TSize WebView::DocumentSize()
  1232 {
  1346 {
  1233     return mainFrame()->frameView()->toViewCoords(mainFrame()->frameView()->contentSize());
  1347     return mainFrame()->frameView()->toViewCoords(mainFrame()->frameView()->contentSize());
  1234 }
  1348 }
  1235 
  1349 
  1236 //-------------------------------------------------------------------------------
  1350 //-------------------------------------------------------------------------------
  1237 // TouchScrolling ( from MPageScalerCallback )
  1351 // WebView::TouchScrolling ( from MPageScalerCallback )
  1238 //
  1352 //
  1239 //
  1353 //
  1240 //-------------------------------------------------------------------------------
  1354 //-------------------------------------------------------------------------------
  1241 TBool WebView::TouchScrolling()
  1355 TBool WebView::TouchScrolling()
  1242 {
  1356 {
  1429     int milli = millisecondsScrolled();
  1543     int milli = millisecondsScrolled();
  1430     setViewIsFastScrolling(true);
  1544     setViewIsFastScrolling(true);
  1431     toggleRepaintTimer(false);
  1545     toggleRepaintTimer(false);
  1432     m_scrollingSpeed = milli>=KPanningMaxTime ? KPanningMaxSpeed : KPanningStartSpeed+(KPanningMaxSpeed-KPanningStartSpeed)*Max(milli-KPanningStartTime,0)/KPanningMaxTime;
  1546     m_scrollingSpeed = milli>=KPanningMaxTime ? KPanningMaxSpeed : KPanningStartSpeed+(KPanningMaxSpeed-KPanningStartSpeed)*Max(milli-KPanningStartTime,0)/KPanningMaxTime;
  1433     m_scrollingSpeed = m_scrollingSpeed*100/scalingFactor();
  1547     m_scrollingSpeed = m_scrollingSpeed*100/scalingFactor();
  1434     TPoint scrollDelta = mainFrame()->frameView()->contentPos() - m_savedPosition;
       
  1435     scrollDelta.iX *= 100;
       
  1436     scrollDelta.iY *= 100;
       
  1437     if (AknLayoutUtils::PenEnabled() && !inPageViewMode()) {
       
  1438         m_pageScrollHandler->scrollbarDrawer()->drawScrollbar(this, scrollDelta);
       
  1439     }
       
  1440     OfferKeyEventL(m_currentEventKey, EEventKey);
  1548     OfferKeyEventL(m_currentEventKey, EEventKey);
  1441 }
  1549 }
  1442 
  1550 
  1443 int WebView::millisecondsScrolled() const
  1551 int WebView::millisecondsScrolled() const
  1444 {
  1552 {
  1472 
  1580 
  1473 int WebView::searchAgain(bool forward)
  1581 int WebView::searchAgain(bool forward)
  1474 {
  1582 {
  1475     if (!m_findKeyword) {
  1583     if (!m_findKeyword) {
  1476         WebFrame* frame = mainFrame()->findFrameWithSelection();
  1584         WebFrame* frame = mainFrame()->findFrameWithSelection();
  1477         if(frame) {
  1585         if (frame) {
  1478 			frame->clearSelection();
  1586             frame->clearSelection();
  1479         }
  1587             }
  1480         return TBrCtlDefs::EFindNoMatches;
  1588         return TBrCtlDefs::EFindNoMatches;
  1481     }
  1589     }
  1482     return search(*m_findKeyword, forward, true);
  1590     return search(*m_findKeyword, forward, true);
  1483 }
  1591 }
  1484 
  1592 
  1515             if (frame != startFrame)
  1623             if (frame != startFrame)
  1516                 startFrame->clearSelection();
  1624                 startFrame->clearSelection();
  1517             return TBrCtlDefs::EFindMatch;
  1625             return TBrCtlDefs::EFindMatch;
  1518         }
  1626         }
  1519         if (onlyOneFrame) {
  1627         if (onlyOneFrame) {
  1520 			startFrame->clearSelection();
  1628             startFrame->clearSelection();
  1521             return TBrCtlDefs::EFindNoMatches;
  1629             return TBrCtlDefs::EFindNoMatches;
  1522         }
  1630         }
  1523         frame = nextFrame;
  1631         frame = nextFrame;
  1524     } while (frame && frame != startFrame);
  1632     } while (frame && frame != startFrame);
  1525 
  1633 
  1531     if (wrapFlag && lastFrame) {
  1639     if (wrapFlag && lastFrame) {
  1532         if (frame->bridge()->searchFor(keyword, forward, false, true, false))
  1640         if (frame->bridge()->searchFor(keyword, forward, false, true, false))
  1533             return TBrCtlDefs::EFindMatch;
  1641             return TBrCtlDefs::EFindMatch;
  1534     }
  1642     }
  1535 
  1643 
  1536 	if(frame) {
  1644     if (frame) {
  1537 		frame->clearSelection();
  1645         frame->clearSelection();
  1538 	}		
  1646         }
  1539     return TBrCtlDefs::EFindNoMatches;
  1647     return TBrCtlDefs::EFindNoMatches;
  1540 }
  1648 }
  1541 
  1649 
  1542 void WebView::exitFindState()
  1650 void WebView::exitFindState()
  1543 {
  1651 {
  1562     }
  1670     }
  1563 }
  1671 }
  1564 
  1672 
  1565 
  1673 
  1566 //-------------------------------------------------------------------------------
  1674 //-------------------------------------------------------------------------------
  1567 // HandlePointerBufferReadyL
  1675 // WebView::HandlePointerBufferReadyL
  1568 // Handles Pointer Move Events
  1676 // Handles pointer move events
  1569 //-------------------------------------------------------------------------------
  1677 //-------------------------------------------------------------------------------
  1570 void WebView::HandlePointerBufferReadyL()
  1678 void WebView::HandlePointerBufferReadyL()
  1571 {
  1679 {
  1572     memset(m_ptrbuffer,0,256*sizeof(TPoint));
  1680     memset(m_ptrbuffer,0,256*sizeof(TPoint));
  1573     TPtr8 ptr((TUint8 *)m_ptrbuffer,256*sizeof(TPoint));
  1681     TPtr8 ptr((TUint8 *)m_ptrbuffer,256*sizeof(TPoint));
  1581         m_webpointerEventHandler->HandlePointerEventL(pe);
  1689         m_webpointerEventHandler->HandlePointerEventL(pe);
  1582     }
  1690     }
  1583 }
  1691 }
  1584 
  1692 
  1585 //-------------------------------------------------------------------------------
  1693 //-------------------------------------------------------------------------------
  1586 // HandlePointerEventL
  1694 // WebView::HandlePointerEventL
  1587 // Handles Pointer Events
  1695 // Handles pointer events
  1588 //-------------------------------------------------------------------------------
  1696 //-------------------------------------------------------------------------------
  1589 void WebView::HandlePointerEventL(const TPointerEvent& aPointerEvent)
  1697 void WebView::HandlePointerEventL(const TPointerEvent& aPointerEvent)
  1590 {
  1698 {
  1591     m_webpointerEventHandler->HandlePointerEventL(aPointerEvent);
  1699     m_webpointerEventHandler->HandlePointerEventL(aPointerEvent);
  1592 }
  1700 }
  1600         }
  1708         }
  1601     }
  1709     }
  1602 }
  1710 }
  1603 
  1711 
  1604 //-------------------------------------------------------------------------------
  1712 //-------------------------------------------------------------------------------
  1605 // HandleShowAnchorHref()
  1713 // WebView::handleShowAnchorHrefL
  1606 // Display a popup with the url of an anchor
  1714 // Display a popup with the url of an anchor
  1607 //-------------------------------------------------------------------------------
  1715 //-------------------------------------------------------------------------------
  1608 void WebView::handleShowAnchorHrefL()
  1716 void WebView::handleShowAnchorHrefL()
  1609 {
  1717 {
  1610     HBufC* url = NULL;
  1718     HBufC* url = NULL;
  1637 
  1745 
  1638     CleanupStack::PopAndDestroy(); // url
  1746     CleanupStack::PopAndDestroy(); // url
  1639 }
  1747 }
  1640 
  1748 
  1641 //-------------------------------------------------------------------------------
  1749 //-------------------------------------------------------------------------------
  1642 // FocusedImageLC()
  1750 // WebView::focusedImageLC
  1643 // Return the image that is under the cursor
  1751 // Return the image that is under the cursor
  1644 //-------------------------------------------------------------------------------
  1752 //-------------------------------------------------------------------------------
  1645 TBrCtlImageCarrier* WebView::focusedImageLC()
  1753 TBrCtlImageCarrier* WebView::focusedImageLC()
  1646 {
  1754 {
  1647     if (m_focusedElementType != TBrCtlDefs::EElementImageBox && m_focusedElementType != TBrCtlDefs::EElementAreaBox) {
  1755     if (m_focusedElementType != TBrCtlDefs::EElementImageBox && m_focusedElementType != TBrCtlDefs::EElementAreaBox) {
  1652     CleanupStack::PushL(imageCarrier);
  1760     CleanupStack::PushL(imageCarrier);
  1653     return imageCarrier;
  1761     return imageCarrier;
  1654 }
  1762 }
  1655 
  1763 
  1656 //-------------------------------------------------------------------------------
  1764 //-------------------------------------------------------------------------------
  1657 // LoadFocusedImageL()
  1765 // WebView::loadFocusedImageL
  1658 // Load the image that is under the cursor
  1766 // Load the image that is under the cursor
  1659 //-------------------------------------------------------------------------------
  1767 //-------------------------------------------------------------------------------
  1660 void WebView::loadFocusedImageL()
  1768 void WebView::loadFocusedImageL()
  1661 {
  1769 {
  1662     // Ensure cursor is on a broken image and image loading is disabled
  1770     // Ensure cursor is on a broken image and image loading is disabled
  1665     }
  1773     }
  1666     loadFocusedImage(this);
  1774     loadFocusedImage(this);
  1667 }
  1775 }
  1668 
  1776 
  1669 //-------------------------------------------------------------------------------
  1777 //-------------------------------------------------------------------------------
  1670 // RemovePopup()
  1778 // WebView::removePopup
  1671 // Delete the popupDrawer
  1779 // Delete the popupDrawer
  1672 //-------------------------------------------------------------------------------
  1780 //-------------------------------------------------------------------------------
  1673 void WebView::removePopup()
  1781 void WebView::removePopup()
  1674 {
  1782 {
  1675     if (m_popupDrawer) {
  1783     if (m_popupDrawer) {
  1678         DrawNow();
  1786         DrawNow();
  1679     }
  1787     }
  1680 }
  1788 }
  1681 
  1789 
  1682 //-------------------------------------------------------------------------------
  1790 //-------------------------------------------------------------------------------
       
  1791 // WebView::zoomLevels
  1683 //-------------------------------------------------------------------------------
  1792 //-------------------------------------------------------------------------------
  1684 RArray<TUint>* WebView::zoomLevels()
  1793 RArray<TUint>* WebView::zoomLevels()
  1685 {
  1794 {
  1686     return &m_zoomLevelArray;
  1795     return &m_zoomLevelArray;
  1687 }
  1796 }
  1688 
  1797 
  1689 //-------------------------------------------------------------------------------
  1798 //-------------------------------------------------------------------------------
       
  1799 // WebView::setZoomLevel
  1690 //-------------------------------------------------------------------------------
  1800 //-------------------------------------------------------------------------------
  1691 void WebView::setZoomLevel(int zoomLevel)
  1801 void WebView::setZoomLevel(int zoomLevel)
  1692 {
  1802 {
  1693     m_dirtyZoomMode = false;
  1803     m_dirtyZoomMode = false;
  1694     if (zoomLevel < KZoomLevelMinValue ||
  1804     if (zoomLevel < KZoomLevelMinValue ||
  1697         return;
  1807         return;
  1698     zoomLevelChanged(zoomLevel);
  1808     zoomLevelChanged(zoomLevel);
  1699 }
  1809 }
  1700 
  1810 
  1701 //-------------------------------------------------------------------------------
  1811 //-------------------------------------------------------------------------------
       
  1812 // WebView::setBitmapZoomLevel
  1702 //-------------------------------------------------------------------------------
  1813 //-------------------------------------------------------------------------------
  1703 void WebView::setBitmapZoomLevel(int zoomLevel)
  1814 void WebView::setBitmapZoomLevel(int zoomLevel)
  1704 {
  1815 {
  1705     m_zoomLevelChangedByUser = true;
  1816     m_zoomLevelChangedByUser = true;
  1706     WebFrameView* view = mainFrame()->frameView();
  1817     WebFrameView* view = mainFrame()->frameView();
  1753 
  1864 
  1754     DrawNow();
  1865     DrawNow();
  1755 }
  1866 }
  1756 
  1867 
  1757 //-------------------------------------------------------------------------------
  1868 //-------------------------------------------------------------------------------
       
  1869 // WebView::restoreZoomLevel
  1758 //-------------------------------------------------------------------------------
  1870 //-------------------------------------------------------------------------------
  1759 void WebView::restoreZoomLevel(int zoomLevel)
  1871 void WebView::restoreZoomLevel(int zoomLevel)
  1760 {
  1872 {
  1761     m_dirtyZoomMode = false;
  1873     m_dirtyZoomMode = false;
  1762     clearOffScreenBitmap();
  1874     clearOffScreenBitmap();
  1766     mainFrame()->makeVisiblePlugins(true);
  1878     mainFrame()->makeVisiblePlugins(true);
  1767     m_isPluginsVisible = true;
  1879     m_isPluginsVisible = true;
  1768 }
  1880 }
  1769 
  1881 
  1770 //-------------------------------------------------------------------------------
  1882 //-------------------------------------------------------------------------------
       
  1883 // WebView::resetZoomLevel
  1771 //-------------------------------------------------------------------------------
  1884 //-------------------------------------------------------------------------------
  1772 void WebView::resetZoomLevel(void)
  1885 void WebView::resetZoomLevel(void)
  1773 {
  1886 {
  1774     if(   m_widgetextension && m_widgetextension->IsWidgetPublising()) {
  1887     if(   m_widgetextension && m_widgetextension->IsWidgetPublising()) {
  1775         return ;
  1888         return ;
  1810     mainFrame()->frameView()->setRect(mainFrame()->frameView()->toDocCoords(Rect()));
  1923     mainFrame()->frameView()->setRect(mainFrame()->frameView()->toDocCoords(Rect()));
  1811     m_startZoomLevel = m_currentZoomLevel;
  1924     m_startZoomLevel = m_currentZoomLevel;
  1812 }
  1925 }
  1813 
  1926 
  1814 //-------------------------------------------------------------------------------
  1927 //-------------------------------------------------------------------------------
       
  1928 // WebView::updateMinZoomLevel
  1815 //-------------------------------------------------------------------------------
  1929 //-------------------------------------------------------------------------------
  1816 void WebView::updateMinZoomLevel(TSize size)
  1930 void WebView::updateMinZoomLevel(TSize size)
  1817 {
  1931 {
  1818     int newMinZoomLevel;
  1932     int newMinZoomLevel;
  1819     if (size.iWidth && size.iHeight) {
  1933     if (size.iWidth && size.iHeight) {
  1856       }
  1970       }
  1857   } //endof if (m_minZoomLevel != newMinZoomLevel)
  1971   } //endof if (m_minZoomLevel != newMinZoomLevel)
  1858 }
  1972 }
  1859 
  1973 
  1860 //-------------------------------------------------------------------------------
  1974 //-------------------------------------------------------------------------------
       
  1975 // WebView::UpdateZoomArray
  1861 //-------------------------------------------------------------------------------
  1976 //-------------------------------------------------------------------------------
  1862 void WebView::UpdateZoomArray()
  1977 void WebView::UpdateZoomArray()
  1863 {
  1978 {
  1864     //only for non-touch device
  1979     //only for non-touch device
  1865     if (m_pageZoomHandler->isActive())
  1980     if (m_pageZoomHandler->isActive())
  1891     }
  2006     }
  1892 
  2007 
  1893 }
  2008 }
  1894 
  2009 
  1895 //-------------------------------------------------------------------------------
  2010 //-------------------------------------------------------------------------------
       
  2011 // WebView::zoomLevelChanged
  1896 //-------------------------------------------------------------------------------
  2012 //-------------------------------------------------------------------------------
  1897 void WebView::zoomLevelChanged(int newZoomLevel)
  2013 void WebView::zoomLevelChanged(int newZoomLevel)
  1898 {
  2014 {
  1899     int currZoomLevel = m_startZoomLevel;
  2015     int currZoomLevel = m_startZoomLevel;
  1900     m_dirtyZoomMode = false;
  2016     m_dirtyZoomMode = false;
  1962     int zoomLevel = m_brctl->historyHandler()->historyController()->currentEntryZoomLevel();
  2078     int zoomLevel = m_brctl->historyHandler()->historyController()->currentEntryZoomLevel();
  1963     if (zoomLevel != m_currentZoomLevel) m_brctl->historyHandler()->historyController()->updateCurrentEntryZoomLevelIfNeeded();
  2079     if (zoomLevel != m_currentZoomLevel) m_brctl->historyHandler()->historyController()->updateCurrentEntryZoomLevelIfNeeded();
  1964 }
  2080 }
  1965 
  2081 
  1966 //-------------------------------------------------------------------------------
  2082 //-------------------------------------------------------------------------------
       
  2083 // WebView:::resetLastZoomLevelIfNeeded
  1967 //-------------------------------------------------------------------------------
  2084 //-------------------------------------------------------------------------------
  1968 void WebView::resetLastZoomLevelIfNeeded()
  2085 void WebView::resetLastZoomLevelIfNeeded()
  1969 {
  2086 {
  1970     if (m_lastZoomLevel == m_maxZoomLevel)
  2087     if (m_lastZoomLevel == m_maxZoomLevel)
  1971         m_lastZoomLevel = 100;
  2088         m_lastZoomLevel = 100;
  1972 }
  2089 }
  1973 
  2090 
  1974 //-----------------------------------------------------------------------------
  2091 //-----------------------------------------------------------------------------
  1975 // setZoomLevelAdaptively()
  2092 // WebView::setZoomLevelAdaptively()
  1976 //-----------------------------------------------------------------------------
  2093 //-----------------------------------------------------------------------------
  1977 void WebView::setZoomLevelAdaptively()
  2094 void WebView::setZoomLevelAdaptively()
  1978 {
  2095 {
  1979     int zoomLevel = KZoomLevelDefaultValue;
  2096     int zoomLevel = KZoomLevelDefaultValue;
  1980 
  2097 
  1981   // Double Tap Zooming: it toggles between default, maxiZoomLevel.
  2098   // Double Tap Zooming: it toggles between default, maxiZoomLevel.
  1982   // Depending on the current zoom level:
  2099   // Depending on the current zoom level:
  1983   //   A. If the current is already the max, it zooms to the max 
  2100   //   A. If the current is already the max, it zooms to the max
  1984   //   B. If the current is bigger than/equal to the default zoom level zooms to the default, it zooms to the max
  2101   //   B. If the current is bigger than/equal to the default zoom level zooms to the default, it zooms to the max
  1985   //   C. Otherwise it zooms to the default level first. 
  2102   //   C. Otherwise it zooms to the default level first.
  1986   // For the mobile pages, such as google.com and cnn.com, minimum zoom level equals
  2103   // For the mobile pages, such as google.com and cnn.com, minimum zoom level equals
  1987   // to the default zoom level. Zooming is only possible between default and maximum
  2104   // to the default zoom level. Zooming is only possible between default and maximum
  1988   // zoom level, double tap only won't reach logic C
  2105   // zoom level, double tap only won't reach logic C
  1989   //
  2106   //
  1990   // For both mobile and non-mobile pages, it creates the same end user double tap 
  2107   // For both mobile and non-mobile pages, it creates the same end user double tap
  1991   // experiences 
  2108   // experiences
  1992   
  2109 
  1993     if (m_currentZoomLevel == m_maxZoomLevel ) {
  2110     if (m_currentZoomLevel == m_maxZoomLevel ) {
  1994         zoomLevel = KZoomLevelDefaultValue;    	
  2111         zoomLevel = KZoomLevelDefaultValue;
  1995     }
  2112     }
  1996     else if (m_currentZoomLevel >= KZoomLevelDefaultValue ) {
  2113     else if (m_currentZoomLevel >= KZoomLevelDefaultValue ) {
  1997         zoomLevel = m_maxZoomLevel;
  2114         zoomLevel = m_maxZoomLevel;
  1998     }	
  2115     }
  1999     else {
  2116     else {
  2000         zoomLevel = KZoomLevelDefaultValue;    	
  2117         zoomLevel = KZoomLevelDefaultValue;
  2001     } 
  2118     }
  2002 
  2119 
  2003     // move the content
  2120     // move the content
  2004     WebFrameView* view = mainFrame()->frameView();
  2121     WebFrameView* view = mainFrame()->frameView();
  2005     if (!view) return;
  2122     if (!view) return;
  2006     WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
  2123     WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
  2020     setZoomLevel(zoomLevel);
  2137     setZoomLevel(zoomLevel);
  2021     mainFrame()->notifyPluginsOfScrolling();
  2138     mainFrame()->notifyPluginsOfScrolling();
  2022 }
  2139 }
  2023 
  2140 
  2024 //-------------------------------------------------------------------------------
  2141 //-------------------------------------------------------------------------------
       
  2142 // WebView::openPluginPlayer
  2025 // Called when user clicks a plugin which is able to accept user input,
  2143 // Called when user clicks a plugin which is able to accept user input,
  2026 // this feature is only used in US build
  2144 // this feature is only used in US build
  2027 //-------------------------------------------------------------------------------
  2145 //-------------------------------------------------------------------------------
  2028 void WebView::openPluginPlayer(PluginWin* plugin)
  2146 void WebView::openPluginPlayer(PluginWin* plugin)
  2029 {
  2147 {
  2047 void WebView::setFocusNone()
  2165 void WebView::setFocusNone()
  2048 {
  2166 {
  2049     page()->focusController()->setFocusedNode(NULL, page()->focusController()->focusedOrMainFrame());
  2167     page()->focusController()->setFocusedNode(NULL, page()->focusController()->focusedOrMainFrame());
  2050 }
  2168 }
  2051 //-------------------------------------------------------------------------------
  2169 //-------------------------------------------------------------------------------
       
  2170 // WebView::closePluginPlayer
  2052 //-------------------------------------------------------------------------------
  2171 //-------------------------------------------------------------------------------
  2053 void WebView::closePluginPlayer()
  2172 void WebView::closePluginPlayer()
  2054 {
  2173 {
  2055     // stop playing
  2174     // stop playing
  2056     m_pluginplayer->stop();
  2175     m_pluginplayer->stop();
  2062     // redraw the control
  2181     // redraw the control
  2063     m_brctl->DrawNow();
  2182     m_brctl->DrawNow();
  2064 }
  2183 }
  2065 
  2184 
  2066 //-------------------------------------------------------------------------------
  2185 //-------------------------------------------------------------------------------
       
  2186 // WebView::createWidgetExtension
  2067 //-------------------------------------------------------------------------------
  2187 //-------------------------------------------------------------------------------
  2068 CWidgetExtension* WebView::createWidgetExtension(MWidgetCallback &aWidgetCallback)
  2188 CWidgetExtension* WebView::createWidgetExtension(MWidgetCallback &aWidgetCallback)
  2069 {
  2189 {
  2070     if (!m_widgetextension) {
  2190     if (!m_widgetextension) {
  2071         m_widgetextension = CWidgetExtension::NewL(*this, aWidgetCallback);
  2191         m_widgetextension = CWidgetExtension::NewL(*this, aWidgetCallback);
  2076 
  2196 
  2077     return m_widgetextension;
  2197     return m_widgetextension;
  2078 }
  2198 }
  2079 
  2199 
  2080 //-------------------------------------------------------------------------------
  2200 //-------------------------------------------------------------------------------
       
  2201 // WebView::forceLayoutAndResize
  2081 //-------------------------------------------------------------------------------
  2202 //-------------------------------------------------------------------------------
  2082 void WebView::forceLayoutAndResize(WebFrame* frame)
  2203 void WebView::forceLayoutAndResize(WebFrame* frame)
  2083 {
  2204 {
  2084     if (frame) {
  2205     if (frame) {
  2085         Frame* f = core(frame);
  2206         Frame* f = core(frame);
  2104         }
  2225         }
  2105     }
  2226     }
  2106 }
  2227 }
  2107 
  2228 
  2108 //-------------------------------------------------------------------------------
  2229 //-------------------------------------------------------------------------------
       
  2230 // WebView::showZoomSliderL
  2109 //-------------------------------------------------------------------------------
  2231 //-------------------------------------------------------------------------------
  2110 void WebView::showZoomSliderL()
  2232 void WebView::showZoomSliderL()
  2111 {
  2233 {
  2112     if ( !inPageViewMode()) {
  2234     if ( !inPageViewMode()) {
  2113         m_pageZoomHandler->showZoomSliderL();
  2235         m_pageZoomHandler->showZoomSliderL();
  2118     }
  2240     }
  2119     m_startZoomLevel = m_currentZoomLevel;
  2241     m_startZoomLevel = m_currentZoomLevel;
  2120 }
  2242 }
  2121 
  2243 
  2122 //-------------------------------------------------------------------------------
  2244 //-------------------------------------------------------------------------------
       
  2245 // WebView::hideZoomSliderL
  2123 //-------------------------------------------------------------------------------
  2246 //-------------------------------------------------------------------------------
  2124 void WebView::hideZoomSliderL()
  2247 void WebView::hideZoomSliderL()
  2125 {
  2248 {
  2126     if ( !inPageViewMode()) {
  2249     if ( !inPageViewMode()) {
  2127         m_pageZoomHandler->hideZoomSliderL();
  2250         m_pageZoomHandler->hideZoomSliderL();
  2128     }
  2251     }
  2129 }
  2252 }
  2130 
  2253 
  2131 //-------------------------------------------------------------------------------
  2254 //-------------------------------------------------------------------------------
       
  2255 // WebView::notifyZoomSliderModeChangeL
  2132 //-------------------------------------------------------------------------------
  2256 //-------------------------------------------------------------------------------
  2133 void WebView::notifyZoomSliderModeChangeL( bool mode )
  2257 void WebView::notifyZoomSliderModeChangeL( bool mode )
  2134 {
  2258 {
  2135     m_dirtyZoomMode = false;
  2259     m_dirtyZoomMode = false;
  2136     clearOffScreenBitmap();
  2260     clearOffScreenBitmap();
  2137     zoomLevelChanged( m_currentZoomLevel );
  2261     zoomLevelChanged( m_currentZoomLevel );
  2138     m_brctl->reportStateChanged(TBrCtlDefs::EStateZoomSliderMode, mode );
  2262     m_brctl->reportStateChanged(TBrCtlDefs::EStateZoomSliderMode, mode );
  2139 }
  2263 }
  2140 
  2264 
  2141 //-------------------------------------------------------------------------------
  2265 //-------------------------------------------------------------------------------
       
  2266 // WebView::maxZoomLevel
  2142 //-------------------------------------------------------------------------------
  2267 //-------------------------------------------------------------------------------
  2143 int WebView::maxZoomLevel()
  2268 int WebView::maxZoomLevel()
  2144 {
  2269 {
  2145     return m_maxZoomLevel;
  2270     return m_maxZoomLevel;
  2146 }
  2271 }
  2147 
  2272 
  2148 //-------------------------------------------------------------------------------
  2273 //-------------------------------------------------------------------------------
       
  2274 // WebView::minZoomLevel
  2149 //-------------------------------------------------------------------------------
  2275 //-------------------------------------------------------------------------------
  2150 int WebView::minZoomLevel()
  2276 int WebView::minZoomLevel()
  2151 {
  2277 {
  2152     return m_minZoomLevel;
  2278     return m_minZoomLevel;
  2153 }
  2279 }
  2154 
  2280 
  2155 //-------------------------------------------------------------------------------
  2281 //-------------------------------------------------------------------------------
       
  2282 // WebView::updateZoomLevel
  2156 //-------------------------------------------------------------------------------
  2283 //-------------------------------------------------------------------------------
  2157 void WebView::updateZoomLevel( TBrCtlDefs::TBrCtlSettings setting, unsigned int value)
  2284 void WebView::updateZoomLevel( TBrCtlDefs::TBrCtlSettings setting, unsigned int value)
  2158 {
  2285 {
  2159    switch( setting ) {
  2286    switch( setting ) {
  2160        case TBrCtlDefs::ESettingsZoomLevelMax:
  2287        case TBrCtlDefs::ESettingsZoomLevelMax:
  2176             break;   // should not occur
  2303             break;   // should not occur
  2177     }
  2304     }
  2178 }
  2305 }
  2179 
  2306 
  2180 //-------------------------------------------------------------------------------
  2307 //-------------------------------------------------------------------------------
       
  2308 // WebView::EnterFullscreenBrowsingL
  2181 //-------------------------------------------------------------------------------
  2309 //-------------------------------------------------------------------------------
  2182 void WebView::EnterFullscreenBrowsingL()
  2310 void WebView::EnterFullscreenBrowsingL()
  2183 {
  2311 {
  2184     if (m_pageFullScreenHandler) {
  2312     if (m_pageFullScreenHandler) {
  2185          m_pageFullScreenHandler->showEscBtnL();
  2313          m_pageFullScreenHandler->showEscBtnL();
  2186          StaticObjectsContainer::instance()->setFullScreenMode(true);
  2314          StaticObjectsContainer::instance()->setFullScreenMode(true);
  2187      }
  2315      }
  2188 }
  2316 }
  2189 
  2317 
  2190 //-------------------------------------------------------------------------------
  2318 //-------------------------------------------------------------------------------
       
  2319 // WebView::LeaveFullscreenBrowsingL
  2191 //-------------------------------------------------------------------------------
  2320 //-------------------------------------------------------------------------------
  2192 void WebView::LeaveFullscreenBrowsingL()
  2321 void WebView::LeaveFullscreenBrowsingL()
  2193 {
  2322 {
  2194     if (m_pageFullScreenHandler) {
  2323     if (m_pageFullScreenHandler) {
  2195         m_pageFullScreenHandler->hideEscBtnL();
  2324         m_pageFullScreenHandler->hideEscBtnL();
  2196         StaticObjectsContainer::instance()->setFullScreenMode(false);
  2325         StaticObjectsContainer::instance()->setFullScreenMode(false);
  2197     }
  2326     }
  2198 }
  2327 }
  2199 
  2328 
  2200 //-------------------------------------------------------------------------------
  2329 //-------------------------------------------------------------------------------
       
  2330 // WebView::notifyFullscreenModeChangeL
  2201 //-------------------------------------------------------------------------------
  2331 //-------------------------------------------------------------------------------
  2202 void WebView::notifyFullscreenModeChangeL(bool mode)
  2332 void WebView::notifyFullscreenModeChangeL(bool mode)
  2203 {
  2333 {
  2204     if (m_pageFullScreenHandler )
  2334     if (m_pageFullScreenHandler )
  2205          m_brctl->reportStateChanged(TBrCtlDefs::EStateFullscreenBrowsing, mode );
  2335          m_brctl->reportStateChanged(TBrCtlDefs::EStateFullscreenBrowsing, mode );
  2206 }
  2336 }
  2207 
  2337 
  2208 //-------------------------------------------------------------------------------
  2338 //-------------------------------------------------------------------------------
       
  2339 // WebView::checkForZoomChange
  2209 //-------------------------------------------------------------------------------
  2340 //-------------------------------------------------------------------------------
  2210 void WebView::checkForZoomChange()
  2341 void WebView::checkForZoomChange()
  2211 {
  2342 {
  2212      zoomLevelChanged(m_currentZoomLevel);
  2343      zoomLevelChanged(m_currentZoomLevel);
  2213 }
  2344 }
  2257 }
  2388 }
  2258 void WebView::setRedirectWithLockedHistory(bool value) {
  2389 void WebView::setRedirectWithLockedHistory(bool value) {
  2259      m_redirectWithLockedHistory = value;
  2390      m_redirectWithLockedHistory = value;
  2260 }
  2391 }
  2261 //-------------------------------------------------------------------------------
  2392 //-------------------------------------------------------------------------------
       
  2393 // WebView::notifyPlugins
  2262 // Webview notifies plugins to handle play/pause of .swf files when user switches to menu/another application
  2394 // Webview notifies plugins to handle play/pause of .swf files when user switches to menu/another application
  2263 //-------------------------------------------------------------------------------
  2395 //-------------------------------------------------------------------------------
  2264 void WebView::notifyPlugins(TBool focus)
  2396 void WebView::notifyPlugins(TBool focus)
  2265 {
  2397 {
  2266     Frame* coreFrame =core(mainFrame());
  2398     Frame* coreFrame =core(mainFrame());
  2312   m_allowRepaints = on;
  2444   m_allowRepaints = on;
  2313 }
  2445 }
  2314 
  2446 
  2315 
  2447 
  2316 //-----------------------------------------------------------------------------
  2448 //-----------------------------------------------------------------------------
  2317 // setZoomCursorPosition(TBool)
  2449 // WebView::setZoomCursorPosition
  2318 // Set the cursor position while zooming, this is only for non-touch device
  2450 // Set the cursor position while zooming, this is only for non-touch device
  2319 //-----------------------------------------------------------------------------
  2451 //-----------------------------------------------------------------------------
  2320 void WebView::setZoomCursorPosition(TBool isZoomIn)
  2452 void WebView::setZoomCursorPosition(TBool isZoomIn)
  2321 {
  2453 {
  2322     int zoomLevel = m_currentZoomLevel;
  2454     int zoomLevel = m_currentZoomLevel;
  2357     mainFrame()->notifyPluginsOfScrolling();
  2489     mainFrame()->notifyPluginsOfScrolling();
  2358 }
  2490 }
  2359 
  2491 
  2360 
  2492 
  2361 // ---------------------------------------------------------------------------
  2493 // ---------------------------------------------------------------------------
  2362 // FindCurrentZoomIndex
  2494 // WebView::FindCurrentZoomIndex
  2363 // ---------------------------------------------------------------------------
  2495 // ---------------------------------------------------------------------------
  2364 TInt WebView::FindCurrentZoomIndex(TInt aCurrentZoomLevel)
  2496 TInt WebView::FindCurrentZoomIndex(TInt aCurrentZoomLevel)
  2365 {
  2497 {
  2366     TInt aIndex = -1;
  2498     TInt aIndex = -1;
  2367 
  2499 
  2379 TInt WebView::getWidgetId()
  2511 TInt WebView::getWidgetId()
  2380 {
  2512 {
  2381     return m_widgetextension ? m_widgetextension->GetWidgetId():0;
  2513     return m_widgetextension ? m_widgetextension->GetWidgetId():0;
  2382 }
  2514 }
  2383 
  2515 
  2384 void WebView::setShowCursor(TBool showCursor) 
  2516 void WebView::setShowCursor(TBool showCursor)
  2385 {
  2517 {
  2386     m_showCursor = showCursor;
  2518     m_showCursor = showCursor;
  2387     StaticObjectsContainer::instance()->webCursor()->setCursorVisible(showCursor);
  2519     StaticObjectsContainer::instance()->webCursor()->setCursorVisible(showCursor);
  2388 }
  2520 }
  2389 
  2521