idlehomescreen/xmluirendering/uiengine/src/xnscrollablecontroladapter.cpp
changeset 1 5315654608de
parent 0 f72a12da539e
equal deleted inserted replaced
0:f72a12da539e 1:5315654608de
    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 // 
   102     {
   117     {
   103     if( !iPhysics )
   118     if( !iPhysics )
   104         {
   119         {
   105         return;
   120         return;
   106         }
   121         }
   107     TPoint stylusPos = aPointerEvent.iPosition;   
   122     
       
   123     TPoint stylusPos( aPointerEvent.iPosition );
       
   124     
   108     switch( aPointerEvent.iType )
   125     switch( aPointerEvent.iType )
   109         {
   126         {
   110         case TPointerEvent::EButton1Down:
   127         case TPointerEvent::EButton1Down:
   111             {
   128             {
   112             iPhysics->StopPhysics();
   129             iPhysics->StopPhysics();
   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