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) 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: Object representing a Series 60 font request
*
*/
// INCLUDE FILES
#include <coemain.h>
#include <AknLayout2DataDef.h>
#include <cdlfont.cdl.h>
#include <CdlRefs.h>
#include "AknFontIdOffsets.hrh"
#include "AknFontSpecification.h"
#include "AknFontUtilsPanic.h"
#include "AknFontId.h"
// CONSTANTS
// ============================ MEMBER FUNCTIONS ===============================
enum TAknFontSpecifiationBitIndex
{
EScalesInTwips = 0,
ERequiresExactMatch,
ETextPaneIsDesignHeight
};
EXPORT_C TAknFontSpecification::TAknFontSpecification( TInt aFontId )
{
if( TAknFontId::IsEncodedFont(aFontId) )
{
iBaseFontCategory = TAknFontId::ExtractCategoryFromFontId(aFontId);
iRequiredStyle.SetStrokeWeight(TAknFontId::ExtractWeightFromFontId(aFontId) == 0 ? EStrokeWeightNormal : EStrokeWeightBold);
iRequiredStyle.SetPosture(TAknFontId::ExtractPostureFromFontId(aFontId) == 0 ? EPostureUpright : EPostureItalic);
iRequiredStyle.SetEffects(FontEffect::EOutline, TAknFontId::ExtractOutlineFromFontId(aFontId) == 0 ? EFalse : ETrue);
iTextPaneHeight = (TInt16)TAknFontId::ExtractHeightFromFontId(aFontId);
}
else
{
if (!CDL_Font::IsCustomisationStarted())
{
TRAPD( error, LoadAnyCDLFontInstanceL() );
__ASSERT_ALWAYS( error == KErrNone, Panic(EAknPanicLayoutMissing) );
}
// process legacy and logical font ids
if ( KHighestFixedLayoutFont < aFontId && aFontId <= KAknHighestLogicalFont )
{
TCdlArray<SLogicalIdMetricsIdPair> const& logicalidmaparray = CDL_Font::logicalIdMapArray();
TInt nLogicals= logicalidmaparray.Count();
for ( TInt index = 0; index < nLogicals; index++)
{
if ( aFontId == logicalidmaparray[index].iLogicalId )
{
aFontId = logicalidmaparray[index].iFontMetricsId;
break;
}
}
}
TCdlArray<SIdMetricsPair> const& metricsarray = CDL_Font::metricsArray();
TInt nMetrics= metricsarray.Count();
TInt foundIndex = KErrNotFound;
for ( TInt index = 0; index < nMetrics; index++)
{
if ( aFontId == metricsarray[index].iFontId )
{
foundIndex = index;
break;
}
}
if ( foundIndex == KErrNotFound )
{
foundIndex = 0;
}
// Set the member data of the font specification
iTextPaneHeight = metricsarray[foundIndex].iBodyHeight;
iBaseFontCategory = (TAknFontCategory)metricsarray[foundIndex].iFontCategory;
iRequiredStyle.SetStrokeWeight( metricsarray[foundIndex].iBold == 0
? EStrokeWeightNormal : EStrokeWeightBold);
iRequiredStyle.SetPosture( metricsarray[foundIndex].iItalic == 0
? EPostureUpright : EPostureItalic );
}
}
EXPORT_C TAknFontSpecification::TAknFontSpecification( TAknFontCategory aCategory,
const TFontSpec& aFontSpec,
const MGraphicsDeviceMap* aDeviceMap )
:iBaseFontCategory( aCategory )
{
const MGraphicsDeviceMap* map;
if ( aDeviceMap )
map = aDeviceMap;
else
map = CCoeEnv::Static()->ScreenDevice();
// Use the map to get font height in pixels
TPoint point(aFontSpec.iHeight, aFontSpec.iHeight);
TPoint newPoint = map->TwipsToPixels(point);
iTextPaneHeight = newPoint.iY;
iRequiredStyle = aFontSpec.iFontStyle;
}
EXPORT_C TAknFontCategory TAknFontSpecification::FontCategory() const
{
return (TAknFontCategory)iBaseFontCategory;
}
EXPORT_C TInt TAknFontSpecification::TextPaneHeight() const
{
return iTextPaneHeight;
}
EXPORT_C TFontStrokeWeight TAknFontSpecification::Weight() const
{
return iRequiredStyle.StrokeWeight();
}
EXPORT_C TFontPosture TAknFontSpecification::Posture() const
{
return iRequiredStyle.Posture();
}
EXPORT_C TBool TAknFontSpecification::IsOutlineEffectOn() const
{
return iRequiredStyle.IsEffectOn(FontEffect::EOutline);
}
void TAknFontSpecification::LoadAnyCDLFontInstanceL()
{
// find any instances that implement CDL_Font, and load the first one!
// This stuff may leave so we should attempt to ensure CDL engine is started up already, avoiding
// the requirement for this code
CCdlRefCollection* refs = CdlEngine::FileContentsLC(KAknLayoutDllName);
TInt count = refs->CountRefs();
for (TInt ii=0; ii<count; ii++)
{
if (refs->Ref(ii).iUid == CDL_Font::KCdlInterfaceUid)
{
CDL_Font::LoadCustomisationL(refs->Ref(ii));
break;
}
}
CleanupStack::PopAndDestroy(refs);
}
EXPORT_C void TAknFontSpecification::SetTextPaneHeight( TInt aNewHeight )
{
iTextPaneHeight = aNewHeight;
}
EXPORT_C void TAknFontSpecification::SetFontCategory( TAknFontCategory aCategory)
{
iBaseFontCategory = aCategory;
}
EXPORT_C void TAknFontSpecification::SetWeight( TFontStrokeWeight aWeight )
{
iRequiredStyle.SetStrokeWeight(aWeight);
}
EXPORT_C void TAknFontSpecification::SetPosture( TFontPosture aPosture )
{
iRequiredStyle.SetPosture(aPosture);
}
EXPORT_C void TAknFontSpecification::SetTextPaneHeightIsDesignHeight( TBool aTextPaneHeightIsDesignHeight )
{
iFlags.Assign(ETextPaneIsDesignHeight, aTextPaneHeightIsDesignHeight);
}
EXPORT_C void TAknFontSpecification::SetExactMatchRequired ( TBool aRequiresExactMatch )
{
iFlags.Assign(ERequiresExactMatch, aRequiresExactMatch);
}
EXPORT_C void TAknFontSpecification::SetUnits ( TAknFontSpecificationUnits aUnits )
{
iFlags.Assign(EScalesInTwips, aUnits == TAknFontSpecification::ETwips );
}
EXPORT_C TBool TAknFontSpecification::ExactMatchRequired() const
{
return iFlags[ERequiresExactMatch];
}
EXPORT_C TBool TAknFontSpecification::TextPaneIsDesignHeight() const
{
return iFlags[ETextPaneIsDesignHeight];
}
EXPORT_C TAknFontSpecification::TAknFontSpecificationUnits TAknFontSpecification::Units() const
{
TAknFontSpecification::TAknFontSpecificationUnits units(EPixels);
if ( iFlags[EScalesInTwips] )
{
units = TAknFontSpecification::ETwips;
}
return units;
}
// End of File