--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/BubbleManager/Src/BMBubbleImageManager.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,776 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Image Manager
+*
+*/
+
+
+// INCLUDE FILES
+#include "BMBubbleImageManager.h"
+#include "BMBubbleSkinBitmap.h"
+#include "BubbleManagerPaths.h"
+#include "BMPanic.h"
+#include "BMUtils.h"
+#include "BMLayout.h"
+#include "BMBubbleIconIndex.h"
+
+#include <eikimage.h>
+#include <AknsUtils.h>
+#include <aknconsts.h>
+#include <AknIconUtils.h>
+
+// CONSTANTS
+// 1-piece backgrounds
+const TInt KBMLastCachedBitmap1 = EQgn_graf_call_first_one_disconn_mask;
+// 9-piece backgrounds
+const TInt KBMLastCachedBitmap2 = EQgn_indi_call_voip_disconn_mask;
+const TInt KBMLastAvkonBitmap = EQgn_prop_nrtyp_assistant_mask;
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::CBubbleImageManager()
+// Default constructor
+//
+// ---------------------------------------------------------------------------
+//
+CBubbleImageManager::CBubbleImageManager( TBool aFrameIcons ) :
+ iOrder( CompareSkinnedData ), iFrameIcons( aFrameIcons )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::NewL
+// Symbian OS two phased constructor
+//
+// ---------------------------------------------------------------------------
+//
+CBubbleImageManager* CBubbleImageManager::NewL( TBool aFrameIcons )
+ {
+ CBubbleImageManager* self = new( ELeave ) CBubbleImageManager(
+ aFrameIcons );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::ConstructL
+// Symbian OS two phased constructor
+//
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::ConstructL()
+ {
+ LoadCachedBitmapsL();
+
+ iBitmapInitializer = CIdle::NewL( CActive::EPriorityIdle );
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::~CBubbleImageManager()
+// Destructor
+//
+// ---------------------------------------------------------------------------
+//
+CBubbleImageManager::~CBubbleImageManager()
+ {
+ iSkinnedBitmaps.ResetAndDestroy();
+
+ if ( iBitmapInitializer )
+ {
+ iBitmapInitializer->Cancel();
+ }
+ delete iBitmapInitializer;
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::SetBitmapToImage
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::SetBitmapToImage( CEikImage*& aImage ,
+ const TBMIcons& aPicture )
+ {
+ // Check the paramater is valid.
+ if ( aImage == NULL )
+ {
+ return;
+ }
+ SetBitmapToImage( *aImage , aPicture, (TBMIcons) KErrNotFound );
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::SetBitmapToImage
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::SetBitmapToImage( CEikImage*& aImage ,
+ const TBMIcons& aPicture,
+ const TBMIcons& aPictureMask
+ )
+ {
+ // Check that paramaters are valid and bitmaps exist.
+ if ( aImage == NULL )
+ {
+ return;
+ }
+ SetBitmapToImage( *aImage , aPicture, aPictureMask );
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::SetBitmapToImage
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::SetBitmapToImage( CEikImage& aImage ,
+ const TBMIcons& aPicture,
+ const TBMIcons& aPictureMask
+ )
+ {
+ // Check parameter range and load the bitmaps.
+ if ( !GetSkin( aImage, aPicture, aPictureMask ) )
+ {
+ // Failed, make image not visible
+ aImage.SetPicture( NULL , NULL );
+ aImage.MakeVisible( EFalse );
+ return;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::MapEnumToMbmFile
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::MapEnumToMbmFile( const TBMIcons aBmIcon,
+ TInt& aMbm,
+ TDes& aFileName ) const
+ {
+ aMbm = KBMIconIndex[aBmIcon].iconIndex;
+ switch ( KBMIconIndex[aBmIcon].fileIndex )
+ {
+ case ECallstatusIconfile:
+ aFileName = KBMMbmZDrive;
+ aFileName.Append( KDC_APP_BITMAP_DIR );
+ aFileName.Append( KBMCallStatusBitmapFile );
+ aFileName.ZeroTerminate();
+ break;
+ case EBubblemanagerIconfile:
+ BubbleUtils::BubbleIconFileName( aFileName );
+ break;
+ case EAvkonIconfile:
+ aFileName = AknIconUtils::AvkonIconFileName();
+ break;
+ default:
+ Panic( EBMPanicImages );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::MapEnumToSkin
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::MapEnumToSkin( const TBMIcons aBmIcon,
+ TAknsItemID& aItemId,
+ TInt& aColorTableIndex ) const
+ {
+ switch ( aBmIcon )
+ {
+ case EQgn_indi_call_active:
+ aItemId = KAknsIIDQgnIndiCallActive;
+ break;
+ case EQgn_indi_call_active_cyph_off:
+ aItemId = KAknsIIDQgnIndiCallActiveCyphOff;
+ break;
+ case EQgn_indi_call_disconn:
+ aItemId = KAknsIIDQgnIndiCallDisconn;
+ break;
+ case EQgn_indi_call_disconn_cyph_off:
+ aItemId = KAknsIIDQgnIndiCallDisconnCyphOff;
+ break;
+ case EQgn_indi_call_held:
+ aItemId = KAknsIIDQgnIndiCallHeld;
+ break;
+ case EQgn_indi_call_held_cyph_off:
+ aItemId = KAknsIIDQgnIndiCallHeldCyphOff;
+ break;
+ case EQgn_indi_call_active_2:
+ aItemId = KAknsIIDQgnIndiCallActive2;
+ break;
+ case EQgn_indi_call_video_1:
+ aItemId = KAknsIIDQgnIndiCallVideo1;
+ break;
+ case EQgn_indi_call_video_callsta_1:
+ aItemId = KAknsIIDQgnIndiCallVideoCallsta1;
+ break;
+ case EQgn_indi_call_video_disconn:
+ aItemId = KAknsIIDQgnIndiCallVideoDisconn;
+ break;
+ case EQgn_indi_call_active_emergency:
+ aItemId = KAknsIIDQgnIndiCallActiveEmergency;
+ break;
+ case EQgn_graf_call_first_one_active:
+ aItemId = KAknsIIDQgnGrafCallFirstOneActive;
+ break;
+ case EQgn_graf_call_first_one_disconn:
+ aItemId = KAknsIIDQgnGrafCallFirstOneDisconn;
+ break;
+ case EQgn_graf_call_first_one_held:
+ aItemId = KAknsIIDQgnGrafCallFirstOneHeld;
+ break;
+ case EQgn_graf_call_rec_big:
+ aItemId = KAknsIIDQgnGrafCallRecBig;
+ break;
+ case EQgn_graf_call_rec_big_disconn:
+ aItemId = KAknsIIDQgnGrafCallRecBigDisconn;
+ break;
+ case EQgn_graf_call_rec_big_right:
+ aItemId = KAknsIIDQgnGrafCallRecBigRight;
+ break;
+ case EQgn_graf_call_rec_big_right_disconn:
+ aItemId = KAknsIIDQgnGrafCallRecBigRightDisconn;
+ break;
+ case EQgn_indi_call_waiting_1:
+ aItemId = KAknsIIDQgnIndiCallWaiting1;
+ break;
+ case EQgn_indi_call_waiting_cyph_off_1:
+ aItemId = KAknsIIDQgnIndiCallWaitingCyphOff;
+ break;
+ case EQgn_indi_call_waiting_disconn:
+ aItemId = KAknsIIDQgnIndiCallWaitingDisconn;
+ break;
+ case EQgn_indi_call_waiting_disconn_cyph_off:
+ aItemId = KAknsIIDQgnIndiCallWaitingDisconnCyphOff;
+ break;
+ case EQgn_graf_call_first_one_active_emergency:
+ aItemId = KAknsIIDQgnGrafCallFirstOneActiveEmergency;
+ break;
+ case EQgn_graf_call_two_active_emergency:
+ aItemId = KAknsIIDQgnGrafCallTwoActiveEmergency;
+ break;
+ case EQgn_graf_call_conf_five:
+ aItemId = KAknsIIDQgnGrafCallConfFive;
+ break;
+ case EQgn_graf_call_conf_four:
+ aItemId = KAknsIIDQgnGrafCallConfFour;
+ break;
+ case EQgn_graf_call_conf_three:
+ aItemId = KAknsIIDQgnGrafCallConfThree;
+ break;
+ case EQgn_graf_call_conf_two:
+ aItemId = KAknsIIDQgnGrafCallConfTwo;
+ break;
+ case EQgn_graf_call_first_three_active:
+ aItemId = KAknsIIDQgnGrafCallFirstThreeActive;
+ break;
+ case EQgn_graf_call_first_three_disconn:
+ aItemId = KAknsIIDQgnGrafCallFirstThreeDisconn;
+ break;
+ case EQgn_graf_call_first_three_held:
+ aItemId = KAknsIIDQgnGrafCallFirstThreeHeld;
+ break;
+ case EQgn_graf_call_first_two_active:
+ aItemId = KAknsIIDQgnGrafCallFirstTwoActive;
+ break;
+ case EQgn_graf_call_first_two_disconn:
+ aItemId = KAknsIIDQgnGrafCallFirstTwoDisconn;
+ break;
+ case EQgn_graf_call_first_two_held:
+ aItemId = KAknsIIDQgnGrafCallFirstTwoHeld;
+ break;
+ case EQgn_graf_call_first_wait_active:
+ aItemId = KAknsIIDQgnGrafCallFirstWaitActive;
+ break;
+ case EQgn_graf_call_first_wait_disconn:
+ aItemId = KAknsIIDQgnGrafCallFirstWaitDisconn;
+ break;
+ case EQgn_graf_call_hidden_held:
+ aItemId = KAknsIIDQgnGrafCallHiddenHeld;
+ break;
+ case EQgn_graf_call_rec_big_left:
+ aItemId = KAknsIIDQgnGrafCallRecBigLeft;
+ break;
+ case EQgn_graf_call_rec_big_left_disconn:
+ aItemId = KAknsIIDQgnGrafCallRecBigLeftDisconn;
+ break;
+ case EQgn_graf_call_rec_small_left:
+ aItemId = KAknsIIDQgnGrafCallRecSmallLeft;
+ break;
+ case EQgn_graf_call_rec_small_right:
+ aItemId = KAknsIIDQgnGrafCallRecSmallRight;
+ break;
+ case EQgn_graf_call_rec_small_right_disconn:
+ aItemId = KAknsIIDQgnGrafCallRecSmallRightDisconn;
+ break;
+ case EQgn_graf_call_rec_bigger:
+ aItemId = KAknsIIDQgnGrafCallRecBigger;
+ break;
+ case EQgn_graf_call_second_three_active:
+ aItemId = KAknsIIDQgnGrafCallSecondThreeActive;
+ break;
+ case EQgn_graf_call_second_three_disconn:
+ aItemId = KAknsIIDQgnGrafCallSecondThreeDisconn;
+ break;
+ case EQgn_graf_call_second_three_held:
+ aItemId = KAknsIIDQgnGrafCallSecondThreeHeld;
+ break;
+ case EQgn_graf_call_second_two_active:
+ aItemId = KAknsIIDQgnGrafCallSecondTwoActive;
+ break;
+ case EQgn_graf_call_second_two_disconn:
+ aItemId = KAknsIIDQgnGrafCallSecondTwoDisconn;
+ break;
+ case EQgn_graf_call_second_two_held:
+ aItemId = KAknsIIDQgnGrafCallSecondTwoHeld;
+ break;
+ case EQgn_indi_call_active_conf:
+ aItemId = KAknsIIDQgnIndiCallActiveConf;
+ break;
+ case EQgn_indi_call_active_conf_cyph_off:
+ aItemId = KAknsIIDQgnIndiCallActiveConfCyphOff;
+ break;
+ case EQgn_indi_call_active_cyph_off_2:
+ aItemId = KAknsIIDQgnIndiCallActiveCyphOff2;
+ break;
+ case EQgn_indi_call_disconn_conf:
+ aItemId = KAknsIIDQgnIndiCallDisconnConf;
+ break;
+ case EQgn_indi_call_disconn_conf_cyph_off:
+ aItemId = KAknsIIDQgnIndiCallDisconnConfCyphOff;
+ break;
+ case EQgn_indi_call_held_conf:
+ aItemId = KAknsIIDQgnIndiCallHeldConf;
+ break;
+ case EQgn_indi_call_held_conf_cyph_off:
+ aItemId = KAknsIIDQgnIndiCallHeldConfCyphOff;
+ break;
+ case EQgn_indi_call_muted:
+ aItemId = KAknsIIDQgnIndiCallMuted;
+ break;
+ case EQgn_indi_call_waiting_2:
+ aItemId = KAknsIIDQgnIndiCallWaiting2;
+ break;
+ case EQgn_indi_call_waiting_cyph_off_2:
+ aItemId = KAknsIIDQgnIndiCallWaitingCyphOff2;
+ break;
+ case EQgn_indi_call_video_2:
+ aItemId = KAknsIIDQgnIndiCallVideo2;
+ break;
+ case EQgn_indi_call_video_callsta_2:
+ aItemId = KAknsIIDQgnIndiCallVideoCallsta2;
+ break;
+ case EQgn_indi_call_video_callsta_disconn:
+ aItemId = KAknsIIDQgnIndiCallVideoCallstaDisconn;
+ break;
+ case EQgn_indi_call_voip_active:
+ aItemId = KAknsIIDQgnIndiCallVoipActive;
+ break;
+ case EQgn_indi_call_voip_active_2:
+ aItemId = KAknsIIDQgnIndiCallVoipActive2;
+ break;
+ case EQgn_indi_call_voip_disconn:
+ aItemId = KAknsIIDQgnIndiCallVoipDisconn;
+ break;
+ case EQgn_indi_call_voip_held:
+ aItemId = KAknsIIDQgnIndiCallVoipHeld;
+ break;
+ case EQgn_indi_call_voip_waiting_1:
+ aItemId = KAknsIIDQgnIndiCallVoipWaiting1;
+ break;
+ case EQgn_indi_call_voip_waiting_2:
+ aItemId = KAknsIIDQgnIndiCallVoipWaiting2;
+ break;
+ case EQgn_indi_call_voip_callsta_disconn:
+ aItemId = KAknsIIDQgnIndiCallVoipCallstaDisconn;
+ break;
+ case EQgn_graf_call_image_1:
+ aItemId = KAknsIIDQgnGrafCallImage1;
+ break;
+ case EQgn_indi_call4_image_mask_prt:
+ aItemId = KAknsIIDNone;
+ break;
+ case EQgn_indi_call4_image_mask_lsc:
+ aItemId = KAknsIIDNone;
+ break;
+
+// Colour changes
+ case EQgn_indi_call_line2:
+ aItemId = KAknsIIDQgnIndiCallLine2;
+ aColorTableIndex = EAknsCIQsnIconColorsCG11;
+ break;
+ case EQgn_indi_call_cyphering_off:
+ aItemId = KAknsIIDQgnIndiCallCypheringOff;
+ aColorTableIndex = EAknsCIQsnIconColorsCG11;
+ break;
+ case EQgn_indi_call_diverted:
+ aItemId = KAknsIIDQgnIndiCallDiverted;
+ aColorTableIndex = EAknsCIQsnIconColorsCG11;
+ break;
+
+ // Not skinned
+ case EQgn_prop_nrtyp_home_div:
+ aItemId = KAknsIIDQgnPropNrtypHomeDiv;
+ break;
+ case EQgn_prop_nrtyp_mobile_div:
+ aItemId = KAknsIIDQgnPropNrtypMobileDiv;
+ break;
+ case EQgn_prop_nrtyp_phone_div:
+ aItemId = KAknsIIDQgnPropNrtypPhoneDiv;
+ break;
+ case EQgn_prop_nrtyp_work_div:
+ aItemId = KAknsIIDQgnPropNrtypWorkDiv;
+ break;
+
+ // From avkon.mbm
+ case EQgn_prop_nrtyp_fax:
+ aItemId = KAknsIIDQgnPropNrtypFax;
+ break;
+ case EQgn_prop_nrtyp_home:
+ aItemId = KAknsIIDQgnPropNrtypPhone;
+ break;
+ case EQgn_prop_nrtyp_mobile:
+ aItemId = KAknsIIDQgnPropNrtypMobile;
+ break;
+ case EQgn_prop_nrtyp_pager:
+ aItemId = KAknsIIDQgnPropNrtypPager;
+ break;
+ case EQgn_prop_nrtyp_phone:
+ aItemId = KAknsIIDQgnPropNrtypPhone;
+ break;
+ case EQgn_prop_nrtyp_work:
+ aItemId = KAknsIIDQgnPropNrtypPhone;
+ break;
+ case EQgn_prop_nrtyp_voip:
+ aItemId = KAknsIIDQgnPropNrtypVoip;
+ break;
+ case EQgn_prop_nrtyp_car:
+ aItemId = KAknsIIDQgnPropNrtypCar;
+ break;
+ case EQgn_prop_nrtyp_assistant:
+ aItemId = KAknsIIDQgnPropNrtypAssistant;
+ break;
+ default:
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::ClearSkinsCache
+//
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::ClearSkinsCache()
+ {
+ iSkinnedBitmaps.ResetAndDestroy();
+
+ TRAP_IGNORE( LoadCachedBitmapsL() );
+
+ PrepareCachedBitmaps();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::CompareSkinnedData
+// ---------------------------------------------------------------------------
+//
+TInt CBubbleImageManager::CompareSkinnedData(
+ const CBubbleSkinBitmap& aSkinnedBitmap1,
+ const CBubbleSkinBitmap& aSkinnedBitmap2 )
+ {
+ if ( aSkinnedBitmap1.BitmapIndex() > aSkinnedBitmap2.BitmapIndex() )
+ {
+ return 1;
+ }
+ if ( aSkinnedBitmap1.BitmapIndex() < aSkinnedBitmap2.BitmapIndex() )
+ {
+ return -1;
+ }
+ return 0;
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::GetSkin
+// ---------------------------------------------------------------------------
+//
+TBool CBubbleImageManager::GetSkin( CEikImage& aImage,
+ const TBMIcons aBmIcon,
+ const TBMIcons aBmIconMask )
+ {
+ if ( aBmIcon < 0 || aBmIcon > KBMLastAvkonBitmap )
+ {
+ return EFalse;
+ }
+
+ CBubbleSkinBitmap skinnedBitmap;
+ skinnedBitmap.SetBitmapIndex( aBmIcon );
+ skinnedBitmap.SetSkinnedBitmap( NULL );
+ skinnedBitmap.SetSkinnedMask( NULL );
+ TInt index = iSkinnedBitmaps.FindInOrder( &skinnedBitmap, iOrder );
+
+ CFbsBitmap* bitmap = NULL;
+ CFbsBitmap* mask = NULL;
+ if ( index != KErrNotFound )
+ {
+ bitmap = iSkinnedBitmaps[ index ]->SkinnedBitmap();
+ mask = iSkinnedBitmaps[ index ]->SkinnedMask();
+ }
+
+ if ( bitmap == NULL )
+ {
+ TRAP_IGNORE(
+ LoadAndAppendSkinL( aBmIcon, aBmIconMask, bitmap, mask ) );
+ }
+
+ if ( bitmap )
+ {
+ aImage.SetPicture( bitmap, mask ); // Mask might be NULL
+ aImage.SetPictureOwnedExternally( ( aBmIcon <= LastCachedIcon() ) ); // cached bitmaps are owned here
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::LoadAndAppendSkinL
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::LoadAndAppendSkinL( const TBMIcons aBmIcon,
+ const TBMIcons aBmIconMask,
+ CFbsBitmap*& aBitmap,
+ CFbsBitmap*& aMask )
+
+ {
+ TInt mbmBitmapIndex = 0;
+ TInt mbmMaskIndex = KErrNotFound;
+ TInt colorTableIndex( 0 );
+ TAknsItemID skinItemId( KAknsIIDNone );
+ MapEnumToMbmFile( aBmIcon , mbmBitmapIndex , iMbmFileBuffer );
+
+ if ( mbmBitmapIndex == KErrNotFound )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ if ( aBmIconMask >= 0 && aBmIconMask <= KBMLastAvkonBitmap )
+ {
+ MapEnumToMbmFile( aBmIconMask , mbmMaskIndex , iMbmFileBuffer );
+ }
+ MapEnumToSkin( aBmIcon, skinItemId, colorTableIndex );
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+ if( colorTableIndex != 0 )
+ {
+ AknsUtils::CreateColorIconLC( skin, skinItemId,
+ KAknsIIDQsnIconColors,
+ colorTableIndex,
+ aBitmap, aMask,
+ iMbmFileBuffer,
+ mbmBitmapIndex, mbmMaskIndex,
+ KRgbBlack );
+ }
+ else
+ {
+ if ( mbmMaskIndex != KErrNotFound )
+ {
+ AknsUtils::CreateIconLC( skin, skinItemId,
+ aBitmap, aMask, iMbmFileBuffer,
+ mbmBitmapIndex, mbmMaskIndex );
+ }
+ else
+ {
+ AknsUtils::CreateIconLC( skin, skinItemId,
+ aBitmap, iMbmFileBuffer, mbmBitmapIndex );
+ }
+ }
+
+
+ if ( aBmIcon <= LastCachedIcon() )
+ {
+ CBubbleSkinBitmap* skinnedBitmap = new (ELeave) CBubbleSkinBitmap();
+ CleanupStack::PushL( skinnedBitmap );
+ skinnedBitmap->SetBitmapIndex( aBmIcon );
+ //skinnedBitmap->SetBitmapSkinItemID( skinItemId );
+ skinnedBitmap->SetSkinnedBitmap( aBitmap );
+ skinnedBitmap->SetSkinnedMask( aMask );
+ User::LeaveIfError(
+ iSkinnedBitmaps.InsertInOrder( skinnedBitmap, iOrder ) );
+ CleanupStack::Pop( skinnedBitmap ); // Ownership was given to iSkinnedBitmaps
+ }
+
+
+ if ( colorTableIndex != 0 )
+ {
+ CleanupStack::Pop( 2 ); // aBitmap, aMask
+ }
+ else
+ {
+ if ( mbmMaskIndex != KErrNotFound )
+ {
+ CleanupStack::Pop(); // aMask
+ }
+ CleanupStack::Pop(); // aBitmap
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::DoInitializeBitmaps
+// ---------------------------------------------------------------------------
+//
+TBool CBubbleImageManager::DoInitializeBitmaps()
+ {
+ // Bubble rect for single call or number entry
+ TAknWindowLineLayout bottomBubble =
+ BubbleLayout::popup_call_audio_in_window( 1 );
+ TAknLayoutRect bottomBubbleRect;
+ bottomBubbleRect.LayoutRect( BubbleLayout::MainPaneRect(),
+ bottomBubble );
+
+ TInt iconCount = iSkinnedBitmaps.Count();
+ if ( iBitmapInitIndex < iconCount )
+ {
+ CBubbleSkinBitmap* skinnedBitmap = iSkinnedBitmaps[ iBitmapInitIndex ];
+
+ switch ( skinnedBitmap->BitmapIndex() )
+ {
+ // Small call status icon
+ case EQgn_indi_call_active:
+ case EQgn_indi_call_active_2:
+ case EQgn_indi_call_disconn:
+ case EQgn_indi_call_held:
+ case EQgn_indi_call_video_callsta_1:
+ case EQgn_indi_call_video_callsta_2:
+ case EQgn_indi_call_video_callsta_disconn:
+ case EQgn_indi_call_voip_active:
+ case EQgn_indi_call_voip_active_2:
+ case EQgn_indi_call_voip_held:
+ case EQgn_indi_call_voip_callsta_disconn:
+ {
+ TAknWindowLineLayout smallCallStatusIcon =
+ BubbleLayout::popup_call_audio_first_window_1_elements_1();
+ TAknLayoutRect smallCallStatusIconRect;
+ smallCallStatusIconRect.LayoutRect( bottomBubbleRect.Rect(),
+ smallCallStatusIcon );
+
+ AknIconUtils::SetSize( skinnedBitmap->SkinnedBitmap(),
+ smallCallStatusIconRect.Rect().Size() );
+ break;
+ }
+
+ // Big call status icon
+ case EQgn_indi_call_waiting_1:
+ case EQgn_indi_call_waiting_2:
+ case EQgn_indi_call_waiting_disconn:
+ case EQgn_indi_call_video_1:
+ case EQgn_indi_call_video_2:
+ case EQgn_indi_call_video_disconn:
+ case EQgn_indi_call_voip_waiting_1:
+ case EQgn_indi_call_voip_waiting_2:
+ case EQgn_indi_call_voip_disconn:
+ {
+ TAknWindowLineLayout bigCallStatusIcon =
+ BubbleLayout::popup_call_audio_in_window_1_elements_1();
+ TAknLayoutRect bigCallStatusIconRect;
+ bigCallStatusIconRect.LayoutRect( bottomBubbleRect.Rect(),
+ bigCallStatusIcon );
+
+ AknIconUtils::SetSize( skinnedBitmap->SkinnedBitmap(),
+ bigCallStatusIconRect.Rect().Size() );
+ break;
+ }
+
+ // Bubble graphics
+ case EQgn_graf_call_rec_big:
+ case EQgn_graf_call_rec_big_disconn:
+ case EQgn_graf_call_first_one_active:
+ case EQgn_graf_call_first_one_disconn:
+ case EQgn_graf_call_first_one_held:
+ {
+ AknIconUtils::SetSize( skinnedBitmap->SkinnedBitmap(),
+ bottomBubbleRect.Rect().Size(),
+ EAspectRatioNotPreserved );
+ break;
+ }
+ default:
+ // do nothing
+ break;
+ }
+
+ iBitmapInitIndex++;
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::InitializeBitmap
+// ---------------------------------------------------------------------------
+//
+TInt CBubbleImageManager::InitializeBitmaps( TAny* aThis )
+ {
+ return static_cast<CBubbleImageManager*>( aThis )->DoInitializeBitmaps();
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::PrepareCachedBitmaps
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::PrepareCachedBitmaps()
+ {
+ iBitmapInitIndex = 0;
+ iBitmapInitializer->Cancel();
+ iBitmapInitializer->Start( TCallBack( InitializeBitmaps, this ) );
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::LoadCachedBitmapsL
+// ---------------------------------------------------------------------------
+//
+void CBubbleImageManager::LoadCachedBitmapsL()
+ {
+ // Load essential bitmaps right away
+ CFbsBitmap* newBitmap = NULL;
+ CFbsBitmap* newMask = NULL;
+ TInt lastIcon = LastCachedIcon();
+ for ( TInt i = 0 ; i < lastIcon ; i++ )
+ {
+ LoadAndAppendSkinL( (TBMIcons) i, // icon
+ (TBMIcons) (i+1), // mask
+ newBitmap,
+ newMask );
+ newBitmap = NULL;
+ newMask = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CBubbleImageManager::LastCachedIcon
+// ---------------------------------------------------------------------------
+//
+TInt CBubbleImageManager::LastCachedIcon()
+ {
+ if ( iFrameIcons )
+ {
+ return KBMLastCachedBitmap2;
+ }
+ else
+ {
+ return KBMLastCachedBitmap1;
+ }
+ }
+
+// End of File