34 |
34 |
35 _LIT8(KViewportHeight, "viewport-height"); |
35 _LIT8(KViewportHeight, "viewport-height"); |
36 _LIT8(KViewportWidth, "viewport-width"); |
36 _LIT8(KViewportWidth, "viewport-width"); |
37 _LIT8(KViewportTop, "viewport-top"); |
37 _LIT8(KViewportTop, "viewport-top"); |
38 _LIT8(KViewportLeft, "viewport-left"); |
38 _LIT8(KViewportLeft, "viewport-left"); |
|
39 _LIT8(KScrollDirection, "scroll-direction"); |
|
40 _LIT8(KHorizontal, "horizontal"); |
|
41 |
|
42 const TInt EVertical( 0 ); |
|
43 const TInt EHorizontal( 1 ); |
39 |
44 |
40 // ============================ MEMBER FUNCTIONS =============================== |
45 // ============================ MEMBER FUNCTIONS =============================== |
41 |
46 |
42 // ----------------------------------------------------------------------------- |
47 // ----------------------------------------------------------------------------- |
43 // CXnScrollableControlAdapter::NewL |
48 // CXnScrollableControlAdapter::NewL |
88 SetControlContext( this ); |
93 SetControlContext( this ); |
89 SetHitTest( this ); |
94 SetHitTest( this ); |
90 iUiEngine = iNode.Node().UiEngine(); |
95 iUiEngine = iNode.Node().UiEngine(); |
91 |
96 |
92 iNode.Node().SetScrollableControl( this ); |
97 iNode.Node().SetScrollableControl( this ); |
|
98 |
|
99 // Default |
|
100 iDirection = EVertical; |
|
101 |
|
102 CXnProperty* prop( iNode.GetPropertyL( KScrollDirection ) ); |
|
103 |
|
104 if ( prop && prop->StringValue() == KHorizontal ) |
|
105 { |
|
106 iDirection = EHorizontal; |
|
107 } |
93 } |
108 } |
94 |
109 |
95 // ----------------------------------------------------------------------------- |
110 // ----------------------------------------------------------------------------- |
96 // CXnScrollableControlAdapter::HandlePointerEventL |
111 // CXnScrollableControlAdapter::HandlePointerEventL |
97 // |
112 // |
116 iPreviousPosition = iCurrentPosition; |
133 iPreviousPosition = iCurrentPosition; |
117 iStylusPosition = stylusPos; |
134 iStylusPosition = stylusPos; |
118 } |
135 } |
119 break; |
136 break; |
120 case TPointerEvent::EButton1Up: |
137 case TPointerEvent::EButton1Up: |
121 { |
138 { |
122 TInt distance = iStartPosition.iY - stylusPos.iY; |
139 TInt distanceY( iStartPosition.iY - stylusPos.iY ); |
123 TPoint drag( 0, distance ); |
140 TInt distanceX( iStartPosition.iX - stylusPos.iX ); |
124 iPhysics->StartPhysics( drag, iStartTime ); |
141 |
|
142 TPoint drag( distanceX, distanceY ); |
|
143 iPhysics->StartPhysics( drag, iStartTime ); |
125 } |
144 } |
126 break; |
145 break; |
127 case TPointerEvent::EDrag: |
146 case TPointerEvent::EDrag: |
128 { |
147 { |
129 TPoint distanceFromStart( iStartPosition - stylusPos ); |
148 TPoint distanceFromStart( iStartPosition - stylusPos ); |
130 |
149 |
131 if( Abs( distanceFromStart.iY ) > KOffset ) |
150 if( ( Abs( distanceFromStart.iY ) > KOffset && iDirection == EVertical ) || |
|
151 ( Abs( distanceFromStart.iX ) > KOffset && iDirection == EHorizontal ) ) |
132 { |
152 { |
133 CXnNode* focused( iUiEngine->FocusedNode() ); |
153 CXnNode* focused( iUiEngine->FocusedNode() ); |
134 |
154 |
135 if ( focused ) |
155 if ( focused ) |
136 { |
156 { |
140 focused->HideTooltipsL(); |
160 focused->HideTooltipsL(); |
141 } |
161 } |
142 } |
162 } |
143 |
163 |
144 TInt deltaY( iStylusPosition.iY - stylusPos.iY ); |
164 TInt deltaY( iStylusPosition.iY - stylusPos.iY ); |
|
165 TInt deltaX( iStylusPosition.iX - stylusPos.iX ); |
|
166 |
145 iStylusPosition = stylusPos; |
167 iStylusPosition = stylusPos; |
146 TPoint deltaPoint( 0, deltaY ); |
168 |
|
169 TPoint deltaPoint( deltaX, deltaY ); |
|
170 |
147 iPhysics->RegisterPanningPosition( deltaPoint ); |
171 iPhysics->RegisterPanningPosition( deltaPoint ); |
148 } |
172 } |
149 break; |
173 break; |
150 default: |
174 default: |
151 break; |
175 break; |
159 // |
183 // |
160 // ----------------------------------------------------------------------------- |
184 // ----------------------------------------------------------------------------- |
161 // |
185 // |
162 void CXnScrollableControlAdapter::Draw( const TRect& aRect ) const |
186 void CXnScrollableControlAdapter::Draw( const TRect& aRect ) const |
163 { |
187 { |
164 CXnControlAdapter::Draw( aRect ); |
188 CXnControlAdapter::Draw( aRect ); |
165 } |
189 } |
166 |
190 |
167 // ----------------------------------------------------------------------------- |
191 // ----------------------------------------------------------------------------- |
168 // CXnScrollableControlAdapter::SizeChanged |
192 // CXnScrollableControlAdapter::SizeChanged |
169 // |
193 // |
246 // CXnScrollableControlAdapter::ShowItem |
270 // CXnScrollableControlAdapter::ShowItem |
247 // |
271 // |
248 // ----------------------------------------------------------------------------- |
272 // ----------------------------------------------------------------------------- |
249 void CXnScrollableControlAdapter::ShowItem( CXnNode& aNode ) |
273 void CXnScrollableControlAdapter::ShowItem( CXnNode& aNode ) |
250 { |
274 { |
251 TRect rect = aNode.MarginRect(); |
275 TRect rect( aNode.MarginRect() ); |
|
276 |
252 if( !iViewPort.Contains( rect.iTl ) || !iViewPort.Contains( rect.iBr ) ) |
277 if( !iViewPort.Contains( rect.iTl ) || !iViewPort.Contains( rect.iBr ) ) |
253 { |
278 { |
254 TInt delta( 0 ); |
279 if ( iDirection == EVertical ) |
255 if( rect.iTl.iY < iViewPort.iTl.iY ) |
280 { |
|
281 TInt delta( 0 ); |
|
282 |
|
283 if( rect.iTl.iY < iViewPort.iTl.iY ) |
|
284 { |
|
285 delta = rect.iTl.iY - iViewPort.iTl.iY; |
|
286 } |
|
287 else if( rect.iBr.iY > iViewPort.iBr.iY ) |
|
288 { |
|
289 delta = rect.iBr.iY - iViewPort.iBr.iY; |
|
290 } |
|
291 |
|
292 TPoint newPosition( iPreviousPosition + TPoint( 0, delta ) ); |
|
293 |
|
294 ViewPositionChanged( newPosition, ETrue, 0 ); |
|
295 } |
|
296 else |
256 { |
297 { |
257 delta = rect.iTl.iY - iViewPort.iTl.iY; |
298 TInt delta( 0 ); |
|
299 |
|
300 if( rect.iTl.iX < iViewPort.iTl.iX ) |
|
301 { |
|
302 delta = rect.iTl.iX - iViewPort.iTl.iX; |
|
303 } |
|
304 else if( rect.iBr.iX > iViewPort.iBr.iX ) |
|
305 { |
|
306 delta = rect.iBr.iX - iViewPort.iBr.iX; |
|
307 } |
|
308 |
|
309 TPoint newPosition( iPreviousPosition + TPoint( delta, 0 ) ); |
|
310 |
|
311 ViewPositionChanged( newPosition, ETrue, 0 ); |
258 } |
312 } |
259 else if( rect.iBr.iY > iViewPort.iBr.iY ) |
|
260 { |
|
261 delta = rect.iBr.iY - iViewPort.iBr.iY; |
|
262 } |
|
263 TPoint newPosition = iPreviousPosition + TPoint( 0, delta ); |
|
264 ViewPositionChanged( newPosition, ETrue, 0 ); |
|
265 } |
313 } |
266 } |
314 } |
267 |
315 |
268 // ----------------------------------------------------------------------------- |
316 // ----------------------------------------------------------------------------- |
269 // CXnScrollableControlAdapter::LayoutChangedL |
317 // CXnScrollableControlAdapter::LayoutChangedL |
284 // --------------------------------------------------------------------------- |
332 // --------------------------------------------------------------------------- |
285 // |
333 // |
286 void CXnScrollableControlAdapter::ViewPositionChanged( |
334 void CXnScrollableControlAdapter::ViewPositionChanged( |
287 const TPoint& aNewPosition, TBool aDrawNow, TUint /*aFlags*/ ) |
335 const TPoint& aNewPosition, TBool aDrawNow, TUint /*aFlags*/ ) |
288 { |
336 { |
289 TPoint diff = TPoint( 0, aNewPosition.iY - iPreviousPosition.iY ); |
337 TPoint diff; |
|
338 |
|
339 if ( iDirection == EVertical ) |
|
340 { |
|
341 diff = TPoint( 0, aNewPosition.iY - iPreviousPosition.iY ); |
|
342 } |
|
343 else |
|
344 { |
|
345 diff = TPoint( aNewPosition.iX - iPreviousPosition.iX, 0 ); |
|
346 } |
|
347 |
290 iPreviousPosition = aNewPosition; |
348 iPreviousPosition = aNewPosition; |
291 iCurrentPosition += diff; |
349 iCurrentPosition += diff; |
292 TPoint tmpPos = iNode.Control()->Position(); |
350 TPoint tmpPos = iNode.Control()->Position(); |
293 tmpPos -= diff; |
351 tmpPos -= diff; |
294 iNode.Control()->SetPosition( tmpPos ); |
352 iNode.Control()->SetPosition( tmpPos ); |
339 if( !iPhysics ) |
397 if( !iPhysics ) |
340 { |
398 { |
341 return; |
399 return; |
342 } |
400 } |
343 TSize viewPortSize = iViewPort.Size(); |
401 TSize viewPortSize = iViewPort.Size(); |
344 TSize totalSize( iNode.MarginRect().Size() ); |
402 TSize totalSize( iNode.Rect().Size() ); |
345 iPhysics->InitPhysicsL( totalSize, viewPortSize, EFalse ); |
403 |
346 iCurrentPosition = TPoint( 0, viewPortSize.iHeight / 2 ); |
404 if ( iDirection == EVertical ) |
|
405 { |
|
406 iPhysics->InitPhysicsL( totalSize, viewPortSize, EFalse ); |
|
407 } |
|
408 else |
|
409 { |
|
410 iPhysics->InitPhysicsL( totalSize, viewPortSize, ETrue ); |
|
411 } |
|
412 |
|
413 |
|
414 iCurrentPosition = |
|
415 TPoint( viewPortSize.iWidth / 2, viewPortSize.iHeight / 2 ); |
|
416 |
347 iPreviousPosition = iStartViewPosition = iCurrentPosition; |
417 iPreviousPosition = iStartViewPosition = iCurrentPosition; |
348 } |
418 } |
349 |
419 |
350 // --------------------------------------------------------------------------- |
420 // --------------------------------------------------------------------------- |
351 // CXnScrollableControlAdapter::ReadPropertiesL |
421 // CXnScrollableControlAdapter::ReadPropertiesL |
356 TInt width( 0 ); |
426 TInt width( 0 ); |
357 TInt height( 0 ); |
427 TInt height( 0 ); |
358 TInt top( 0 ); |
428 TInt top( 0 ); |
359 TInt left( 0 ); |
429 TInt left( 0 ); |
360 |
430 |
|
431 CXnNode& node( iNode.Node() ); |
|
432 |
361 // Width |
433 // Width |
362 CXnProperty* prop = iNode.GetPropertyL( KViewportWidth ); |
434 CXnProperty* prop = iNode.GetPropertyL( KViewportWidth ); |
363 if( prop ) |
435 if( prop ) |
364 { |
436 { |
365 width = iUiEngine->HorizontalPixelValueL( |
437 width = iUiEngine->HorizontalPixelValueL( |
366 prop, iNode.MarginRect().Width() ); |
438 prop, iNode.Rect().Width() ); |
367 } |
439 } |
368 if( width == 0 ) |
440 if( width == 0 ) |
369 { |
441 { |
370 width = iNode.MarginRect().Width(); |
442 width = node.Parent()->Rect().Width(); |
371 } |
443 } |
372 |
444 |
373 // Height |
445 // Height |
374 prop = iNode.GetPropertyL( KViewportHeight ); |
446 prop = iNode.GetPropertyL( KViewportHeight ); |
375 if( prop ) |
447 if( prop ) |
376 { |
448 { |
377 height = iUiEngine->VerticalPixelValueL( |
449 height = iUiEngine->VerticalPixelValueL( |
378 prop, iNode.MarginRect().Height() ); |
450 prop, iNode.Rect().Height() ); |
379 } |
451 } |
380 if( height == 0 ) |
452 if( height == 0 ) |
381 { |
453 { |
382 height = iNode.MarginRect().Height(); |
454 height = node.Parent()->Rect().Height(); |
383 } |
455 } |
384 |
456 |
385 // Top |
457 // Top |
386 prop = iNode.GetPropertyL( KViewportTop ); |
458 prop = iNode.GetPropertyL( KViewportTop ); |
387 if( prop ) |
459 if( prop ) |
388 { |
460 { |
389 top = iUiEngine->VerticalPixelValueL( |
461 top = iUiEngine->VerticalPixelValueL( |
390 prop, iNode.MarginRect().Height() ); |
462 prop, iNode.Rect().Height() ); |
391 } |
463 } |
392 |
464 |
393 // Left |
465 // Left |
394 prop = iNode.GetPropertyL( KViewportLeft ); |
466 prop = iNode.GetPropertyL( KViewportLeft ); |
395 if( prop ) |
467 if( prop ) |
396 { |
468 { |
397 left = iUiEngine->HorizontalPixelValueL( |
469 left = iUiEngine->HorizontalPixelValueL( |
398 prop, iNode.MarginRect().Width() ); |
470 prop, iNode.Rect().Width() ); |
399 } |
471 } |
400 |
472 |
401 iViewPort = TRect( iNode.MarginRect().iTl, TSize( width, height ) ); |
473 iViewPort = TRect( iNode.Rect().iTl, TSize( width, height ) ); |
402 iViewPort.Move( left, top ); |
474 iViewPort.Move( left, top ); |
403 } |
475 } |
404 |
476 |
405 // End of File |
477 // End of File |