webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp
branchRCL_3
changeset 94 919f36ff910f
parent 93 79859ed3eea9
equal deleted inserted replaced
93:79859ed3eea9 94:919f36ff910f
    25 #include "Frame.h"
    25 #include "Frame.h"
    26 #include "HitTestRequest.h"
    26 #include "HitTestRequest.h"
    27 #include "HitTestResult.h"
    27 #include "HitTestResult.h"
    28 #include "HTMLNames.h"
    28 #include "HTMLNames.h"
    29 #include "FrameTree.h"
    29 #include "FrameTree.h"
    30 #include "BrCtlDefs.h"
    30 #include <brctldefs.h>
    31 #include "WebCursor.h"
    31 #include "WebCursor.h"
    32 #include "StaticObjectsContainer.h"
    32 #include "StaticObjectsContainer.h"
    33 #include "Page.h"
    33 #include "Page.h"
    34 #include "WebView.h"
    34 #include "WebView.h"
    35 #include "WebFrame.h"
    35 #include "WebFrame.h"
    36 #include "WebFrameView.h"
    36 #include "WebFrameView.h"
    37 #include <wtf/RefPtr.h>
    37 #include <wtf/RefPtr.h>
    38 #include "EventHandler.h"
    38 #include "EventHandler.h"
    39 #include "WebKitLogger.h"
    39 #include "webkitlogger.h"
    40 #include "FocusController.h"
    40 #include "FocusController.h"
    41 #include "RenderListBox.h"
    41 #include "RenderListBox.h"
    42 #include "HTMLSelectElement.h"
    42 #include "HTMLSelectElement.h"
    43 #include "HTMLInputElement.h"
    43 #include "HTMLInputElement.h"
    44 
    44 
    68     m_node = NULL;
    68     m_node = NULL;
    69 }
    69 }
    70 
    70 
    71 void WebTabbedNavigation::initializeForPage()
    71 void WebTabbedNavigation::initializeForPage()
    72 {
    72 {
    73     if (!m_initializedForPage) {
    73     if (!m_initializedForPage && m_webView->IsVisible()) {
    74         if (navigate(0, 1)) {
    74         if (navigate(0, 1)) {
    75             m_initializedForPage = true;
    75             m_initializedForPage = true;
    76             m_firstNavigationOnPage = false;
    76             m_firstNavigationOnPage = false;
    77         }
    77         }
    78     }
    78     }
   137             if (elemVisibleRect.Intersects(m_webView->Rect())) {
   137             if (elemVisibleRect.Intersects(m_webView->Rect())) {
   138                  
   138                  
   139                 elemVisibleRect.Intersection(m_webView->Rect());
   139                 elemVisibleRect.Intersection(m_webView->Rect());
   140                 if (horizontalDir == -1) {
   140                 if (horizontalDir == -1) {
   141                     focusPosition.iX = elemVisibleRect.iTl.iX;
   141                     focusPosition.iX = elemVisibleRect.iTl.iX;
       
   142                     focusPosition.iY = elemVisibleRect.iTl.iY;
   142                 }
   143                 }
   143                 else if (horizontalDir == 1) {
   144                 else if (horizontalDir == 1) {
   144                     focusPosition.iX = elemVisibleRect.iBr.iX;
   145                     focusPosition.iX = elemVisibleRect.iBr.iX;
       
   146                     focusPosition.iY = elemVisibleRect.iTl.iY;
   145                 }
   147                 }
   146                 
   148                 
   147                 if (verticalDir == -1) {
   149                 if (verticalDir == -1) {
   148                     focusPosition.iY = elemVisibleRect.iTl.iY;
   150                     focusPosition.iY = elemVisibleRect.iTl.iY;
       
   151                     focusPosition.iX = elemVisibleRect.iTl.iX;
   149                 }
   152                 }
   150                 else if (verticalDir == 1) {
   153                 else if (verticalDir == 1) {
   151                     focusPosition.iY = elemVisibleRect.iBr.iY;
   154                     focusPosition.iY = elemVisibleRect.iBr.iY;
       
   155                     focusPosition.iX = elemVisibleRect.iTl.iX;
   152                 }
   156                 }
   153                 
   157                 
   154                 if ((verticalDir == 0) && (horizontalDir == 0)) {
   158                 if ((verticalDir == 0) && (horizontalDir == 0)) {
   155                     focusPosition = elemVisibleRect.Center();
   159                     focusPosition = elemVisibleRect.Center();
   156                 }
   160                 }
   427     Math::Pow(y, (m_focusPosition.iY - point.iY), 2.0);
   431     Math::Pow(y, (m_focusPosition.iY - point.iY), 2.0);
   428     Math::Sqrt(euclidianDistance, x + y);
   432     Math::Sqrt(euclidianDistance, x + y);
   429     sameAxisDist = horizontalDir * (point.iX - m_focusPosition.iX) + verticalDir * (point.iY - m_focusPosition.iY);
   433     sameAxisDist = horizontalDir * (point.iX - m_focusPosition.iX) + verticalDir * (point.iY - m_focusPosition.iY);
   430     otherAxisDist = (horizontalDir) ? (point.iY - m_focusPosition.iY) : (point.iX - m_focusPosition.iX) ;
   434     otherAxisDist = (horizontalDir) ? (point.iY - m_focusPosition.iY) : (point.iX - m_focusPosition.iX) ;
   431     otherAxisDist = (otherAxisDist < 0 ) ? (otherAxisDist * -1) : otherAxisDist;
   435     otherAxisDist = (otherAxisDist < 0 ) ? (otherAxisDist * -1) : otherAxisDist;
   432     if (horizontalDir) { // horizontal
   436     if (verticalDir) { // vertical 
   433         if (rect.iBr.iY < m_selectedElementRect.iTl.iY || rect.iTl.iY > m_selectedElementRect.iBr.iY) {
   437         if (rect.iBr.iY < m_selectedElementRect.iTl.iY || rect.iTl.iY > m_selectedElementRect.iBr.iY) {
   434             overlap = 0;
   438             overlap = 0;
   435         }
   439         }
   436         else {
   440         else {
   437             int top = max(m_selectedElementRect.iTl.iY, rect.iTl.iY);
   441             int top = max(m_selectedElementRect.iTl.iY, rect.iTl.iY);
   441                 euclidianDistance = (euclidianDistance * rect.Height()) / m_selectedElementRect.Height();
   445                 euclidianDistance = (euclidianDistance * rect.Height()) / m_selectedElementRect.Height();
   442                 otherAxisDist = 0;
   446                 otherAxisDist = 0;
   443             }
   447             }
   444         }
   448         }
   445     }
   449     }
   446     else { // vertical    
   450     else { // horizontal   
   447         if (rect.iBr.iX < m_selectedElementRect.iTl.iX || rect.iTl.iX > m_selectedElementRect.iBr.iX) {
   451         if (rect.iBr.iX < m_selectedElementRect.iTl.iX || rect.iTl.iX > m_selectedElementRect.iBr.iX) {
   448             overlap = 0;
   452             overlap = 0;
   449         }
   453         }
   450         else {
   454         else {
   451             int top = max(m_selectedElementRect.iTl.iX, rect.iTl.iX);
   455             int top = max(m_selectedElementRect.iTl.iX, rect.iTl.iX);