idlehomescreen/widgetmanager/src/wmimageconverter.cpp
changeset 4 4d54b72983ae
parent 2 08c6ee43b396
child 5 c743ef5928ba
equal deleted inserted replaced
3:fb3763350a08 4:4d54b72983ae
   207         // AknsUtils::CreateAppIconLC panics incase of WRT
   207         // AknsUtils::CreateAppIconLC panics incase of WRT
   208 
   208 
   209         RApaLsSession lsSession;
   209         RApaLsSession lsSession;
   210         User::LeaveIfError( lsSession.Connect() );
   210         User::LeaveIfError( lsSession.Connect() );
   211         CleanupClosePushL( lsSession );
   211         CleanupClosePushL( lsSession );
   212     
   212         
   213         CArrayFixFlat<TSize>* sizeArray = new (ELeave) CArrayFixFlat<TSize>(3);
   213         const TInt KAppSizeArraySize = 3;
       
   214         CArrayFixFlat<TSize>* sizeArray = new (ELeave)
       
   215             CArrayFixFlat<TSize>( KAppSizeArraySize );
   214         CleanupStack::PushL( sizeArray );
   216         CleanupStack::PushL( sizeArray );
   215         User::LeaveIfError( lsSession.GetAppIconSizes( aUid, *sizeArray ) );
   217         User::LeaveIfError( lsSession.GetAppIconSizes( aUid, *sizeArray ) );
   216         TInt sizeCount = sizeArray->Count();
       
   217         TSize size;
   218         TSize size;
   218         if ( sizeCount > 0 )
   219         for( TInt i=0; i < sizeArray->Count(); i++ )
   219             {
   220             {
   220             for( TInt i=0; i < sizeArray->Count(); i++ )
   221             size = (*sizeArray)[i];
   221                 {
   222             if ( size == iSize )
   222                 size = (*sizeArray)[i];
   223                 {
   223                 if ( size == iSize )
   224                 break;
   224                     {
       
   225                     break;
       
   226                     }
       
   227                 }
   225                 }
   228             }
   226             }
   229         CApaMaskedBitmap* maskedBmp = CApaMaskedBitmap::NewLC();
   227         CApaMaskedBitmap* maskedBmp = CApaMaskedBitmap::NewLC();
   230         User::LeaveIfError( lsSession.GetAppIcon( aUid, size, *maskedBmp ) );
   228         User::LeaveIfError( lsSession.GetAppIcon( aUid, size, *maskedBmp ) );
   231         iBitmap = static_cast<CFbsBitmap*>( maskedBmp );  // ownership transfered
   229         iBitmap = static_cast<CFbsBitmap*>( maskedBmp );  // ownership transfered
   312         delete iMask;
   310         delete iMask;
   313         iMask = NULL;
   311         iMask = NULL;
   314         }
   312         }
   315 
   313 
   316     TDisplayMode mode = CEikonEnv::Static()->ScreenDevice()->DisplayMode();
   314     TDisplayMode mode = CEikonEnv::Static()->ScreenDevice()->DisplayMode();
       
   315     if ( mode >= ERgb ) // currently svg engine doesn't render correctly
       
   316         { mode = EColor16M; } // in this or above mode ( ou1cimx1#229434 )
   317     TFontSpec fontspec;
   317     TFontSpec fontspec;
   318     
   318     
   319     CFbsBitmap* frameBuffer = new ( ELeave ) CFbsBitmap;
   319     CFbsBitmap* frameBuffer = new ( ELeave ) CFbsBitmap;
   320     CleanupStack::PushL( frameBuffer );
   320     CleanupStack::PushL( frameBuffer );
   321     frameBuffer->Create( iSize, mode );
   321     frameBuffer->Create( iSize, mode );
   322     
   322     
   323     CSvgEngineInterfaceImpl* svgEngine = CSvgEngineInterfaceImpl::NewL( 
   323     CSvgEngineInterfaceImpl* svgEngine = CSvgEngineInterfaceImpl::NewL( 
   324             frameBuffer, NULL, fontspec );
   324             frameBuffer, NULL, fontspec );
   325     svgEngine->SetDRMMode( EFalse );  
   325     CleanupStack::PushL( svgEngine );
       
   326     
       
   327     svgEngine->SetDRMMode( EFalse );
   326 
   328 
   327     TInt domHandle;
   329     TInt domHandle;
   328     CheckSvgErrorL( svgEngine->PrepareDom( aFileName, domHandle ) );
   330     CheckSvgErrorL( svgEngine->PrepareDom( aFileName, domHandle ) );
   329     
   331     
   330     CFbsBitmap* bitmap = new(ELeave) CFbsBitmap;    
   332     CFbsBitmap* bitmap = new(ELeave) CFbsBitmap;    
   331     User::LeaveIfError( bitmap->Create( iSize, mode) );
       
   332     CleanupStack::PushL( bitmap );
   333     CleanupStack::PushL( bitmap );
       
   334     User::LeaveIfError( bitmap->Create( iSize, mode ) );
   333     
   335     
   334     CFbsBitmap* mask = new(ELeave) CFbsBitmap;    
   336     CFbsBitmap* mask = new(ELeave) CFbsBitmap;    
       
   337     CleanupStack::PushL( mask );
   335     User::LeaveIfError( mask->Create( iSize, EGray256 ) );
   338     User::LeaveIfError( mask->Create( iSize, EGray256 ) );
   336     CleanupStack::PushL( mask );
       
   337     
   339     
   338     CheckSvgErrorL( svgEngine->UseDom( domHandle, bitmap, mask ) );
   340     CheckSvgErrorL( svgEngine->UseDom( domHandle, bitmap, mask ) );
   339 
   341 
   340     MSvgError* err;
   342     MSvgError* err;
   341     svgEngine->Start( err );
   343     svgEngine->Start( err );
   344     CheckSvgErrorL( svgEngine->UseDom( domHandle, NULL, NULL ) );
   346     CheckSvgErrorL( svgEngine->UseDom( domHandle, NULL, NULL ) );
   345     CheckSvgErrorL( svgEngine->DeleteDom( domHandle ) );
   347     CheckSvgErrorL( svgEngine->DeleteDom( domHandle ) );
   346 
   348 
   347     CleanupStack::Pop( mask );
   349     CleanupStack::Pop( mask );
   348     CleanupStack::Pop( bitmap );
   350     CleanupStack::Pop( bitmap );
       
   351     CleanupStack::PopAndDestroy( svgEngine );
   349     CleanupStack::PopAndDestroy( frameBuffer );
   352     CleanupStack::PopAndDestroy( frameBuffer );
   350     
   353     
   351     iBitmap = bitmap;
   354     iBitmap = bitmap;
   352     iMask = mask;
   355     iMask = mask;
   353     iState = EIdle;
   356     iState = EIdle;