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; |