512 CFbsBitmap* CTsFastSwapAreaExtension::CopyBitmapL( TInt aFbsHandle, TSize aSize, TBool aIsScreenshot ) |
512 CFbsBitmap* CTsFastSwapAreaExtension::CopyBitmapL( TInt aFbsHandle, TSize aSize, TBool aIsScreenshot ) |
513 { |
513 { |
514 CFbsBitmap* ret = new (ELeave) CFbsBitmap(); |
514 CFbsBitmap* ret = new (ELeave) CFbsBitmap(); |
515 CleanupStack::PushL( ret ); |
515 CleanupStack::PushL( ret ); |
516 |
516 |
517 CFbsBitmap* bmp = new (ELeave) CFbsBitmap(); |
517 CFbsBitmap* bmp = DuplicateBitmapLC( aFbsHandle ); |
518 CleanupStack::PushL( bmp ); |
|
519 User::LeaveIfError( bmp->Duplicate( aFbsHandle ) ); |
|
520 |
518 |
521 // First scale using normal method, to show "draft" screenshots. |
519 // First scale using normal method, to show "draft" screenshots. |
522 // Do not always use aSize, preserving the aspect ratio is quite |
520 // Do not always use aSize, preserving the aspect ratio is quite |
523 // important when showing app icons instead of screenshots |
521 // important when showing app icons instead of screenshots |
524 TSize sz = CalculateSizePreserveRatio( aSize, bmp->SizeInPixels() ); |
522 TSize sz = CalculateSizePreserveRatio( aSize, bmp->SizeInPixels() ); |
526 AknIconUtils::ScaleBitmapL( sz, ret, bmp ); |
524 AknIconUtils::ScaleBitmapL( sz, ret, bmp ); |
527 |
525 |
528 // Second, if it is screenshot, perform quality improvement scaling |
526 // Second, if it is screenshot, perform quality improvement scaling |
529 if ( aIsScreenshot ) |
527 if ( aIsScreenshot ) |
530 { |
528 { |
531 CTsBitmapScaleTask* rotaTask = new (ELeave) CTsBitmapScaleTask( *this ); |
529 ScaleBitmapL( bmp, ret ); |
532 CleanupStack::PushL( rotaTask ); |
|
533 iScaleTasks.AppendL( rotaTask ); |
|
534 rotaTask->StartLD( bmp, ret ); // ownership of bmp transferred |
|
535 CleanupStack::Pop( rotaTask ); |
|
536 CleanupStack::Pop( bmp ); |
530 CleanupStack::Pop( bmp ); |
537 } |
531 } |
538 else |
532 else |
539 { |
533 { |
540 CleanupStack::PopAndDestroy( bmp ); |
534 CleanupStack::PopAndDestroy( bmp ); |
542 |
536 |
543 CleanupStack::Pop( ret ); |
537 CleanupStack::Pop( ret ); |
544 return ret; |
538 return ret; |
545 } |
539 } |
546 |
540 |
|
541 // -------------------------------------------------------------------------- |
|
542 // CTsFastSwapAreaExtension::DuplicateBitmapL |
|
543 // -------------------------------------------------------------------------- |
|
544 // |
|
545 CFbsBitmap* CTsFastSwapAreaExtension::DuplicateBitmapLC( TInt aFbsHandle ) |
|
546 { |
|
547 CFbsBitmap* bmp = new (ELeave) CFbsBitmap(); |
|
548 CleanupStack::PushL( bmp ); |
|
549 User::LeaveIfError( bmp->Duplicate( aFbsHandle ) ); |
|
550 return bmp; |
|
551 } |
|
552 |
|
553 // -------------------------------------------------------------------------- |
|
554 // CTsFastSwapAreaExtension::ScaleBitmapL |
|
555 // -------------------------------------------------------------------------- |
|
556 // |
|
557 void CTsFastSwapAreaExtension::ScaleBitmapL( CFbsBitmap* aSourceBitmap, |
|
558 CFbsBitmap* aTargetBitmap ) |
|
559 { |
|
560 CTsBitmapScaleTask* rotaTask = new (ELeave) CTsBitmapScaleTask( *this ); |
|
561 CleanupStack::PushL( rotaTask ); |
|
562 iScaleTasks.AppendL( rotaTask ); |
|
563 rotaTask->StartLD( aSourceBitmap, aTargetBitmap ); |
|
564 // ownership of bmp transferred |
|
565 CleanupStack::Pop( rotaTask ); |
|
566 } |
547 |
567 |
548 // -------------------------------------------------------------------------- |
568 // -------------------------------------------------------------------------- |
549 // CTsFastSwapAreaExtension::CancelScaleTasks |
569 // CTsFastSwapAreaExtension::CancelScaleTasks |
550 // -------------------------------------------------------------------------- |
570 // -------------------------------------------------------------------------- |
551 // |
571 // |