--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/AknLayoutFont.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2004 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: A scaleable font with layout API
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <w32std.h>
+#include "AknLayoutFont.h"
+#include <AknFontSpecification.h>
+#include <aknenv.h>
+#include "AknFontRegistry.h"
+
+// CONSTANTS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+/**
+* C++ Constructor.
+*/
+CAknLayoutFont::CAknLayoutFont( CBitmapDevice& aScreenDevice ) :
+ CFbsFont(), iScreenDevice(aScreenDevice)
+ {
+ Register();
+ }
+
+CAknLayoutFont::~CAknLayoutFont()
+ {
+ Deregister();
+ iScreenDevice.ReleaseFont(iNonDynamicFont);
+ }
+
+
+EXPORT_C void CAknLayoutFont::Update()
+ {
+ CFbsFont* newNonDynamicFont = NULL;
+
+ // Ask concrete type for a font
+ TRAPD(err, newNonDynamicFont = SupplyFont());
+
+ if (err == KErrNone)
+ {
+ // Release the old 'real' font ...
+ iScreenDevice.ReleaseFont(iNonDynamicFont);
+
+ // Copy this new font into the current object
+ iNonDynamicFont = newNonDynamicFont;
+ (void) Duplicate( iNonDynamicFont->Handle() );
+ }
+ }
+
+EXPORT_C TInt CAknLayoutFont::MaxAscent() const
+ {
+ return iExcessAscent + AscentInPixels();
+ }
+
+EXPORT_C TInt CAknLayoutFont::MaxDescent() const
+ {
+ return iExcessDescent + DescentInPixels();
+ }
+
+EXPORT_C TInt CAknLayoutFont::TextPaneTopToBaseline() const
+ {
+ return iTextPaneHeight - BaselineToTextPaneBottom();
+ }
+
+EXPORT_C TInt CAknLayoutFont::BaselineToTextPaneBottom() const
+ {
+ return ( iBottomShortfall + MaxDescent() );
+ }
+
+EXPORT_C TInt CAknLayoutFont::TextPaneHeight() const
+ {
+ return iTextPaneHeight;
+ }
+
+void CAknLayoutFont::SetExcessAscent( TInt aExcessAscent )
+ {
+ iExcessAscent = aExcessAscent;
+ }
+
+void CAknLayoutFont::SetExcessDescent( TInt aExcessDescent )
+ {
+ iExcessDescent = aExcessDescent;
+ }
+
+void CAknLayoutFont::SetBottomShortfall( TInt aBottomShortfall )
+ {
+ iBottomShortfall = aBottomShortfall;
+ }
+
+void CAknLayoutFont::SetTextPaneHeight( TInt aTextPaneHeight )
+ {
+ iTextPaneHeight = aTextPaneHeight;
+ }
+
+TInt CAknLayoutFont::AscentForCharacter( TChar aCharacter ) const
+ {
+ return DoAscentForCharacter( aCharacter );
+ }
+
+TInt CAknLayoutFont::DoAscentForCharacter( TChar /*aCharacter*/ ) const
+ {
+ // Default implementation.
+ return AscentInPixels();
+ }
+
+EXPORT_C const CAknLayoutFont* CAknLayoutFont::AsCAknLayoutFontOrNull( const CFont* aFont )
+ {
+ const CAknLayoutFont* layoutFontOrNull = NULL;
+ if ( AVKONENV->FontRegistry().IsRegistered( aFont ) )
+ {
+ layoutFontOrNull = static_cast<const CAknLayoutFont*>( aFont );
+ }
+ return layoutFontOrNull;
+ }
+
+EXPORT_C TAknTextDecorationMetrics CAknLayoutFont::TextDecorationMetrics() const
+ {
+ return DoTextDecorationMetrics();
+ }
+
+EXPORT_C TAknFontSpecification CAknLayoutFont::FontSpecification() const
+ {
+ return DoFontSpecification();
+ }
+
+void CAknLayoutFont::Register()
+ {
+ AVKONENV->FontRegistry().RegisterFont( this );
+ }
+
+void CAknLayoutFont::Deregister()
+ {
+ AVKONENV->FontRegistry().DeRegisterFont( this );
+ }
+
+void CAknLayoutFont::CAknLayoutFont_Reserved_1()
+ {}
+
+EXPORT_C TAknFontCategory CAknLayoutFont::FontCategory() const
+ {
+ TAknFontSpecification spec = FontSpecification();
+ return spec.FontCategory();
+ }
+
+TFontSpec CAknLayoutFont::DoFontSpecInTwips() const
+ {
+ // Implementation should be (prior to the iHeight patching at the end):
+ // TFontSpec fontSpec = CFbsFont::DoFontSpecInTwips(); currently private
+ // So for now, have copied implementation from CFbsFont:
+ TFontSpec fontSpec;
+ if (!iHandle)
+ return fontSpec;
+ fontSpec = Address()->FontSpecInTwips();
+ // Patch up the iHeight for the correct device's twips/pixel ratio
+ fontSpec.iHeight = iScreenDevice.VerticalPixelsToTwips( HeightInPixels() );
+ return fontSpec;
+ }
+
+CBitmapDevice& CAknLayoutFont::BitmapDevice() const
+ {
+ return iScreenDevice;
+ }
+
+// End of File
+