uifw/ganes/src/HgVgMediaWall.cpp
branchRCL_3
changeset 38 c52421ed5f07
parent 25 941195f2d488
child 50 a1caeb42b3a3
equal deleted inserted replaced
29:a8834a2e9a96 38:c52421ed5f07
   143     iCoeEnv->WsSession().Flush();
   143     iCoeEnv->WsSession().Flush();
   144 #endif
   144 #endif
   145     
   145     
   146     
   146     
   147     SetMopParent( aParent );
   147     SetMopParent( aParent );
   148     SetFlags( EHgVgMediaWallDrawToWindowGC | EHgVgMediaWallUninitialized );
   148     SetFlags( EHgVgMediaWallUninitialized );
   149     
   149     
   150     }
   150     }
   151 
   151 
   152 // -----------------------------------------------------------------------------
   152 // -----------------------------------------------------------------------------
   153 // CHgVgMediaWall::InitScreenL()
   153 // CHgVgMediaWall::InitScreenL()
   159     // Set the windows size       
   159     // Set the windows size       
   160     SetRect ( aRect );
   160     SetRect ( aRect );
   161 
   161 
   162 #ifdef MEDIAWALL_ORIENTATION_FIX    
   162 #ifdef MEDIAWALL_ORIENTATION_FIX    
   163     TSize screenSize = iCoeEnv->ScreenDevice()->SizeInPixels();
   163     TSize screenSize = iCoeEnv->ScreenDevice()->SizeInPixels();
   164     if (aRect == TRect(TPoint(0,0), screenSize) && iMediaWallStyle == EHgVgMediaWallStyleCoverflowFullScreen)
   164     if (aRect == TRect(TPoint(0,0), screenSize) 
       
   165             && iMediaWallStyle == EHgVgMediaWallStyleCoverflowFullScreen)
   165         {
   166         {
   166         Window().FixNativeOrientation();
   167         Window().FixNativeOrientation();
   167         }
   168         }
   168 #endif
   169 #endif
   169     
   170     
   173 // CHgVgMediaWall::RefreshScreen()
   174 // CHgVgMediaWall::RefreshScreen()
   174 // -----------------------------------------------------------------------------
   175 // -----------------------------------------------------------------------------
   175 //
   176 //
   176 EXPORT_C void CHgVgMediaWall::RefreshScreen( TInt aIndex )
   177 EXPORT_C void CHgVgMediaWall::RefreshScreen( TInt aIndex )
   177     {
   178     {
   178     
   179     ClearFlags(EHgVgMediaWallDrawToWindowGC);
   179     if( !iIsForeground  )
   180     if( !iIsForeground  )
   180         {
   181         {
   181         return;
   182         return;
   182         }
   183         }
   183     
   184     
   184     if( !iAnimationTimer->IsActive() )
   185     if( !iAnimationTimer->IsActive() )
   185         {    
   186         {    
   186         if( /*iMediaWallStyle == EHgVgMediaWallStyleGrid ||*/ 
   187         if( /*iMediaWallStyle == EHgVgMediaWallStyleGrid ||*/ 
   187                 (aIndex >= FirstIndexOnScreen() && aIndex <= FirstIndexOnScreen() + ItemsOnScreen()) )
   188                 (aIndex >= FirstIndexOnScreen() 
   188             {
   189                         && aIndex <= FirstIndexOnScreen() + ItemsOnScreen()) )
   189   
   190             {
   190             UpdateLabelsAndPopup();
   191             UpdateLabelsAndPopup();
   191             if(iFlags & EHgVgMediaWallDrawToWindowGC)
   192             DrawNow();
   192                 {
       
   193                 DrawNow();
       
   194                 }
       
   195             else
       
   196                 {
       
   197                 DrawOpenVG();
       
   198                 }
       
   199         
       
   200             }
   193             }
   201         }
   194         }
   202     }
   195     }
   203 
   196 
   204 // -----------------------------------------------------------------------------
   197 // -----------------------------------------------------------------------------
   372         {
   365         {
   373         FillSystemGcWithSkin( );
   366         FillSystemGcWithSkin( );
   374         return;
   367         return;
   375         }
   368         }
   376     
   369     
   377     CHgVgMediaWall* self = const_cast<CHgVgMediaWall*>(this);           
   370     if(iFlags & EHgVgMediaWallDrawToWindowGC)
   378 
   371         {
   379     if( iFlags & EHgVgMediaWallDrawToWindowGC )
   372         CHgVgMediaWall* self = const_cast<CHgVgMediaWall*>(this);
   380         {
   373         self->ClearFlags(EHgVgMediaWallDrawToWindowGC);
   381         CFbsBitmap* screenshot = NULL;
   374         FillSystemGcWithSkin( );
   382         screenshot = self->DrawToBitmap();
   375         return;
   383         if (screenshot)
   376         }
   384             {
   377     
   385             SystemGc().BitBlt( Rect().iTl,screenshot );
   378     // draw with alpha to make a hole to composition layer
   386             delete screenshot;
   379     SystemGc().SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
   387             }
   380     SystemGc().SetBrushColor(TRgb(0,0,0,0));
   388         else
   381     SystemGc().Clear();
   389             {
   382     DrawOpenVG();
   390             // draw with alpha to make a hole to composition layer
       
   391             SystemGc().SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
       
   392             SystemGc().SetBrushColor(TRgb(0,0,0,0));
       
   393             SystemGc().Clear();
       
   394             DrawOpenVG();
       
   395             }
       
   396         }
       
   397     else
       
   398         {
       
   399         // draw with alpha to make a hole to composition layer
       
   400         SystemGc().SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
       
   401         SystemGc().SetBrushColor(TRgb(0,0,0,0));
       
   402         SystemGc().Clear();
       
   403         DrawOpenVG();
       
   404         }
       
   405     }
   383     }
   406 
   384 
   407 // -----------------------------------------------------------------------------
   385 // -----------------------------------------------------------------------------
   408 // CHgVgMediaWall::FillSystemGcWithSkin()
   386 // CHgVgMediaWall::FillSystemGcWithSkin()
   409 // Draws the display.
   387 // Draws the display.
   443 
   421 
   444 // -----------------------------------------------------------------------------
   422 // -----------------------------------------------------------------------------
   445 // CHgVgMediaWall::ChangeStyleL()
   423 // CHgVgMediaWall::ChangeStyleL()
   446 // -----------------------------------------------------------------------------
   424 // -----------------------------------------------------------------------------
   447 //
   425 //
   448 EXPORT_C void CHgVgMediaWall::ChangeStyleL( THgVgMediaWallStyle aStyle, const TRect& aRect, TBool /*aReuseSurface*/ )
   426 EXPORT_C void CHgVgMediaWall::ChangeStyleL( THgVgMediaWallStyle aStyle, 
       
   427         const TRect& aRect, TBool /*aReuseSurface*/ )
   449     {
   428     {
   450     
   429     
   451     // If animation is on, stop it before changing style.    
   430     // If animation is on, stop it before changing style.    
   452     HandleTransitionAnimationStop();
   431     HandleTransitionAnimationStop();
   453                
   432                
   708             iScrollBar->SetViewPosition(TPoint((TInt)iSelectedIndex, 0));
   687             iScrollBar->SetViewPosition(TPoint((TInt)iSelectedIndex, 0));
   709 
   688 
   710         }
   689         }
   711                 
   690                 
   712     // inform observer if needed
   691     // inform observer if needed
   713     if (iMediaWallStyle != EHgVgMediaWallStyleGrid && 
   692     if (iMediaWallStyle != EHgVgMediaWallStyleGrid 
   714             (iItems.Count() > 0 && iSelectionObserver && !aDontUpdateObserver && !iPointerDown))
   693             && (iItems.Count() > 0 && iSelectionObserver 
       
   694                     && !aDontUpdateObserver && !iPointerDown))
   715         {
   695         {
   716         TRAP_IGNORE(iSelectionObserver->HandleSelectL(iSelectedIndex, this);)
   696         TRAP_IGNORE(iSelectionObserver->HandleSelectL(iSelectedIndex, this);)
   717         }
   697         }
   718 
   698 
   719     // update scroll buffer manager position
   699     // update scroll buffer manager position
  1083                 }
  1063                 }
  1084             }
  1064             }
  1085         }
  1065         }
  1086     else
  1066     else
  1087         {
  1067         {
  1088         iAnimationState = aOpening ? EHgVgMediaWallAnimationStateOpening : EHgVgMediaWallAnimationStateClosing;        
  1068         iAnimationState = aOpening 
       
  1069                 ? EHgVgMediaWallAnimationStateOpening 
       
  1070                     : EHgVgMediaWallAnimationStateClosing;        
  1089         
  1071         
  1090         StartAnimationTimer();        
  1072         StartAnimationTimer();        
  1091         }    
  1073         }    
  1092     }
  1074     }
  1093 
  1075 
  1100 
  1082 
  1101     if (!DrawAll())
  1083     if (!DrawAll())
  1102         return NULL;
  1084         return NULL;
  1103     
  1085     
  1104 #ifdef MEDIAWALL_ORIENTATION_FIX    
  1086 #ifdef MEDIAWALL_ORIENTATION_FIX    
  1105     return iEGL->GetSurfaceToBitmap(iRect, iMediaWallStyle == EHgVgMediaWallStyleCoverflowFullScreen);        
  1087     return iEGL->GetSurfaceToBitmap(iRect, 
       
  1088             iMediaWallStyle == EHgVgMediaWallStyleCoverflowFullScreen);        
  1106 #else
  1089 #else
  1107     return iEGL->GetSurfaceToBitmap(iRect, EFalse);            
  1090     return iEGL->GetSurfaceToBitmap(iRect, EFalse);            
  1108 #endif
  1091 #endif
  1109     
  1092     
  1110     }
  1093     }
  1179             else
  1162             else
  1180                 iAnimationState = EHgVgMediaWallAnimationStateIdle;
  1163                 iAnimationState = EHgVgMediaWallAnimationStateIdle;
  1181     
  1164     
  1182             iAnimationTimer->Cancel();
  1165             iAnimationTimer->Cancel();
  1183             }
  1166             }
  1184     
       
  1185         SetFlags( EHgVgMediaWallDrawToWindowGC  );
       
  1186         DrawNow();
       
  1187         }
  1167         }
  1188     
  1168     
  1189     if( aType == KEikMessageUnfadeWindows )
  1169     if( aType == KEikMessageUnfadeWindows )
  1190         {
  1170         {
  1191         ClearFlags( EHgVgMediaWallDrawToWindowGC );
  1171         ClearFlags( EHgVgMediaWallDrawToWindowGC );
  1192         DrawNow();
  1172         DrawNow();
  1193         }
  1173         }
  1194 
  1174     }
  1195     if( aType == KEikDynamicLayoutVariantSwitch && !(iFlags & EHgVgMediaWallDrawToWindowGC) )
       
  1196         {
       
  1197         SetFlags( EHgVgMediaWallDrawToWindowGC );
       
  1198         DrawNow();
       
  1199         }
       
  1200     }
       
  1201 
       
  1202 
  1175 
  1203 // ---------------------------------------------------------------------------
  1176 // ---------------------------------------------------------------------------
  1204 // CHgVgMediaWall::InitItemsL()
  1177 // CHgVgMediaWall::InitItemsL()
  1205 // ---------------------------------------------------------------------------
  1178 // ---------------------------------------------------------------------------
  1206 //     
  1179 //     
  1251         iAnimationTimer->Cancel();
  1224         iAnimationTimer->Cancel();
  1252         }
  1225         }
  1253 
  1226 
  1254     iIsForeground = EFalse;
  1227     iIsForeground = EFalse;
  1255     
  1228     
  1256     // draw screenshot using window gc, this is needed
       
  1257     // for nga effects to work
       
  1258     DrawNow();
       
  1259     
       
  1260     // free textures    
  1229     // free textures    
  1261     FreeItemsImages();
  1230     FreeItemsImages();
  1262     // free other resources
  1231     // free other resources
  1263     DestroyRendering();
  1232     DestroyRendering();
  1264 
  1233 
  1265     SetFlags( EHgVgMediaWallUninitialized | EHgVgMediaWallDrawToWindowGC );
  1234     SetFlags( EHgVgMediaWallUninitialized );
       
  1235     DrawNow();
  1266     
  1236     
  1267     iCoeEnv->WsSession().Flush();
  1237     iCoeEnv->WsSession().Flush();
  1268     }
  1238     }
  1269 
  1239 
  1270 // ---------------------------------------------------------------------------
  1240 // ---------------------------------------------------------------------------
  1411     return ETrue;                    
  1381     return ETrue;                    
  1412     }
  1382     }
  1413 
  1383 
  1414 void CHgVgMediaWall::HandleTransitionAnimationStop()
  1384 void CHgVgMediaWall::HandleTransitionAnimationStop()
  1415     {
  1385     {
  1416     if (iAnimationTimer->IsActive() && (iAnimationState == EHgVgMediaWallAnimationStateTransition ||
  1386     if (iAnimationTimer->IsActive() 
  1417             iAnimationState == EHgVgMediaWallAnimationStateFastTransition))
  1387             && (iAnimationState == EHgVgMediaWallAnimationStateTransition ||
       
  1388                     iAnimationState == EHgVgMediaWallAnimationStateFastTransition))
  1418         {
  1389         {
  1419         // stop to this location
  1390         // stop to this location
  1420         iSpring->Reset();    
  1391         iSpring->Reset();    
  1421         iAnimationState = EHgVgMediaWallAnimationStateIdle;
  1392         iAnimationState = EHgVgMediaWallAnimationStateIdle;
  1422     
  1393     
  1580             ETrue, CHgScroller::EHgScrollerScrollBar);
  1551             ETrue, CHgScroller::EHgScrollerScrollBar);
  1581     
  1552     
  1582     iScrollBar->SetViewPosition( TPoint(iSelectedIndex, 0) );
  1553     iScrollBar->SetViewPosition( TPoint(iSelectedIndex, 0) );
  1583     
  1554     
  1584 #ifdef MEDIAWALL_ORIENTATION_FIX
  1555 #ifdef MEDIAWALL_ORIENTATION_FIX
  1585     iScrollBar->EnableLandscapeRendering( iMediaWallStyle == CHgVgMediaWall::EHgVgMediaWallStyleCoverflowFullScreen );
  1556     iScrollBar->EnableLandscapeRendering( 
       
  1557             iMediaWallStyle == CHgVgMediaWall::EHgVgMediaWallStyleCoverflowFullScreen );
  1586 #endif
  1558 #endif
  1587     
  1559     
  1588     }
  1560     }
  1589 
  1561 
  1590 // ---------------------------------------------------------------------------
  1562 // ---------------------------------------------------------------------------
  1884 
  1856 
  1885 // ---------------------------------------------------------------------------
  1857 // ---------------------------------------------------------------------------
  1886 // CHgVgMediaWall::HandleDragging()
  1858 // CHgVgMediaWall::HandleDragging()
  1887 // ---------------------------------------------------------------------------
  1859 // ---------------------------------------------------------------------------
  1888 //
  1860 //
  1889 void CHgVgMediaWall::HandleDragging(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent)
  1861 void CHgVgMediaWall::HandleDragging(
       
  1862         const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent)
  1890     {    
  1863     {    
  1891 
  1864 
  1892     switch (aEvent.State())
  1865     switch (aEvent.State())
  1893         {
  1866         {
  1894         case AknTouchGestureFw::EAknTouchGestureFwStart:
  1867         case AknTouchGestureFw::EAknTouchGestureFwStart:
  1989 
  1962 
  1990 // ---------------------------------------------------------------------------
  1963 // ---------------------------------------------------------------------------
  1991 // CHgVgMediaWall::HandleDragStart()
  1964 // CHgVgMediaWall::HandleDragStart()
  1992 // ---------------------------------------------------------------------------
  1965 // ---------------------------------------------------------------------------
  1993 //
  1966 //
  1994 void CHgVgMediaWall::HandleDragStart(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& /*aEvent*/)
  1967 void CHgVgMediaWall::HandleDragStart(
       
  1968         const AknTouchGestureFw::MAknTouchGestureFwDragEvent& /*aEvent*/)
  1995     {
  1969     {
  1996     
  1970     
  1997     // cancel ongoing animation.
  1971     // cancel ongoing animation.
  1998     if (iAnimationTimer->IsActive())
  1972     if (iAnimationTimer->IsActive())
  1999         {
  1973         {
  2017 
  1991 
  2018 // ---------------------------------------------------------------------------
  1992 // ---------------------------------------------------------------------------
  2019 // CHgVgMediaWall::HandleDragOn()
  1993 // CHgVgMediaWall::HandleDragOn()
  2020 // ---------------------------------------------------------------------------
  1994 // ---------------------------------------------------------------------------
  2021 //
  1995 //
  2022 void CHgVgMediaWall::HandleDragOn(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent)
  1996 void CHgVgMediaWall::HandleDragOn(
       
  1997         const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent)
  2023     {
  1998     {
  2024 
  1999 
  2025     // calculate delta of dragging
  2000     // calculate delta of dragging
  2026     TInt delta = aEvent.StartPosition().iX - aEvent.CurrentPosition().iX;
  2001     TInt delta = aEvent.StartPosition().iX - aEvent.CurrentPosition().iX;
  2027     TReal fDelta = GetAsPercentageOfScreenWidth(delta);
  2002     TReal fDelta = GetAsPercentageOfScreenWidth(delta);
  2061 
  2036 
  2062 // ---------------------------------------------------------------------------
  2037 // ---------------------------------------------------------------------------
  2063 // CHgVgMediaWall::HandleDragStop()
  2038 // CHgVgMediaWall::HandleDragStop()
  2064 // ---------------------------------------------------------------------------
  2039 // ---------------------------------------------------------------------------
  2065 //
  2040 //
  2066 void CHgVgMediaWall::HandleDragStop(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& /*aEvent*/)
  2041 void CHgVgMediaWall::HandleDragStop(
       
  2042         const AknTouchGestureFw::MAknTouchGestureFwDragEvent& /*aEvent*/)
  2067     {   
  2043     {   
  2068     iPointerDown = EFalse;
  2044     iPointerDown = EFalse;
  2069     if (iMediaWallStyle == EHgVgMediaWallStyleGrid)
  2045     if (iMediaWallStyle == EHgVgMediaWallStyleGrid)
  2070         {
  2046         {
  2071         // if we dragged grids position outside bounds, 
  2047         // if we dragged grids position outside bounds, 
  2116             }
  2092             }
  2117         else if (iMediaWallStyle == EHgVgMediaWallStyleCoverflowFullScreen ||
  2093         else if (iMediaWallStyle == EHgVgMediaWallStyleCoverflowFullScreen ||
  2118                 iMediaWallStyle == EHgVgMediaWallStyleGrid)
  2094                 iMediaWallStyle == EHgVgMediaWallStyleGrid)
  2119             {
  2095             {
  2120             // when scrollbar is being dragged we draw letter popup
  2096             // when scrollbar is being dragged we draw letter popup
  2121             if (iLetterPopup && (iScrollBarHit || (iKeyScrollingState != ENoKeyScrolling && dist > KDrawLetterPopupDistance)))
  2097             if (iLetterPopup && 
       
  2098                     (iScrollBarHit 
       
  2099                             || (iKeyScrollingState != ENoKeyScrolling 
       
  2100                                     && dist > KDrawLetterPopupDistance)))
  2122                 {
  2101                 {
  2123                 iLetterPopup->Draw(iRect, KMaxLetterPopupOpacity);                    
  2102                 iLetterPopup->Draw(iRect, KMaxLetterPopupOpacity);                    
  2124                 }
  2103                 }
  2125             else
  2104             else
  2126                 {
  2105                 {
  2137 void CHgVgMediaWall::DrawButtonsAndScrollbar()
  2116 void CHgVgMediaWall::DrawButtonsAndScrollbar()
  2138     {
  2117     {
  2139     if (iScrollBar || iHideSKButton)
  2118     if (iScrollBar || iHideSKButton)
  2140         {
  2119         {
  2141         TReal alpha = 1.0f;
  2120         TReal alpha = 1.0f;
  2142         if (iAnimationState == EHgVgMediaWallAnimationStateOpening || iAnimationState == EHgVgMediaWallAnimationStateClosing)
  2121         if (iAnimationState == EHgVgMediaWallAnimationStateOpening 
       
  2122                 || iAnimationState == EHgVgMediaWallAnimationStateClosing)
  2143             alpha = 1.0f - iAnimationAlpha;
  2123             alpha = 1.0f - iAnimationAlpha;
  2144         else if (iAnimationState == EHgVgMediaWallAnimationStateItemOpened)
  2124         else if (iAnimationState == EHgVgMediaWallAnimationStateItemOpened)
  2145             alpha = 0.0f;
  2125             alpha = 0.0f;
  2146         if (iScrollBar && iItems.Count() > 0)
  2126         if (iScrollBar && iItems.Count() > 0)
  2147             iScrollBar->Draw(iRect, alpha);
  2127             iScrollBar->Draw(iRect, alpha);
  2172             ret = ETrue;
  2152             ret = ETrue;
  2173             
  2153             
  2174             DrawOpenVG();
  2154             DrawOpenVG();
  2175 
  2155 
  2176             if (iMediaWallObserver)
  2156             if (iMediaWallObserver)
  2177                 iMediaWallObserver->HandleMediaWallEvent((TInt)EHgVgMediaWallEventRequestShowSoftkeys, this);
  2157                 iMediaWallObserver->HandleMediaWallEvent(
       
  2158                         EHgVgMediaWallEventRequestShowSoftkeys, this);
  2178 
  2159 
  2179             }
  2160             }
  2180         // if screen is hit when button is not visible, show button and scrollbar
  2161         // if screen is hit when button is not visible, show button and scrollbar
  2181         else if (!iHideSKButton->IsEnabled() && aEvent.iType == TPointerEvent::EButton1Down)
  2162         else if (!iHideSKButton->IsEnabled() 
       
  2163                 && aEvent.iType == TPointerEvent::EButton1Down)
  2182             {
  2164             {
  2183             
  2165             
  2184             if (iScrollBar)    
  2166             if (iScrollBar)    
  2185                 iScrollBar->SetEnabled(ETrue);
  2167                 iScrollBar->SetEnabled(ETrue);
  2186             
  2168             
  2187             iHideSKButton->SetEnabled(ETrue);
  2169             iHideSKButton->SetEnabled(ETrue);
  2188                        
  2170                        
  2189             DrawOpenVG();
  2171             DrawOpenVG();
  2190 
  2172 
  2191             if (iMediaWallObserver)
  2173             if (iMediaWallObserver)
  2192                 iMediaWallObserver->HandleMediaWallEvent((TInt)EHgVgMediaWallEventRequestHideSoftkeys, this);
  2174                 iMediaWallObserver->HandleMediaWallEvent(
       
  2175                         EHgVgMediaWallEventRequestHideSoftkeys, this);
  2193             
  2176             
  2194             }
  2177             }
  2195         }
  2178         }
  2196     
  2179     
  2197     return ret;
  2180     return ret;