webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp
changeset 5 10e98eab6f85
parent 1 7c90e6132015
child 10 a359256acfc6
equal deleted inserted replaced
1:7c90e6132015 5:10e98eab6f85
   115 // WebCursor::~WebCursor
   115 // WebCursor::~WebCursor
   116 // Deconstructor.
   116 // Deconstructor.
   117 // -----------------------------------------------------------------------------
   117 // -----------------------------------------------------------------------------
   118 WebCursor::~WebCursor()
   118 WebCursor::~WebCursor()
   119     {
   119     {
   120     m_sprite.Close();
   120     delete m_sprite;
   121     delete m_transarrowmask;
   121     delete m_transarrowmask;
       
   122     if ( m_transtimer ) 
       
   123         m_transtimer->Cancel();
   122     delete m_transtimer;
   124     delete m_transtimer;
   123     }
   125     }
   124 
   126 
   125 // -----------------------------------------------------------------------------
   127 // -----------------------------------------------------------------------------
   126 // WebCursor::ConstructL
   128 // WebCursor::ConstructL
   137 void WebCursor::setCurrentView(WebView& view)
   139 void WebCursor::setCurrentView(WebView& view)
   138     {
   140     {
   139     if (!m_view)
   141     if (!m_view)
   140     {
   142     {
   141         m_view = &view;
   143         m_view = &view;
   142         constructSprite();
   144         TRAP_IGNORE( constructSpriteL() );
   143     }
   145     }
   144     m_view = &view;
   146     m_view = &view;
   145     setOpaqueUntil(KTransparencyTime);
   147     setOpaqueUntil(KTransparencyTime);
   146     m_transcount = 0;
   148     m_transcount = 0;
   147     }
   149     }
   148 
   150 
   149 // -----------------------------------------------------------------------------
   151 // -----------------------------------------------------------------------------
   150 // WebCursor::constructSprite
   152 // WebCursor::constructSpriteL
   151 // -----------------------------------------------------------------------------
   153 // -----------------------------------------------------------------------------
   152 void WebCursor::constructSprite()
   154 void WebCursor::constructSpriteL()
   153     {
   155     {
   154 
   156 
   155     //tot:fixme
   157     //tot:fixme
   156     m_arrow = StaticObjectsContainer::instance()->webCannedImages()->getImage(WebCannedImages::EImageArrowBitmap);
   158     m_arrow = StaticObjectsContainer::instance()->webCannedImages()->getImage(WebCannedImages::EImageArrowBitmap);
   157     m_hand = StaticObjectsContainer::instance()->webCannedImages()->getImage(WebCannedImages::EImageFingerBitmap);
   159     m_hand = StaticObjectsContainer::instance()->webCannedImages()->getImage(WebCannedImages::EImageFingerBitmap);
   178         }
   180         }
   179     m_transarrowmask->UnlockHeap();
   181     m_transarrowmask->UnlockHeap();
   180     delete gc;
   182     delete gc;
   181     CleanupStack::PopAndDestroy();
   183     CleanupStack::PopAndDestroy();
   182     /////////////////////////////////
   184     /////////////////////////////////
   183     m_sprite = RWsSprite(m_view->ControlEnv()->WsSession());
   185  
   184     RWindowTreeNode *window =  (RDrawableWindow* )m_view->brCtl()->CCoeControlParent()->DrawableWindow();
   186     CCoeControl* parent = static_cast<CCoeControl*>(m_view);
   185     m_sprite.Construct(*window,TPoint(KInitialOffset,KInitialOffset),ESpriteNoChildClip);
   187     TPoint pos = TPoint(KInitialOffset,KInitialOffset);
   186 
   188     m_sprite = CWebSprite::NewL(parent, pos, m_arrow.m_img, m_arrow.m_msk, ETrue);
   187     TSpriteMember spriteMem;
       
   188     spriteMem.iBitmap = 0;
       
   189     spriteMem.iMaskBitmap = 0;
       
   190     spriteMem.iInvertMask = ETrue;
       
   191 
       
   192     m_sprite.AppendMember(spriteMem);
       
   193     m_sprite.Activate();
       
   194     }
   189     }
   195 
   190 
   196 // -----------------------------------------------------------------------------
   191 // -----------------------------------------------------------------------------
   197 // WebCursor::setCursor
   192 // WebCursor::setCursor
   198 // -----------------------------------------------------------------------------
   193 // -----------------------------------------------------------------------------
   199 void WebCursor::setCursor(CursorTypes type)
   194 void WebCursor::setCursor(CursorTypes type)
   200 {
   195 {
   201     m_sprite.SetPosition( m_pos );
   196     
   202     m_type = type;
   197     m_type = type;
   203     if (m_visible && !(m_view->brCtl()->settings()->getTabbedNavigation())) {
   198     if (m_visible && (m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeCursor)) {
   204         TSpriteMember spriteMem;
   199         CFbsBitmap*  img = NULL;
       
   200         CFbsBitmap*  msk = NULL;
   205         switch( type )
   201         switch( type )
   206             {
   202             {
   207             case PointerCursor:
   203             case PointerCursor:
   208             default:
   204             default:
   209                 {
   205                 {
   210                 spriteMem.iBitmap = m_waiton ? m_wait.m_img : m_arrow.m_img;
   206                 img = m_waiton ? m_wait.m_img : m_arrow.m_img;
   211                 spriteMem.iMaskBitmap = m_waiton ? m_wait.m_img :
   207                 msk = m_waiton ? m_wait.m_img :
   212                     (m_transparent && m_transcount > KTransparencyMoveThreshold ? m_transarrowmask : m_arrow.m_msk);
   208                     (m_transparent && m_transcount > KTransparencyMoveThreshold ? m_transarrowmask : m_arrow.m_msk);
   213                 break;
   209                 break;
   214                 }
   210                 }
   215            case HandCursor:
   211            case HandCursor:
   216                 {
   212                 {
   217                 spriteMem.iBitmap = m_hand.m_img;
   213                 img = m_hand.m_img;
   218                 spriteMem.iMaskBitmap = m_hand.m_msk;
   214                 msk = m_hand.m_msk;
   219                 break;
   215                 break;
   220                 }
   216                 }
   221            case IBeamCursor:
   217            case IBeamCursor:
   222                 {
   218                 {
   223                /*tot:fixme if ( m_view->FocusedElementType() == TBrCtlDefs::EElementSmartLinkTel )
   219                /*tot:fixme if ( m_view->FocusedElementType() == TBrCtlDefs::EElementSmartLinkTel )
   230                     spriteMem.iBitmap = iSmartLinkEmailImage.m_img;
   226                     spriteMem.iBitmap = iSmartLinkEmailImage.m_img;
   231                     spriteMem.iMaskBitmap = iSmartLinkEmailImage.m_msk;
   227                     spriteMem.iMaskBitmap = iSmartLinkEmailImage.m_msk;
   232                     }
   228                     }
   233                 else*/
   229                 else*/
   234                     {
   230                     {
   235                     spriteMem.iBitmap = m_ibeam.m_img;
   231                     img = m_ibeam.m_img;
   236                     spriteMem.iMaskBitmap = m_ibeam.m_msk;
   232                     msk = m_ibeam.m_msk;
   237                     }
   233                     }
   238                 break;
   234                 break;
   239                 }
   235                 }
   240            case SelectMultiCursor:
   236            case SelectMultiCursor:
   241                {
   237                {
   242                     spriteMem.iBitmap = m_selectMulti.m_img;
   238                     img = m_selectMulti.m_img;
   243                     spriteMem.iMaskBitmap = m_selectMulti.m_msk;
   239                     msk = m_selectMulti.m_msk;
   244                     break;
   240                     break;
   245                }
   241                }
   246             }
   242             }
   247         spriteMem.iOffset = KCursorOffset;
   243         TPoint pos = m_pos + KCursorOffset;
   248         spriteMem.iInvertMask = ETrue;
   244         
   249         m_sprite.UpdateMember( 0, spriteMem );
   245         m_sprite->Update(pos, img, msk);
   250     } else {
   246         
   251         TSpriteMember spriteMem;
   247     } 
   252         spriteMem.iBitmap = 0;
   248     else {
   253         spriteMem.iMaskBitmap = 0;
   249         m_sprite->Hide();
   254         spriteMem.iInvertMask = ETrue;
       
   255         m_sprite.UpdateMember( 0, spriteMem );
       
   256     }
   250     }
   257 }
   251 }
   258 
   252 
   259 // -----------------------------------------------------------------------------
   253 // -----------------------------------------------------------------------------
   260 // WebCursor::cursorUpdate
   254 // WebCursor::cursorUpdate
   262 void WebCursor::cursorUpdate(bool visible)
   256 void WebCursor::cursorUpdate(bool visible)
   263 {
   257 {
   264     if (!m_view || !m_view->brCtl()->settings())
   258     if (!m_view || !m_view->brCtl()->settings())
   265         return;
   259         return;
   266     if ( m_view->showCursor() ) {
   260     if ( m_view->showCursor() ) {
   267         m_visible = visible && (!m_view->brCtl()->settings()->getTabbedNavigation() || m_view->focusedElementType() == TBrCtlDefs::EElementSelectMultiBox); // check for tabbedNavigation here because it is called from so many places.
   261         m_visible = visible && ((m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeCursor)|| m_view->focusedElementType() == TBrCtlDefs::EElementSelectMultiBox); // check for tabbedNavigation here because it is called from so many places.
   268     }
   262     }
   269 
   263 
   270     resetTransparency();
   264     resetTransparency();
   271     CursorTypes type = PointerCursor;
   265     CursorTypes type = PointerCursor;
   272     TBrCtlDefs::TBrCtlElementType elType = m_view->focusedElementType();
   266     TBrCtlDefs::TBrCtlElementType elType = m_view->focusedElementType();
   277                   || elType == TBrCtlDefs::EElementBrokenImage )
   271                   || elType == TBrCtlDefs::EElementBrokenImage )
   278             type = PointerCursor;
   272             type = PointerCursor;
   279         else if (    elType == TBrCtlDefs::EElementSmartLinkTel
   273         else if (    elType == TBrCtlDefs::EElementSmartLinkTel
   280                   || elType == TBrCtlDefs::EElementSmartLinkEmail )
   274                   || elType == TBrCtlDefs::EElementSmartLinkEmail )
   281             type = IBeamCursor;
   275             type = IBeamCursor;
   282         else if (    elType == TBrCtlDefs::EElementSelectMultiBox && m_view->brCtl()->settings()->getTabbedNavigation() )
   276         else if (    elType == TBrCtlDefs::EElementSelectMultiBox && m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed)
   283             type = SelectMultiCursor;
   277             type = SelectMultiCursor;
   284         else
   278         else
   285             type = HandCursor;
   279             type = HandCursor;
   286     }
   280     }
   287 
   281 
   711 // WebCursor::updatePositionAndElemType
   705 // WebCursor::updatePositionAndElemType
   712 // -----------------------------------------------------------------------------
   706 // -----------------------------------------------------------------------------
   713 void WebCursor::updatePositionAndElemType(const TPoint& pt)
   707 void WebCursor::updatePositionAndElemType(const TPoint& pt)
   714 {
   708 {
   715     m_pos = pt;
   709     m_pos = pt;
   716     m_sprite.SetPosition(pt);
   710     m_sprite->SetPos(pt);
   717     WebFrame* frame = getFrameAtPoint(pt);
   711     WebFrame* frame = getFrameAtPoint(pt);
   718     TBrCtlDefs::TBrCtlElementType elType;
   712     TBrCtlDefs::TBrCtlElementType elType;
   719     TRect r;
   713     TRect r;
   720     TPoint point(frame->frameView()->viewCoordsInFrameCoords(m_pos));
   714     TPoint point(frame->frameView()->viewCoordsInFrameCoords(m_pos));
   721     if (m_view && navigableNodeUnderCursor(*frame, point, elType, r)) {
   715     if (m_view && navigableNodeUnderCursor(*frame, point, elType, r)) {