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)) { |