diff -r 000000000000 -r 05e9090e2422 uigraphics/AknIcon/src/AknBitmap.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uigraphics/AknIcon/src/AknBitmap.cpp Thu Dec 17 09:14:12 2009 +0200 @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2002 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: Implementation of class CAknBitmap. +* +*/ + + + + +// INCLUDE FILES +#include "AknBitmap.h" +#include "AknIconSrvDef.h" +#include "AknIconSrvTlsData.h" +#include "AknIconPanic.h" +#include "AknIconManager.h" + +// CONSTANTS + +// bit flags + +const TInt KFlagSharedByIconSrv = 0x0001; // Initialized and shared by AknIconSrv +const TInt KFlagMaskDestroyed = 0x0002; // Mask has been destroyed for the bitmap +const TInt KFlagIsAppIcon = 0x0004; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CAknBitmap::CAknBitmap +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CAknBitmap::CAknBitmap() + { + } + +CAknBitmap* CAknBitmap::NewL( CAknIconManager& aManager ) + { + CAknBitmap* bitmap = new( ELeave ) CAknBitmap(); + CleanupStack::PushL( bitmap ); + bitmap->ConstructL( aManager ); + CleanupStack::Pop(); + return bitmap; + } + +void CAknBitmap::ConstructL( CAknIconManager& aManager ) + { + AddToPointerListL(); + + // This needs to be done in the end of ConstructL. + iManager = &aManager; + iManager->Ref(); + } + +TInt CAknBitmap::Extension_(TUint aExtensionId, TAny*& a0, TAny* a1) + { + if(aExtensionId == KExtensionId) + { + return KErrNone; + } + return CFbsBitmap::Extension_(aExtensionId, a0, a1); + } + +// Destructor +CAknBitmap::~CAknBitmap() + { + Reset(); + + if ( iManager ) + { + iManager->Unref(*this); + } + + RemoveFromPointerList(); + } + +// ----------------------------------------------------------------------------- +// CAknBitmap::AddToPointerListL +// ----------------------------------------------------------------------------- +// +void CAknBitmap::AddToPointerListL() + { + // Add this pointer to the list of CAknBitmaps + CAknIconSrvTlsData* data = static_cast( Dll::Tls() ); + + __ASSERT_ALWAYS( data, + User::Panic( KAknIconPanicCategory, EClientSessionNotConnected ) ); + + User::LeaveIfError( + data->iPointers.InsertInOrder( + reinterpret_cast( static_cast( this ) ) ) ); + } + +// ----------------------------------------------------------------------------- +// CAknBitmap::RemoveFromPointerList +// ----------------------------------------------------------------------------- +// +void CAknBitmap::RemoveFromPointerList() + { + // Remove this pointer to the list of CAknBitmaps + CAknIconSrvTlsData* data = static_cast( Dll::Tls() ); + + __ASSERT_ALWAYS( data, + User::Panic( KAknIconPanicCategory, EClientSessionNotConnected ) ); + + TInt index = data->iPointers.FindInOrder( + reinterpret_cast( static_cast( this ) ) ); + + if ( index >= 0 ) + { + data->iPointers.Remove( index ); + } + } + +// ----------------------------------------------------------------------------- +// CAknBitmap::SharedByIconSrv +// ----------------------------------------------------------------------------- +// +TBool CAknBitmap::SharedByIconSrv() + { + return iFlags & KFlagSharedByIconSrv; + } + +// ----------------------------------------------------------------------------- +// CAknBitmap::SetSharedByIconSrv +// ----------------------------------------------------------------------------- +// +void CAknBitmap::SetSharedByIconSrv() + { + iFlags |= KFlagSharedByIconSrv; + } + +// ----------------------------------------------------------------------------- +// CAknBitmap::MaskDestroyed +// ----------------------------------------------------------------------------- +// +TBool CAknBitmap::MaskDestroyed() + { + return iFlags & KFlagMaskDestroyed; + } + +// ----------------------------------------------------------------------------- +// CAknBitmap::SetMaskDestroyed +// ----------------------------------------------------------------------------- +// +void CAknBitmap::SetMaskDestroyed() + { + iFlags |= KFlagMaskDestroyed; + } + +TBool CAknBitmap::IsAppIcon() const + { + return iFlags & KFlagIsAppIcon; + } + +void CAknBitmap::SetAppIcon() + { + iFlags |= KFlagIsAppIcon; + } + +void CAknBitmap::SetEnsuredSize(const TSize& aSize) + { + iEnsuredSize = aSize; + } + +TBool CAknBitmap::IsEnsuredSize(const TSize& aSize) const + { + return iEnsuredSize == aSize; + } + +// ----------------------------------------------------------------------------- +// CAknBitmap::Reset +// ----------------------------------------------------------------------------- +// +void CAknBitmap::Reset() + { + if ( iFlags & KFlagSharedByIconSrv ) + { + RAknIconSrvClient* client = RAknIconSrvClient::GetSession(); + client->FreeBitmap( *this ); + } + + CFbsBitmap::Reset(); + + iFlags &= ~(KFlagSharedByIconSrv|KFlagMaskDestroyed); + } + +// End of File