Start integration branch for Symbian^3 Theme
The theme has been built using Carbide.ui on S60 5th Edition using the N97 plugin
The source code in sf/mw/uiresources/skins/Symbian/srcdata was used to generate the installable
SIS file which lives in the group directory, but the aim here is to build the theme
for delivery in the ROM (preferrably as the default theme).
Running "sbs -b bld.inf -c winscw" should build cleanly and deliver a matched set of files which
then show up in the Settings | Themes | General list. Attempting to install it produces "Theme Corrupted".
/*
* Copyright (c) 2002-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 a public static utility class AknsUtils.
*
*/
// INCLUDE FILES
#include "AknsCppPreface.h"
#include <eikenv.h>
#include <coecntrl.h>
#include <gulicon.h>
#include <AknsUtils.h>
#include "AknsAppSkinInstance.h"
#include "AknsContainerDataContext.h"
#include "AknsAppUiParameters.h"
#include "AknsScalabilityUtils.h"
#include "AknsDebug.h"
_LIT(KAknsUtilsTrue, "true");
_LIT(KAknsUtilsFalse, "false");
AKNS_UNDEFINED_METHOD(AknsUtils::AknsUtils)
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// AknsUtils::InitSkinSupportL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::InitSkinSupportL)
EXPORT_C void AknsUtils::InitSkinSupportL()
{
AKNS_TRACE_INFO("AknsUtils::InitSkinSupportL");
if( !SkinInstance() )
{
CAknsAppSkinInstance::CreateSingletonL();
}
__ASSERT_DEBUG(SkinInstance(),AKNS_DEBUG_PANIC(EAknsDPanicNotInitialized));
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateDataContextForContainerL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateDataContextForContainerL)
EXPORT_C MAknsDataContext* AknsUtils::CreateDataContextForContainerL()
{
return CAknsContainerDataContext::NewL();
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateBitmapItemDefL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateBitmapItemDefL)
EXPORT_C CAknsItemDef* AknsUtils::CreateBitmapItemDefL(
const TAknsItemID& aID, const TDesC& aFilename,
const TInt aIndex )
{
return CAknsBitmapItemDef::NewL( aID, aFilename, aIndex );
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateMaskedBitmapItemDefL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateMaskedBitmapItemDefL)
EXPORT_C CAknsItemDef* AknsUtils::CreateMaskedBitmapItemDefL(
const TAknsItemID& aID, const TDesC& aFilename,
const TInt aIndex, const TInt aMaskIndex )
{
return CAknsMaskedBitmapItemDef::NewL( aID, aFilename, aIndex,
aMaskIndex );
}
// -----------------------------------------------------------------------------
// AknsUtils::SkinInstance
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::SkinInstance)
EXPORT_C MAknsSkinInstance* AknsUtils::SkinInstance()
{
CAknsAppSkinInstance* skin = static_cast<CAknsAppSkinInstance*>
(CCoeEnv::Static( KAknsSkinInstanceTls ));
return skin;
}
// -----------------------------------------------------------------------------
// AknsUtils::DataContext
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::DataContext)
EXPORT_C MAknsDataContext* AknsUtils::DataContext( MObjectProvider* aMop )
{
MAknsSkinInstance* skin = SkinInstance();
if( !skin )
{
return NULL;
}
MAknsDataContext* dc = NULL;
if( aMop )
{
aMop->MopGetObject( dc );
}
if( !dc )
{
dc = skin->RootDataContext();
}
return dc;
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateIconL
// -----------------------------------------------------------------------------
//
EXPORT_C void AknsUtils::CreateIconL(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
CFbsBitmap*& aBitmap, CFbsBitmap*& aMask,
const TDesC& aFilename,
const TInt aFileBitmapId, const TInt aFileMaskId )
{
CreateIconLC( aInstance, aID, aBitmap, aMask,
aFilename, aFileBitmapId, aFileMaskId );
CleanupStack::Pop(2); // aBitmap, aMask
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateIconLC
// -----------------------------------------------------------------------------
//
EXPORT_C void AknsUtils::CreateIconLC(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
CFbsBitmap*& aBitmap, CFbsBitmap*& aMask,
const TDesC& aFilename,
const TInt aFileBitmapId, const TInt aFileMaskId )
{
CFbsBitmap* bitmap = NULL;
CFbsBitmap* mask = NULL;
TBool fallback = EFalse;
if( aInstance )
{
CAknsMaskedBitmapItemData* bmpData =
static_cast<CAknsMaskedBitmapItemData*>(
aInstance->CreateUncachedItemDataL( aID, EAknsITMaskedBitmap ) );
CleanupStack::PushL( bmpData );
if( bmpData && bmpData->Bitmap() && bmpData->Mask() )
{
// Detach bitmaps
bitmap = bmpData->Bitmap();
bmpData->SetBitmap( NULL );
mask = bmpData->Mask();
bmpData->SetMask( NULL );
}
CleanupStack::PopAndDestroy( bmpData );
}
if( bitmap ) // Mask is also loaded
{
CleanupStack::PushL( mask );
CleanupStack::PushL( bitmap );
}
else
{
if( !aFilename.Length() )
{
User::Leave( KErrNotFound );
}
// Fallback
AknIconUtils::CreateIconLC( bitmap, mask,
aFilename, aFileBitmapId, aFileMaskId );
fallback = ETrue;
}
if( (bitmap && mask) || fallback)
{
// Ownership transferred
aBitmap = bitmap;
aMask = mask;
}
else
{
User::Leave( KErrUnknown );
}
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateIconL
// -----------------------------------------------------------------------------
//
EXPORT_C void AknsUtils::CreateIconL(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
CFbsBitmap*& aBitmap,
const TDesC& aFilename,
const TInt aFileBitmapId )
{
CreateIconLC( aInstance, aID, aBitmap,
aFilename, aFileBitmapId );
CleanupStack::Pop( aBitmap );
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateIconLC
// -----------------------------------------------------------------------------
//
EXPORT_C void AknsUtils::CreateIconLC(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
CFbsBitmap*& aBitmap,
const TDesC& aFilename,
const TInt aFileBitmapId )
{
CFbsBitmap* bitmap = NULL;
if( aInstance )
{
CAknsBitmapItemData* bmpData =
static_cast<CAknsBitmapItemData*>(
aInstance->CreateUncachedItemDataL( aID, EAknsITBitmap ) );
CleanupStack::PushL( bmpData );
if( bmpData && bmpData->Bitmap() )
{
// Detach bitmap
bitmap = bmpData->Bitmap();
bmpData->SetBitmap( NULL );
}
CleanupStack::PopAndDestroy( bmpData );
}
if( bitmap )
{
CleanupStack::PushL( bitmap );
}
else
{
if( !aFilename.Length() )
{
User::Leave( KErrNotFound );
}
// Fallback
bitmap = AknIconUtils::CreateIconL(
aFilename, aFileBitmapId );
CleanupStack::PushL( bitmap ); // bitmap
}
if( bitmap )
{
// Ownership transferred
aBitmap = bitmap;
}
else
{
User::Leave( KErrUnknown );
}
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateMaskedBitmapL
// -----------------------------------------------------------------------------
//
EXPORT_C CApaMaskedBitmap* AknsUtils::CreateMaskedBitmapL(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
const TDesC& aFilename,
const TInt aFileIndex, const TInt aFileMaskIndex )
{
AKNS_TRACE_OBSOLETE("AknsUtils::CreateMaskedBitmapL (5 param)");
CFbsBitmap* bitmap = NULL;
CFbsBitmap* mask = NULL;
CreateIconLC( aInstance, aID, bitmap, mask,
aFilename, aFileIndex, aFileMaskIndex );
// Bitmap and mask always exist here
CApaMaskedBitmap* maskedBitmap = CApaMaskedBitmap::NewLC();
// Note that these calls leave with SVG-originating icons
User::LeaveIfError( maskedBitmap->Duplicate( bitmap->Handle() ) );
User::LeaveIfError( maskedBitmap->Mask()->Duplicate( mask->Handle() ) );
CleanupStack::Pop( maskedBitmap );
CleanupStack::PopAndDestroy( 2 ); // bitmap, mask
return maskedBitmap;
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateGulIconL
// -----------------------------------------------------------------------------
//
EXPORT_C CGulIcon* AknsUtils::CreateGulIconL(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
const TDesC& aFilename,
const TInt aFileIndex, const TInt aFileMaskIndex )
{
CFbsBitmap* bitmap = NULL;
CFbsBitmap* mask = NULL;
CreateIconLC( aInstance, aID, bitmap, mask,
aFilename, aFileIndex, aFileMaskIndex );
CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
CleanupStack::Pop( 2 ); // bitmap, mask
return icon;
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateColorIconL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateColorIconL)
EXPORT_C void AknsUtils::CreateColorIconL(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
const TAknsItemID& aColorID, const TInt aColorIndex,
CFbsBitmap*& aBitmap, CFbsBitmap*& aMask,
const TDesC& aFilename,
const TInt aFileBitmapId, const TInt aFileMaskId,
const TRgb aDefaultColor )
{
CreateColorIconLC( aInstance, aID, aColorID, aColorIndex,
aBitmap, aMask, aFilename, aFileBitmapId, aFileMaskId, aDefaultColor );
CleanupStack::Pop(2); // aBitmap, aMask
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateColorIconLC
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateColorIconLC)
EXPORT_C void AknsUtils::CreateColorIconLC(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
const TAknsItemID& aColorID, const TInt aColorIndex,
CFbsBitmap*& aBitmap, CFbsBitmap*& aMask,
const TDesC& aFilename,
const TInt aFileBitmapId, const TInt aFileMaskId,
const TRgb aDefaultColor )
{
CreateColorIconLC(
aInstance, aID, aColorID, aColorIndex, aBitmap, aMask,
aFilename, aFileBitmapId, aFileMaskId, aDefaultColor,
TSize(-1,-1), EAspectRatioPreserved );
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateColorIconL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateColorIconL)
EXPORT_C void AknsUtils::CreateColorIconL(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
const TAknsItemID& aColorID, const TInt aColorIndex,
CFbsBitmap*& aBitmap, CFbsBitmap*& aMask,
const TDesC& aFilename,
const TInt aFileBitmapId, const TInt aFileMaskId,
const TRgb aDefaultColor,
const TSize& aSize, const TScaleMode aScaleMode )
{
CreateColorIconLC( aInstance, aID, aColorID, aColorIndex,
aBitmap, aMask, aFilename, aFileBitmapId, aFileMaskId, aDefaultColor,
aSize, aScaleMode );
CleanupStack::Pop(2); // aBitmap, aMask
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateColorIconLC
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateColorIconLC)
EXPORT_C void AknsUtils::CreateColorIconLC(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
const TAknsItemID& aColorID, const TInt aColorIndex,
CFbsBitmap*& aBitmap, CFbsBitmap*& aMask,
const TDesC& aFilename,
const TInt aFileBitmapId, const TInt aFileMaskId,
const TRgb aDefaultColor,
const TSize& aSize, const TScaleMode aScaleMode )
{
CFbsBitmap* bitmap = NULL;
CFbsBitmap* mask = NULL;
CreateIconLC( aInstance, aID, bitmap, mask,
aFilename, aFileBitmapId, aFileMaskId ); // (2)
TRgb color = aDefaultColor;
// Return value intentionally ignored
GetCachedColor( aInstance, color, aColorID, aColorIndex );
if( AknIconUtils::IsMifIcon( bitmap ) )
{
AknIconUtils::SetIconColor( bitmap, color );
aBitmap = bitmap;
aMask = mask;
}
else // Create Own Icon
{
CFbsBitmap* colorBitmap = new (ELeave) CFbsBitmap();
CleanupStack::PushL( colorBitmap ); // (3)
TSize size = mask->SizeInPixels();
User::LeaveIfError(
colorBitmap->Create( size,
CEikonEnv::Static()->ScreenDevice()->DisplayMode() ) );
CFbsBitmapDevice* colorBmpDev = CFbsBitmapDevice::NewL( colorBitmap );
CleanupStack::PushL( colorBmpDev ); // (4)
User::LeaveIfError( colorBmpDev->Resize( size ) );
CFbsBitGc* colorBmpGc = CFbsBitGc::NewL();
CleanupStack::PushL( colorBmpGc ); // (5)
colorBmpGc->Activate( colorBmpDev );
colorBmpGc->SetBrushColor( color );
colorBmpGc->SetPenStyle( CGraphicsContext::ENullPen );
colorBmpGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
colorBmpGc->DrawRect( TRect( TPoint(0,0), size ) );
CleanupStack::PopAndDestroy( 2 ); // colorBmpGc, colorBmpDev (3)
CleanupStack::Pop( 3 ); // colorBmp, bitmap, mask (0)
delete bitmap; // We don't know the order, must destroy manually
aBitmap = colorBitmap;
aMask = mask;
// These are both safe
CleanupStack::PushL( aBitmap ); // (1)
CleanupStack::PushL( aMask ); // (2)
}
if( aSize.iWidth>=0 )
{
// Set the size
User::LeaveIfError(
AknIconUtils::SetSize( aBitmap, aSize, aScaleMode ) );
}
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateBitmapL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateBitmapL)
EXPORT_C CFbsBitmap* AknsUtils::CreateBitmapL(
MAknsSkinInstance* aInstance, const TAknsItemID& aID )
{
CFbsBitmap* bitmap = NULL;
CreateIconL( aInstance, aID, bitmap, KNullDesC, -1 );
return bitmap;
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateMaskedBitmapL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateMaskedBitmapL)
EXPORT_C CApaMaskedBitmap* AknsUtils::CreateMaskedBitmapL(
MAknsSkinInstance* aInstance, const TAknsItemID& aID )
{
AKNS_TRACE_OBSOLETE("AknsUtils::CreateMaskedBitmapL (2 param)");
return CreateMaskedBitmapL( aInstance, aID, KNullDesC, -1, -1 );
}
// -----------------------------------------------------------------------------
// AknsUtils::CreateGulIconL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::CreateGulIconL)
EXPORT_C CGulIcon* AknsUtils::CreateGulIconL(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
const TBool aRequireMask )
{
if( !aInstance )
{
User::Leave(KErrNotSupported);
}
// Forward-query type
TBool needsDelete = EFalse;
CAknsItemDef* def =
static_cast<CAknsAppSkinInstance*>(aInstance)->LookupDef(
needsDelete, aID, EAknsITMaskedBitmap );
TBool maskedAvailable = def ? ETrue : EFalse;
if( needsDelete ) delete def;
if( maskedAvailable )
{
return CreateGulIconL( aInstance, aID, KNullDesC, -1, -1 );
}
else if( !aRequireMask )
{
CFbsBitmap* bitmap = NULL;
CreateIconLC( aInstance, aID, bitmap, KNullDesC, -1 );
CGulIcon* icon = CGulIcon::NewL( bitmap );
CleanupStack::Pop( bitmap );
return icon;
}
else
{
User::Leave( KErrNotFound );
}
return NULL; // Never reached
}
// -----------------------------------------------------------------------------
// AknsUtils::GetCachedBitmap
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::GetCachedBitmap)
EXPORT_C CFbsBitmap* AknsUtils::GetCachedBitmap(
MAknsSkinInstance* aInstance, const TAknsItemID& aID )
{
if( !aInstance )
{
return NULL;
}
CAknsItemData* resData = aInstance->GetCachedItemData( aID, EAknsITBitmap );
if( !resData )
{
return NULL;
}
return static_cast<CAknsBitmapItemData*>(resData)->Bitmap();
}
// -----------------------------------------------------------------------------
// AknsUtils::GetCachedMaskedBitmap
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::GetCachedMaskedBitmap)
EXPORT_C void AknsUtils::GetCachedMaskedBitmap(
MAknsSkinInstance* aInstance, const TAknsItemID& aID,
CFbsBitmap*& aBitmap, CFbsBitmap*& aMask )
{
aBitmap = NULL;
aMask = NULL;
if( !aInstance )
{
return;
}
CAknsItemData* resData = aInstance->GetCachedItemData( aID, EAknsITBitmap );
if( !resData )
{
return;
}
// If found, guaranteed to be at least EAknsITBitmap
aBitmap = static_cast<CAknsBitmapItemData*>( resData )->Bitmap();
// Assign mask only, if EAknsITMaskedBitmap
if( IsDerivedType( EAknsITMaskedBitmap, resData->Type() ) )
{
aMask = static_cast<CAknsMaskedBitmapItemData*>( resData )->Mask();
}
}
// -----------------------------------------------------------------------------
// AknsUtils::GetCachedColor
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::GetCachedColor)
EXPORT_C TInt AknsUtils::GetCachedColor(
MAknsSkinInstance* aInstance, TRgb& aRgb, const TAknsItemID& aID,
const TInt aIndex )
{
if( !aInstance )
{
return KErrNotSupported;
}
// Check backward compatibility first
if( AknsScalabilityUtils::GetBackwardCompatibilityColor(
aInstance, aRgb, aID, aIndex ) )
{
// Found and assigned
return KErrNone;
}
CAknsColorTableItemData* colorData = static_cast<CAknsColorTableItemData*>(
aInstance->GetCachedItemData( aID, EAknsITColorTable ) );
if( !colorData)
{
return KErrNotFound;
}
TRAPD( err, colorData->GetColorL( aIndex, aRgb ) );
return err;
}
// -----------------------------------------------------------------------------
// AknsUtils::BooleanPropertyL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::BooleanPropertyL)
EXPORT_C TBool AknsUtils::BooleanPropertyL( MAknsSkinInstance* aInstance,
const TAknsItemID& aID )
{
if( !aInstance ) User::Leave( KErrNotSupported );
CAknsStringItemData* data = static_cast<CAknsStringItemData*>(
aInstance->GetCachedItemData( aID, EAknsITString ) );
if( !data ) User::Leave( KErrNotFound );
if( !data->String().CompareF( KAknsUtilsTrue ) ) return ETrue;
if( !data->String().CompareF( KAknsUtilsFalse ) ) return EFalse;
User::Leave( KErrArgument );
return EFalse; // Never reached
}
// -----------------------------------------------------------------------------
// AknsUtils::IsDerivedType
// -----------------------------------------------------------------------------
//
TBool AknsUtils::IsDerivedType( const TAknsItemType aBaseType,
const TAknsItemType aDerivedType )
{
if( aBaseType == aDerivedType )
{
return ETrue;
}
switch( aBaseType )
{
case EAknsITUnknown:
{
return ETrue;
}
case EAknsITImage:
{
if( (aDerivedType==EAknsITBitmap) ||
(aDerivedType==EAknsITMaskedBitmap) ||
(aDerivedType==EAknsITColorTable) ||
(aDerivedType==EAknsITImageTable) ||
(aDerivedType==EAknsITBmpAnim ) )
{
return ETrue;
}
return EFalse;
}
case EAknsITBitmap:
{
if( aDerivedType == EAknsITMaskedBitmap )
{
return ETrue;
}
return EFalse;
}
case EAknsITImageTable:
{
if( aDerivedType == EAknsITBmpAnim )
{
return ETrue;
}
return EFalse;
}
default:
break;
} //lint !e788 Other values return EFalse
return EFalse;
}
// -----------------------------------------------------------------------------
// AknsUtils::SetAvkonSkinEnabledL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::SetAvkonSkinEnabledL)
EXPORT_C void AknsUtils::SetAvkonSkinEnabledL( const TBool aEnabled )
{
CAknsAppUiParameters* aup = static_cast<CAknsAppUiParameters*>
(CCoeEnv::Static( KAknsAppUiParametersTls ));
if( !aup )
{
CAknsAppUiParameters::CreateSingletonL();
aup = static_cast<CAknsAppUiParameters*>
(CCoeEnv::Static( KAknsAppUiParametersTls ));
}
__ASSERT_DEBUG(aup,AKNS_DEBUG_PANIC(EAknsDPanicNotInitialized));
aup->SetAvkonSkinEnabled( aEnabled );
}
// -----------------------------------------------------------------------------
// AknsUtils::AvkonSkinEnabled
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::AvkonSkinEnabled)
EXPORT_C TBool AknsUtils::AvkonSkinEnabled()
{
CAknsAppUiParameters* aup = static_cast<CAknsAppUiParameters*>
(CCoeEnv::Static( KAknsAppUiParametersTls ));
if( aup )
{
return aup->AvkonSkinEnabled();
}
return EFalse;
}
// -----------------------------------------------------------------------------
// AknsUtils::SetAvkonHighlightAnimationEnabledL
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::SetAvkonHighlightAnimationEnabledL)
EXPORT_C void AknsUtils::SetAvkonHighlightAnimationEnabledL( const TBool aEnabled )
{
CAknsAppUiParameters* aup = static_cast<CAknsAppUiParameters*>
(CCoeEnv::Static( KAknsAppUiParametersTls ));
if( !aup )
{
CAknsAppUiParameters::CreateSingletonL();
aup = static_cast<CAknsAppUiParameters*>
(CCoeEnv::Static( KAknsAppUiParametersTls ));
}
__ASSERT_DEBUG(aup,AKNS_DEBUG_PANIC(EAknsDPanicNotInitialized));
aup->SetAvkonHighlightAnimationEnabled( aEnabled );
}
// -----------------------------------------------------------------------------
// AknsUtils::AvkonHighlightAnimationEnabled
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::AvkonHighlightAnimationEnabled)
EXPORT_C TBool AknsUtils::AvkonHighlightAnimationEnabled()
{
// Step 1: Check if product variant has disabled animations
CAknsAppSkinInstance* skin = static_cast<CAknsAppSkinInstance*>
(CCoeEnv::Static( KAknsSkinInstanceTls ));
if( skin )
{
if( !skin->VariantHighlightAnimationEnabled() )
{
// Product variant has disabled highlight animation
return EFalse;
}
}
else
{
// No skin instance -> no skin -> animations can hardly be supported
return EFalse;
}
// Step 2: Product allows animations, check application specific status
CAknsAppUiParameters* aup = static_cast<CAknsAppUiParameters*>
(CCoeEnv::Static( KAknsAppUiParametersTls ));
if( aup )
{
return aup->AvkonHighlightAnimationEnabled();
}
return ETrue; // By default, highlight animations are enabled
}
// -----------------------------------------------------------------------------
// AknsUtils::RegisterControlPosition
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::RegisterControlPosition)
EXPORT_C void AknsUtils::RegisterControlPosition( const CCoeControl* aControl )
{
if( aControl && aControl->DrawableWindow() )
{
RegisterControlPosition( aControl, aControl->PositionRelativeToScreen() );
}
}
// -----------------------------------------------------------------------------
// AknsUtils::RegisterControlPosition
// -----------------------------------------------------------------------------
//
EXPORT_C void AknsUtils::RegisterControlPosition( const CCoeControl* aControl,
const TPoint& aPoint )
{
CAknsAppSkinInstance* skin = static_cast<CAknsAppSkinInstance*>
(CCoeEnv::Static( KAknsSkinInstanceTls ));
if( (!skin) || (!aControl) || (!aControl->DrawableWindow()) )
{
return;
}
TAknsControlPositionEntry entry;
TInt index;
entry.iKey = reinterpret_cast<TUint>(aControl);
if( skin->iControlPositionList.FindInUnsignedKeyOrder(
entry, index ) == KErrNone )
{
skin->iControlPositionList[index].iScreenPos = aPoint;
}
else
{
entry.iScreenPos = aPoint;
skin->iControlPositionList.InsertInUnsignedKeyOrder( entry );
}
}
// -----------------------------------------------------------------------------
// AknsUtils::DeregisterControlPosition
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::DeregisterControlPosition)
EXPORT_C void AknsUtils::DeregisterControlPosition( const CCoeControl* aControl )
{
CAknsAppSkinInstance* skin = static_cast<CAknsAppSkinInstance*>
(CCoeEnv::Static( KAknsSkinInstanceTls ));
if( !skin )
{
return;
}
TAknsControlPositionEntry entry;
TInt index;
entry.iKey = reinterpret_cast<TUint>(aControl);
if( skin->iControlPositionList.FindInUnsignedKeyOrder(
entry, index ) == KErrNone )
{
skin->iControlPositionList.Remove( index );
}
}
// -----------------------------------------------------------------------------
// AknsUtils::GetControlPosition
// -----------------------------------------------------------------------------
//
EXPORT_C TInt AknsUtils::GetControlPosition( const CCoeControl* aControl,
TPoint& aScreenPos )
{
CAknsAppSkinInstance* skin = static_cast<CAknsAppSkinInstance*>
(CCoeEnv::Static( KAknsSkinInstanceTls ));
if( !skin )
{
return KErrNotFound;
}
TAknsControlPositionEntry entry;
TInt index;
entry.iKey = reinterpret_cast<TUint>(aControl);
if( skin->iControlPositionList.FindInUnsignedKeyOrder(
entry, index ) == KErrNone )
{
aScreenPos = skin->iControlPositionList[index].iScreenPos;
return KErrNone;
}
return KErrNotFound;
}
// -----------------------------------------------------------------------------
// AknsUtils::Reserved
// -----------------------------------------------------------------------------
//
AKNS_EXPORTED_METHOD(AknsUtils::Reserved)
EXPORT_C TInt AknsUtils::Reserved()
{
return 0;
}
// End of File