diff -r 000000000000 -r 094583676ce7 wvuing/wvvariant/Src/CCASkinVariant20.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvvariant/Src/CCASkinVariant20.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,296 @@ +/* +* Copyright (c) 2006 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: Active implementation of skin feature. +* +*/ + + + +// INCLUDE FILES +#include "CCASkinVariant20.h" +#include "CABitmapMapping.h" // defines the skinned bitmap ids +#include "ccaiconfileprovider.h" +#include "MCAOpBrandVariant.h" +#include "ChatDebugPrint.h" +#include "ChatDebugAssert.h" +#include +#include // skins +#include +#include +#include +#include +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::CCASkinVariant20 +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCASkinVariant20::CCASkinVariant20() + : iFs( CCoeEnv::Static()->FsSession() ) + { + } + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CCASkinVariant20::ConstructL( MCAOpBrandVariant* aOpBrandVariant ) + { + User::LeaveIfError( iFs.ShareProtected() ); + + iOpBrandVariant = aOpBrandVariant; + TRect mainPane( 0, 0, 0, 0 ); + + // Return value can be safely ignored. + // from AknLayoutUtils::LayoutMetricsRect documentation: + // + // Returns EFalse for status pane descendants if requested + // layout component is not available in current layout. For + // other components returns always ETrue (returned rectangle is + // from layout definition). + // + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, mainPane ); + + iBgContext = CAknsBasicBackgroundControlContext::NewL( + KAknsIIDQsnBgAreaMain, mainPane, EFalse ); + } + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CCASkinVariant20* CCASkinVariant20::NewL( MCAOpBrandVariant* aOpBrandVariant ) + { + CCASkinVariant20* self = new( ELeave ) CCASkinVariant20; + + CleanupStack::PushL( self ); + self->ConstructL( aOpBrandVariant ); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CCASkinVariant20::~CCASkinVariant20() + { + delete iBgContext; + delete iBitmapFile; + } + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::SkinFlag +// returns skins-enabled flag +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCASkinVariant20::SkinFlag() const + { + return CAknAppUi::EAknEnableSkin; + } + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::ClearChatListBoxBackGround +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCASkinVariant20::ClearChatListBoxBackGround( CWindowGc& aGc, + const TRect& aUsedPortionOfViewRect, + MAknsControlContext* aContext ) + { + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + AknsDrawUtils::Background( skin, aContext, NULL, aGc, + aUsedPortionOfViewRect ); + } + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::MainPaneBackgroundContext +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +MAknsControlContext* CCASkinVariant20::MainPaneBackgroundContext() const + { + return iBgContext; + } + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::UpdateLayout +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCASkinVariant20::UpdateLayout() + { + TRect screen( 0, 0, 0, 0 ); + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen ); + iBgContext->SetRect( screen ); + } + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::DrawSkinnedEditor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCASkinVariant20::DrawSkinnedEditor( const CCoeControl* aControl, + CWindowGc& aGc, + TRect& /*aParentRect*/, + TRect& aEditorRect, + TRect& aOutlineRect ) + { + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + // draw editor surroundings + AknsDrawUtils::BackgroundBetweenRects( skin, MainPaneBackgroundContext(), + aControl, aGc, aOutlineRect, + aEditorRect ); + + TRect innerRect( aOutlineRect ); + //why 6 ? don't ask me. It was 3x3 for 176x208. + innerRect.Shrink( TSize( 6, 6 ) ); + // draw editor frames + return AknsDrawUtils::DrawFrame( skin, aGc, aOutlineRect, innerRect, + KAknsIIDQsnFrInput, KAknsIIDQsnFrInputCenter ); + + } + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::LoadBitmapL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CGulIcon* CCASkinVariant20::LoadBitmapL( TInt aBitmapId, TInt aMaskId, + const TDesC& aFullPath, TBool aOverrideBrand, + TRgb* aCustomColor ) + { + CHAT_DP_TXT( "CCASkinVariant20::LoadBitmapL - start" ); + + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + + if ( iOpBrandVariant ) + { + // brand overrides skinned bitmaps if bitmap is not forced to be + // read through skins (aOverrideBrand) + if ( iOpBrandVariant->BrandBitmapsActivatedL() && !aOverrideBrand ) + { + CHAT_DP_TXT( "CCASkinVariant20::LoadBitmapL - \ + returning branded icon" ); + + // get a copy of filename + HBufC* temp = aFullPath.AllocL(); + delete iBitmapFile; + iBitmapFile = temp; + + // icon server take ownership of of icon file provider + CCAIconFileProvider* ifp = CCAIconFileProvider::NewL( iFs, *iBitmapFile ); + CleanupStack::PushL( ifp ); + + AknIconUtils::CreateIconLC( bitmap, mask, *ifp, aBitmapId, + aMaskId ); + + CleanupStack::Pop( 3, ifp ); // bitmap, mask, ifp + + CGulIcon* gulIcon = CGulIcon::NewL( bitmap, mask ); + return gulIcon; + } + + } + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + TAknsItemID itemId( KAknsIIDNone ); + TInt colorGroupId( 0 ); + MapFromBitmapIdToAknsItemId( aBitmapId, itemId, colorGroupId ); + + if ( colorGroupId != 0 ) + { + CHAT_DP_TXT( "CCASkinVariant20::LoadBitmapL - color change group" ); + + if ( aBitmapId == EMbmChatngQgn_prop_im_tome + || aBitmapId == EMbmChatngQgn_prop_im_from ) + { + // Special case, these icons are using the same color + // and color group as text + if ( aCustomColor ) + { + // If user has set a special color for text + AknIconUtils::CreateIconLC( bitmap, mask, aFullPath, + aBitmapId, aMaskId ); + AknIconUtils::SetIconColor( bitmap, *aCustomColor ); + } + else + { + AknsUtils::CreateColorIconLC( skin, + itemId, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6, + bitmap, mask, aFullPath, aBitmapId, aMaskId, KRgbBlack ); + } + } + else + { + AknsUtils::CreateColorIconLC( skin, + itemId, KAknsIIDQsnIconColors, colorGroupId, + bitmap, mask, aFullPath, aBitmapId, aMaskId, KRgbBlack ); + } + } + else + { + AknsUtils::CreateIconLC( skin, + itemId, + bitmap, mask, aFullPath, aBitmapId, aMaskId ); + } + + CGulIcon* gulIcon = CGulIcon::NewL( bitmap, mask ); + CleanupStack::Pop( 2 ); // bitmap, mask + + CHAT_DP_TXT( "CCASkinVariant20::LoadBitmapL - returning skinned or default \ + icon" ); + return gulIcon; + } + +// ----------------------------------------------------------------------------- +// CCASkinVariant20::MapFromBitmapIdToAknsItemId +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCASkinVariant20::MapFromBitmapIdToAknsItemId( TInt aBitmapId, + TAknsItemID& aItemId, TInt& aColorGroupId ) + { + for ( TInt i( 0 ); KCABitmaps[i].iBitmapId != KErrNotFound; i++ ) + { + if ( KCABitmaps[ i ].iBitmapId == aBitmapId ) + { + // found it + CHAT_DP( D_CHAT_LIT( "CCASkinVariant20::MapFromBitmapIdToAknsItemId \ + - id found for %d!" ), aBitmapId ); + aItemId = *( KCABitmaps[ i ].iItemId ); + aColorGroupId = KCABitmaps[ i ].iColorGroupId; + return; + } + } + + // not found + CHAT_DP( D_CHAT_LIT( "CCASkinVariant20::MapFromBitmapIdToAknsItemId - \ + id not found for %d!" ), aBitmapId ); + CHAT_DP_TXT( "!!!!!!!! every bitmap enumeration should be found from \ + CABitmapMapping.h !!!!!!!! " ); + + __CHAT_ASSERT_DEBUG( EFalse ); + } + + +// End of File