skins/AknSkins/src/AknsTemporaryBitmap.cpp
changeset 0 05e9090e2422
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/src/AknsTemporaryBitmap.cpp	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2004-2008 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:  Defines an internal class CAknsTemporaryBitmap which
+*                encapsulates a single temporary bitmap entry.
+*
+*/
+
+
+// INCLUDE FILES
+#include "AknsTemporaryBitmap.h"
+
+#include <fbs.h>
+#include <bitdev.h>
+
+#include "AknsDebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CAknsTemporaryBitmap::CAknsTemporaryBitmap( const TAknsItemID& aID,
+    const TSize& aSize, const TInt aKey, const TSize& aLayoutSize )
+    // Explicit initialization required here!
+    : iID( aID ), iSize( aSize ), iKey( aKey ),
+      iData( NULL ), iDev( NULL ), iGc( NULL ), iMorphing( EFalse ),
+      iLayoutSize(aLayoutSize)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CAknsTemporaryBitmap* CAknsTemporaryBitmap::NewL( const TAknsItemID& aID,
+    const TSize& aSize, const TInt aKey, const TBool aMorphing, const TSize& aLayoutSize )
+    {
+    CAknsTemporaryBitmap* self =
+        new (ELeave) CAknsTemporaryBitmap( aID, aSize, aKey, aLayoutSize );
+    // This value set outside constructor (to not confuse parameter construction
+    // for LinearOrder-based comparisons)
+    self->iMorphing = aMorphing;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Two-phased constructor (2nd phase).
+// -----------------------------------------------------------------------------
+//
+void CAknsTemporaryBitmap::ConstructL()
+    {
+    iData = CAknsMaskedBitmapItemData::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CAknsTemporaryBitmap::~CAknsTemporaryBitmap()
+    {
+    delete iData;
+    delete iDev;
+    delete iGc;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsTemporaryBitmap::Bitmap
+// -----------------------------------------------------------------------------
+//
+CFbsBitmap* CAknsTemporaryBitmap::Bitmap()
+    {
+    return iData->Bitmap();
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsTemporaryBitmap::Mask
+// -----------------------------------------------------------------------------
+//
+CFbsBitmap* CAknsTemporaryBitmap::Mask()
+    {
+    return iData->Mask();
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsTemporaryBitmap::ItemData
+// -----------------------------------------------------------------------------
+//
+CAknsMaskedBitmapItemData* CAknsTemporaryBitmap::ItemData()
+    {
+    return iData;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsTemporaryBitmap::IsMorphing
+// -----------------------------------------------------------------------------
+//
+TBool CAknsTemporaryBitmap::IsMorphing()
+    {
+    return iMorphing;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsTemporaryBitmap::ActivateGcL
+// -----------------------------------------------------------------------------
+//
+CFbsBitGc* CAknsTemporaryBitmap::ActivateGcL(
+    const TDisplayMode aMode, const TBool aMask )
+    {
+    CFbsBitmap* bmp = NULL;
+    if( !aMask )
+        {
+        bmp = new (ELeave) CFbsBitmap();
+        CleanupStack::PushL( bmp );
+        User::LeaveIfError( bmp->Create( iSize, aMode ) );
+        CleanupStack::Pop( bmp );
+        iData->DestroyAndSetBitmap( bmp );
+        }
+    else
+        {
+        bmp = new (ELeave) CFbsBitmap();
+        CleanupStack::PushL( bmp );
+        User::LeaveIfError( bmp->Create( iSize, aMode ) );
+        CleanupStack::Pop( bmp );
+        iData->DestroyAndSetMask( bmp );
+        }
+
+    if ( iDev )
+        {
+        delete iDev;
+        iDev = NULL;
+        }
+    iDev = CFbsBitmapDevice::NewL( bmp );
+    iDev->Resize( iSize );
+
+    if ( iGc )
+        {
+        delete iGc;
+        iGc = NULL;
+        }
+    iGc = CFbsBitGc::NewL();
+    iGc->Activate( iDev );
+    return iGc;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsTemporaryBitmap::ReleaseGc
+// -----------------------------------------------------------------------------
+//
+void CAknsTemporaryBitmap::ReleaseGc()
+    {
+    delete iGc;
+    iGc = NULL;
+    delete iDev;
+    iDev = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsTemporaryBitmap::LinearOrder
+// -----------------------------------------------------------------------------
+//
+TInt CAknsTemporaryBitmap::LinearOrder(
+    const CAknsTemporaryBitmap& aFirst,
+    const CAknsTemporaryBitmap& aSecond )
+    {
+    TInt idDiff = TAknsItemID::LinearOrder( aFirst.iID, aSecond.iID );
+    if( !idDiff )
+        {
+        TInt keyDiff = aFirst.iKey - aSecond.iKey;
+        if( !keyDiff )
+            {
+            TInt laysizeDif = aFirst.iLayoutSize.iWidth-aSecond.iLayoutSize.iWidth ?
+                aFirst.iLayoutSize.iWidth-aSecond.iLayoutSize.iWidth :
+                aFirst.iLayoutSize.iHeight-aSecond.iLayoutSize.iHeight;
+            if (!laysizeDif)
+                {
+               return aFirst.iSize.iWidth-aSecond.iSize.iWidth ?
+                   aFirst.iSize.iWidth-aSecond.iSize.iWidth :
+                   aFirst.iSize.iHeight-aSecond.iSize.iHeight;
+                }
+            else
+                {
+                return laysizeDif;
+                }
+            }
+        else
+            {
+            return keyDiff;
+            }
+        }
+    else
+        {
+        return idDiff;
+        }
+    }
+
+//  End of File