diff -r 000000000000 -r eb1f2e154e89 textinput/peninputcommonctrls/src/peninputdropdownlist/peninputbitmapdb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputbitmapdb.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,370 @@ +/* +* 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: bitmap db manager,which is used by drop down list +* +*/ + + +#include +#include +#include +#include +#include +#include +#include "peninputbitmapdb.h" + +const TUint32 KDefaultTextColor = 0x000000; +const TUint32 KDefaultFrameColor = 0x000000; + +const TInt KInvalidBmp = -1; + +const TInt KTransparency[256] = + { + 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, + 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, + 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 19, + 19, 19, 20, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 24, 24, + 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 29, + 30, 30, 30, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, + 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 40, 40, 40, + 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 46, + 46, 46, 47, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 50, 51, 51, + 51, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 56, + 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, + 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, + 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 73, + 73, 73, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77 + }; + +// ======== MEMBER FUNCTIONS ======== + +// Implementation of Class CBitmapDb + +// ----------------------------------------------------------------------------- +// CBitmapDb::NewL +// factory function +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CBitmapDb* CBitmapDb::NewL(TResourceReader& aReader, + TSize aBitmapSize, + TSize aExpandSize, + TSize aSpinBtnSize) + { + CBitmapDb* self = new (ELeave) CBitmapDb(); + CleanupStack::PushL(self); + self->ConstructL(aReader, + aBitmapSize, + aExpandSize, + aSpinBtnSize); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CBitmapDb::~CBitmapDb +// destructor function +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CBitmapDb::~CBitmapDb() + { + // Delete all bitmap + iBmpList.ResetAndDestroy(); + iBmpList.Close(); + } + +// ----------------------------------------------------------------------------- +// CBitmapDb::GetBitMap +// get bitmap according to the assigned type +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +const CFbsBitmap* CBitmapDb::GetBitMap(const TBitmapType aType) + { + // Return corresponding bitmap according aType + return iBmpList[aType]; + } + +// ----------------------------------------------------------------------------- +// CBitmapDb::CreateIconL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CBitmapDb::CreateIconL(const TDesC& aBmpFileName, + TAknsItemID aId, + CFbsBitmap** aBmp, + CFbsBitmap** aMaskBmp, + TInt aBmpId, + TInt aMaskBmpId, + TSize aSize, + TBool aColorIcon) + { + if (aBmpId != KInvalidBmp) + { + if (aMaskBmpId != KInvalidBmp) + { + if (aColorIcon) + { + AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(), + aId, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG30, + *aBmp, + *aMaskBmp, + aBmpFileName, + aBmpId, + aMaskBmpId, + AKN_LAF_COLOR( 0 ) ); + } + else + { + AknsUtils::CreateIconL(AknsUtils::SkinInstance(), + aId, + *aBmp, + *aMaskBmp, + aBmpFileName, + aBmpId, + aMaskBmpId); + } + + AknIconUtils::SetSize(*aMaskBmp, aSize, EAspectRatioNotPreserved); + } + else + { + AknsUtils::CreateIconL(AknsUtils::SkinInstance(), + aId, + *aBmp, + aBmpFileName, + aBmpId); + } + + AknIconUtils::SetSize(*aBmp, aSize, EAspectRatioNotPreserved); + } + } + +void CBitmapDb::ConstructFromResourceL(TResourceReader& aReader, + TSize aBitmapSize, + TSize aExpandSize, + TSize aSpinBtnSize) + { + for (TInt i = 0; i < EBitmapLastType + 1; ++i) + { + delete iBmpList[i]; + iBmpList[i] = NULL; + } + + // Read mbm file name from the aReader + TPtrC bmpFile = aReader.ReadTPtrC(); + TInt imgMajorSkinId = aReader.ReadInt32(); + + TAknsItemID id; + + for (TInt i = 0; i < EBitmapLastType + 1; i+=2) + { + TInt bmpId = aReader.ReadInt16(); + TInt maskId = aReader.ReadInt16(); + TInt minorSkinId = aReader.ReadInt16(); + + TSize bmpsize = aBitmapSize; + + if ((i >= EBitmapNextDisable && i < EBitmapNextPressMask) || + (i >= EBitmapPrevious && i < EBitmapPreviousPressMask)) + { + bmpsize = aSpinBtnSize; + } + else if (i >= EBitmapExpand && i < EBitmapExpandPressMask) + { + bmpsize = aExpandSize; + } + + id.Set(imgMajorSkinId, minorSkinId); + + TBool colorIcon; + if ( i == EBitmapNext || i == EBitmapNextMask || + i == EBitmapClose || i == EBitmapCloseMask || + i == EBitmapPrevious || i == EBitmapPreviousMask || + i == EBitmapExpand || i == EBitmapExpandMask) + { + colorIcon = ETrue; + } + else + { + colorIcon = EFalse; + } + + CreateIconL(bmpFile, + id, + &(iBmpList[i]), + &(iBmpList[i+1]), + bmpId, + maskId, + bmpsize, + colorIcon); + + if( i == EBitmapNextDisable ) + { + CFbsBitmap* newMask = NULL; + CreateDimmedMaskL( newMask, iBmpList[i+1]); + delete iBmpList[i+1]; + iBmpList[i+1] = newMask; + } + } + + TInt colorMajorSkinId = aReader.ReadInt32(); + TInt skinitemid = aReader.ReadInt16(); + TInt textcoloridx = aReader.ReadInt16(); + + id.Set(colorMajorSkinId, skinitemid); + TInt error = AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), + iTextColor, + id, + textcoloridx); + + if (error != KErrNone) + { + iTextColor = TRgb(KDefaultTextColor); + } + + TInt frameMajorSkinId = aReader.ReadInt32(); + skinitemid = aReader.ReadInt16(); + TInt framecoloridx = aReader.ReadInt16(); + + id.Set(frameMajorSkinId, skinitemid); + error = AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), + iFrameColor, + id, + framecoloridx); + + if (error != KErrNone) + { + iFrameColor = TRgb(KDefaultFrameColor); + } + } + +// ----------------------------------------------------------------------------- +// CBitmapDb::ConstructL +// 2nd construct function +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CBitmapDb::ConstructL(TResourceReader& aReader, + TSize aBitmapSize, + TSize aExpandSize, + TSize aSpinBtnSize) + { + for (TInt i = 0; i < EBitmapLastType + 1; ++i) + { + iBmpList.AppendL(NULL); + } + + ConstructFromResourceL(aReader, + aBitmapSize, + aExpandSize, + aSpinBtnSize); + } + +// ----------------------------------------------------------------------------- +// CBitmapDb::TextColor +// Get text color of drop down list +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +const TRgb CBitmapDb::TextColor() + { + return iTextColor; + } + +// ----------------------------------------------------------------------------- +// CBitmapDb::FrameColor +// Get frame color of drop down list +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +const TRgb CBitmapDb::FrameColor() + { + return iFrameColor; + } +// --------------------------------------------------------------------------- +// CBitmapDb::CreateDimmedMaskL +// This methods shall be called by the container's SizeChanged handler +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CBitmapDb::CreateDimmedMaskL( CFbsBitmap*& aDimmedMask, + const CFbsBitmap* aMask + /*TScaleMode aScaleMode*/ ) + { + if (aMask && aMask->DisplayMode() == EGray256) + { + delete aDimmedMask; + aDimmedMask = NULL; + + aDimmedMask = new (ELeave) CFbsBitmap; + + User::LeaveIfError(aDimmedMask->Create(aMask->SizeInPixels(), EGray256)); + CleanupStack::PushL(aDimmedMask); + + CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL(aDimmedMask); + CleanupStack::PushL(bitmapDevice); + + CFbsBitGc* bitGc(NULL); + User::LeaveIfError(bitmapDevice->CreateContext(bitGc)); + CleanupStack::PushL(bitGc); + + bitGc->SetPenStyle(CGraphicsContext::ESolidPen); + bitGc->BitBlt(TPoint(0, 0), aMask); + + aDimmedMask->LockHeap(); + TInt w = aMask->SizeInPixels().iWidth; + TInt h = aMask->SizeInPixels().iHeight; + TInt dataStride = aMask->DataStride() - w; + unsigned char* address = (unsigned char *)aDimmedMask->DataAddress(); + + for ( TInt i = 0; i < h; ++i ) + { + for ( TInt j = 0; j < w; ++j ) + { + *address = KTransparency[*address]; + ++address; + } + address += dataStride; + } + + aDimmedMask->UnlockHeap(); + + //AknIconUtils::SetSize(aDimmedMask, aMask->SizeInPixels(), aScaleMode); + + CleanupStack::PopAndDestroy(2); // bitmapDevice, bitGc + CleanupStack::Pop(1); // aDimmedMask + } + + } + +void CBitmapDb::SizeChanged(TSize aSize) + { + for (TInt i = 0; i < iBmpList.Count(); i++) + { + AknIconUtils::SetSize(iBmpList[i], aSize, EAspectRatioNotPreserved); + } + // dimmed mask can't use AknIconUtils::SetSize change its size. + if( iBmpList[EBitmapNextDisableMask] && iBmpList[EBitmapNextMask] ) + { + CFbsBitmap* newMask = NULL; + TRAP_IGNORE(CreateDimmedMaskL( newMask, iBmpList[EBitmapNextMask])); + delete iBmpList[EBitmapNextDisableMask]; + iBmpList[EBitmapNextDisableMask] = newMask; + } + } +// End Of File