uifw/ganes/src/HgVgMediaWallRenderer.cpp
branchRCL_3
changeset 10 9f56a4e1b8ab
parent 0 2f259fa3e83a
child 16 71dd06cfe933
equal deleted inserted replaced
9:aabf2c525e0f 10:9f56a4e1b8ab
    62                     1.0f, 1.0f, 0.0f,
    62                     1.0f, 1.0f, 0.0f,
    63                     -1.0f, 1.0f, 0.0f
    63                     -1.0f, 1.0f, 0.0f
    64             };
    64             };
    65 
    65 
    66 
    66 
       
    67 VGfloat EaseOutQuad(VGfloat start, VGfloat end, VGfloat t)
       
    68 {
       
    69     VGfloat s = t - 1.0f;
       
    70     VGfloat f = -(s*s*s*s) + 1.0f;    
       
    71     return start * (1.0f - f) + end * f;
       
    72 }   
       
    73 
       
    74 VGfloat EaseInQuad(VGfloat start, VGfloat end, VGfloat t)
       
    75 {
       
    76     VGfloat s = t;
       
    77     VGfloat f = (s*s*s*s);    
       
    78     return start * (1.0f - f) + end * f;
       
    79 }   
       
    80 
       
    81 
       
    82 VGfloat BoundValue(VGfloat value, VGfloat min, VGfloat max)
       
    83 {
       
    84     if (value > max) return max;
       
    85     if (value < min) return min;
       
    86 
       
    87     return value;
       
    88 }
       
    89 
    67 // ============================ MEMBER FUNCTIONS ===============================
    90 // ============================ MEMBER FUNCTIONS ===============================
    68 
    91 
    69 // -----------------------------------------------------------------------------
    92 // -----------------------------------------------------------------------------
    70 // CHgVgCoverflowRenderer::NewL()
    93 // CHgVgCoverflowRenderer::NewL()
    71 // -----------------------------------------------------------------------------
    94 // -----------------------------------------------------------------------------
   434 // CHgVgMediaWallRenderer::DrawQuad
   457 // CHgVgMediaWallRenderer::DrawQuad
   435 // -----------------------------------------------------------------------------
   458 // -----------------------------------------------------------------------------
   436 //
   459 //
   437 void CHgVgMediaWallRenderer::DrawQuad(CHgVgMediaWallRenderer::TQuad* q, TBool aDrawMirrored)
   460 void CHgVgMediaWallRenderer::DrawQuad(CHgVgMediaWallRenderer::TQuad* q, TBool aDrawMirrored)
   438     {
   461     {
   439     vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE);
   462     vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE);    
   440     vgLoadIdentity();
   463     vgLoadIdentity();
   441     
   464     
   442     //vgTranslate(iOffset.iX, iOffset.iY);
   465     if (iLandscape)
   443 
   466     {
       
   467         vgTranslate(0.0f, 640.0f); 
       
   468         vgRotate(-90.0f);
       
   469     }
       
   470          
       
   471     vgTranslate(iOffset.iX, iOffset.iY);
       
   472 
       
   473     
   444     VGImage image = q->iImage;
   474     VGImage image = q->iImage;
   445     if (q->iNoImage)
   475     if (q->iNoImage)
   446         {
   476         {
   447         image = iDefaultImage;
   477         image = iDefaultImage;
   448         }
   478         }
   476         TReal aViewPosition,
   506         TReal aViewPosition,
   477         TReal aAnimationAlpha,
   507         TReal aAnimationAlpha,
   478         CHgVgMediaWall::THgVgAnimationState aState, 
   508         CHgVgMediaWall::THgVgAnimationState aState, 
   479         CHgVgMediaWall::THgVgOpeningAnimationType aSelectionAnimationType, 
   509         CHgVgMediaWall::THgVgOpeningAnimationType aSelectionAnimationType, 
   480         CHgVgMediaWall::THgVgMediaWallStyle /*aStyle*/,
   510         CHgVgMediaWall::THgVgMediaWallStyle /*aStyle*/,
   481         TReal aStartIndex)
   511         TReal aStartIndex, 
       
   512         TReal aSpringVelocity)
   482     { 
   513     { 
   483     
   514     
   484     TInt itemsOnScreen = 0;
   515     TInt itemsOnScreen = 0;
   485     itemsOnScreen = SetupQuads(aItems,
   516     itemsOnScreen = SetupQuads(aItems,
   486             aSelectedIndex, aNextIndex,
   517             aSelectedIndex, aNextIndex,
   487             aViewPosition,
   518             aViewPosition,
   488             aAnimationAlpha,
   519             aAnimationAlpha,
   489             aState, aSelectionAnimationType, aStartIndex);
   520             aState, aSelectionAnimationType, aStartIndex, aSpringVelocity);
       
   521     
       
   522     vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);
       
   523     vgLoadIdentity();
       
   524     vgRotate(-90.0f);
       
   525     vgTranslate(0.0f, -640.0f);
       
   526      
       
   527     vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE);
       
   528     vgLoadIdentity();
       
   529     vgRotate(-90.0f);
       
   530     vgTranslate(0.0f, -640.0f);
       
   531 
   490     
   532     
   491     TransformAndDraw(itemsOnScreen, aSelectionAnimationType);
   533     TransformAndDraw(itemsOnScreen, aSelectionAnimationType);
   492     }
   534     }
   493 
   535 
   494 
   536 
   584 //     
   626 //     
   585 void CHgVgMediaWallRenderer::DrawGround(TInt aWidth, TInt aHeight)
   627 void CHgVgMediaWallRenderer::DrawGround(TInt aWidth, TInt aHeight)
   586     {
   628     {
   587     vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);
   629     vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);
   588     vgLoadIdentity();
   630     vgLoadIdentity();
       
   631     if (iLandscape)
       
   632     {
       
   633         vgTranslate(0.0f, 640.0f); 
       
   634         vgRotate(-90.0f);
       
   635     }
       
   636 
   589     //vgTranslate(iOffset.iX, iOffset.iY);
   637     //vgTranslate(iOffset.iX, iOffset.iY);
   590     vgScale(aWidth, aHeight);
   638     vgScale(aWidth, aHeight);
   591     vgSetPaint(iGroundPaint, VG_FILL_PATH);            
   639     vgSetPaint(iGroundPaint, VG_FILL_PATH);            
   592     vgDrawPath(iGroundPath, VG_FILL_PATH);
   640     vgDrawPath(iGroundPath, VG_FILL_PATH);
   593     }
   641     }
   751 // ---------------------------------------------------------------------------
   799 // ---------------------------------------------------------------------------
   752 // CHgVgMediaWallRenderer::SetupQuads()
   800 // CHgVgMediaWallRenderer::SetupQuads()
   753 // ---------------------------------------------------------------------------
   801 // ---------------------------------------------------------------------------
   754 //
   802 //
   755 TInt CHgVgMediaWallRenderer::SetupQuads(RPointerArray<CHgVgItem>& aItems,
   803 TInt CHgVgMediaWallRenderer::SetupQuads(RPointerArray<CHgVgItem>& aItems,
   756         TInt aSelectedIndex, TReal aNextIndex,
   804         TInt aSelectedIndex, TReal /*aNextIndex*/,
   757         VGfloat aViewPosition,
   805         VGfloat aViewPosition,
   758         VGfloat aAnimationAlpha,
   806         VGfloat aAnimationAlpha,
   759         CHgVgMediaWall::THgVgAnimationState aState, 
   807         CHgVgMediaWall::THgVgAnimationState aState, 
   760         CHgVgMediaWall::THgVgOpeningAnimationType aOpeningAnimationType, 
   808         CHgVgMediaWall::THgVgOpeningAnimationType aOpeningAnimationType, 
   761         TReal aStartIndex)
   809         TReal /*aStartIndex*/, 
       
   810         TReal aSpringVelocity)
   762     {
   811     {
   763     
   812     
   764     
   813     
   765     if (aItems.Count() <= 0)
   814     if (aItems.Count() <= 0)
   766         return 0;
   815         return 0;
   794     
   843     
   795     TInt i = 0;
   844     TInt i = 0;
   796     TInt itemsOnScreen = 0;
   845     TInt itemsOnScreen = 0;
   797     TInt currentRow = (TInt)aViewPosition - KSelectedItemIndex;
   846     TInt currentRow = (TInt)aViewPosition - KSelectedItemIndex;
   798         
   847         
       
   848     TReal zAlpha = Abs(aSpringVelocity / KSpringVelocityToZAlpha);
       
   849     VGfloat zNear = HgVgHelper::Lerp(iZFar, iZNear, 1.0f - BoundValue(zAlpha, 0, 1));
       
   850         
   799     while (itemsOnScreen < iQuads.Count())
   851     while (itemsOnScreen < iQuads.Count())
   800         {
   852         {
   801         TInt itemIndex = currentRow + i;
   853         TInt itemIndex = currentRow + i;
   802 
   854 
   803         // not really an item
   855         // not really an item
   825         VGfloat fi = (VGfloat)i - fDiff;
   877         VGfloat fi = (VGfloat)i - fDiff;
   826         
   878         
   827         q->iX = leftX - step * (leftIndex - fi);
   879         q->iX = leftX - step * (leftIndex - fi);
   828         
   880         
   829         
   881         
   830         if (aStartIndex != aNextIndex)
   882         /*if (aStartIndex != aNextIndex)
   831             {
   883             {
   832             // if start and next index are not same, we can just interpolate
   884             // if start and next index are not same, we can just interpolate
   833             // items at these indices.
   885             // items at these indices.
   834             if (itemIndex == (TInt)aStartIndex ||
   886             if (itemIndex == (TInt)aStartIndex ||
   835                     itemIndex == (TInt)aNextIndex)
   887                     itemIndex == (TInt)aNextIndex)
   836                 {
   888                 {
   837                 q->iZ = HgVgHelper::Lerp((VGfloat)iZNear, (VGfloat)iZFar, Abs(q->iX / leftX));
   889                 q->iZ = EaseInQuad((VGfloat)zNear, (VGfloat)iZFar, BoundValue(Abs(q->iX / leftX), 0, 1));
   838                 q->iZ = Min(q->iZ, (VGfloat)iZFar);            
   890                 q->iZ = Min(q->iZ, (VGfloat)iZFar);            
   839                 }
   891                 }
   840             }
   892             }
   841         else
   893         else*/
   842             {
   894             {
   843             // in this case we are just dragging and startindex and left index are
   895             // in this case we are just dragging and startindex and left index are
   844             // same so we need to interpolate z for all items coming/leaving center 
   896             // same so we need to interpolate z for all items coming/leaving center 
   845             // of the screen.
   897             // of the screen.
   846             q->iZ = HgVgHelper::Lerp((VGfloat)iZNear, (VGfloat)iZFar, Abs(q->iX / leftX));
   898             
       
   899             q->iZ = EaseInQuad((VGfloat)zNear, (VGfloat)iZFar, BoundValue(Abs(q->iX / leftX), 0, 1));
   847             q->iZ = Min(q->iZ, (VGfloat)iZFar);                    
   900             q->iZ = Min(q->iZ, (VGfloat)iZFar);                    
   848             }
   901             }
   849         
   902         
   850         // calculate alpha so that items further are more transparent.
   903         // calculate alpha so that items further are more transparent.
   851         q->iAlpha = HgVgHelper::Lerp(1, 0, Max(0.0, (Abs(q->iX)-2.0) / (TReal)(iQuads.Count()/2-2)));         
   904         q->iAlpha = HgVgHelper::Lerp(1, 0, Max(0.0, (Abs(q->iX)-2.0) / (TReal)(iQuads.Count()/2-2)));         
  1137 void CHgVgMediaWallRenderer::EnableFlipXY(TBool aEnabled)
  1190 void CHgVgMediaWallRenderer::EnableFlipXY(TBool aEnabled)
  1138     {
  1191     {
  1139     iFlipXY = aEnabled;
  1192     iFlipXY = aEnabled;
  1140     }
  1193     }
  1141 
  1194 
       
  1195 void CHgVgMediaWallRenderer::EnableLandscapeMode(TBool enabled)
       
  1196 {
       
  1197     iLandscape = enabled;
       
  1198 }
       
  1199 
       
  1200 
  1142 // End of File
  1201 // End of File