uiacceltk/hitchcock/Client/src/alftextstyle.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/Client/src/alftextstyle.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,1154 @@
+/*
+* 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:   Text style
+*
+*/
+
+
+
+#include <AknFontProvider.h>
+#include "alf/alftextstyle.h"
+#include "alf/alfgencomponent.h"
+#include "alf/alftextstylemanager.h"
+#include "alf/alftexturemanager.h"
+#include "alf/alfbitmapprovider.h"
+#include "alf/alfenv.h"
+#include "alflogger.h"
+#include "alf/alfconstants.h"
+#include "uiacceltk/HuiFont.h"
+
+/**
+ * Constants that are uset to set/reset local definition flags.
+ * Local definition flags describe which text style attributes are set/defined
+ * locally in this particular text style, and which cascade from the parent.
+ */
+const TInt  KTextColorDefined =         0x00000001;
+//const TInt  KBackgroundColorDefined =   0x00000002;
+const TInt  KTextSizeDefined =          0x00000004;
+const TInt  KUnderlineDefined =         0x00000008;
+const TInt  KStrikeThroughDefined =     0x00000010;
+const TInt  KStrokeWeightDefined =      0x00000020;
+const TInt  KPostureDefined =           0x00000040;
+const TInt  KFontDefined =              0x00000080;
+
+#ifndef ALF_RASTER_TEXT
+
+
+// Private data
+struct CAlfTextStyle::TPrivateData
+    {
+    CAlfTextStyleManager* iManager; // Not owned.
+    CAlfGenComponent* iComms;       // Owned.
+    TInt iId; // Owned.
+    TInt iParentId; // Owned.
+    TInt iFontStyleId; // Owned
+    TInt iLocalDefinitionFlags; // Owned.
+    TRgb iTextColor; // Owned.
+    TBool iIsUnderline; // Owned.
+    TBool iIsStrikeThrough; // Owned.
+    TBool iIsPreconfigured; // Owned.
+    TInt iServerHandle; // Serverside id
+    };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CAlfTextStyle::CAlfTextStyle()
+	: iData(NULL)
+	{
+	}
+    
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CAlfTextStyle::~CAlfTextStyle()
+	{
+    if(iData)
+	    {
+    	delete iData->iComms;
+    	iData->iComms = NULL;
+	    }
+	delete iData;
+	iData = NULL;
+	}
+
+// ---------------------------------------------------------------------------
+// Constructs a new CAlfTextStyle object
+// ---------------------------------------------------------------------------
+//
+CAlfTextStyle* CAlfTextStyle::NewL(CAlfEnv& aEnv, TInt aId, TInt aImplementationId, const TDesC8& aConstructionParams)
+	{
+	CAlfTextStyle* self = CAlfTextStyle::NewLC(aEnv, aId, aImplementationId, aConstructionParams);        
+    CleanupStack::Pop(self);
+    return self;			
+	}
+
+// ---------------------------------------------------------------------------
+// Constructs a new CAlfTextStyle object
+// ---------------------------------------------------------------------------
+//
+CAlfTextStyle* CAlfTextStyle::NewLC(CAlfEnv& aEnv, TInt aId, TInt aImplementationId, const TDesC8& aConstructionParams)
+	{
+	CAlfTextStyle* self = new( ELeave ) CAlfTextStyle();
+    CleanupStack::PushL(self);
+    self->ConstructL(aEnv, aId, aImplementationId, aConstructionParams);
+    return self;			
+	}
+
+// ---------------------------------------------------------------------------
+// Return font style id
+// ---------------------------------------------------------------------------
+//
+TInt CAlfTextStyle::FontStyleId() const
+    {
+	return iData->iFontStyleId;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set font style id
+// ---------------------------------------------------------------------------
+//
+void CAlfTextStyle::SetFontStyleId(TInt aFontStyleId)
+    {
+	iData->iFontStyleId = aFontStyleId;
+    
+    // The changes are not reflected in Hitchcockcore because Hitchcockcore
+    // text style object does not store this info        
+    }
+    
+// ---------------------------------------------------------------------------
+// Return parent id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAlfTextStyle::ParentId() const
+    {
+	return iData->iParentId;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set parent id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetParentId(TInt aParentId)
+    {
+    if(!iData->iIsPreconfigured)
+        {
+        iData->iParentId = aParentId;
+        
+        // Reflect the changes also in Hitchcockcore        
+        // Convert the parent id from client domain to session domain.
+    	CAlfTextStyle* parentStyle = iData->iManager->TextStyle(aParentId);    	        
+	    TPckgC<TInt> buf(parentStyle->Comms()->Identifier());
+	    TBuf8<1> dum;
+	    
+	    TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSetParent, buf, dum);
+	
+	    if ( err != KErrNone )
+	        {
+	        __ALFLOGSTRING1( "CAlfTextStyle::SetParentId panic error %d", err )
+	        User::Invariant();
+	        }        
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// Return Id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAlfTextStyle::Id() const
+    {
+	return iData->iId;
+    }
+    
+// ---------------------------------------------------------------------------
+// Return text color
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TRgb CAlfTextStyle::TextColor() const
+    {
+	if(iData->iIsPreconfigured)
+		{
+	    TBufC8<1> inDum;
+	    TRgb textColor;
+	    TPckg<TRgb> outBuf(textColor);
+	    
+	    TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleTextColor, inDum, outBuf);
+	    
+	    if ( err != KErrNone )
+	        {
+	        __ALFLOGSTRING1( "CAlfTextStyle::TextColor ignore error %d", err )
+	        } 
+	        
+	    return textColor;	
+		}
+    if(iData->iLocalDefinitionFlags & KTextColorDefined)
+        {
+        return iData->iTextColor;
+        }
+    return iData->iManager->TextStyle(iData->iParentId)->TextColor();
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the color of the text rasterized with this style.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetTextColor(const TRgb& aTextColor)
+    {
+    if(!iData->iIsPreconfigured)
+        {
+        iData->iTextColor = aTextColor;
+        iData->iLocalDefinitionFlags |= KTextColorDefined;
+        
+        TPckgC<TRgb> buf(aTextColor);
+        TBuf8<1> dum;
+        
+        TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSetTextColor, buf, dum);
+
+        if ( err != KErrNone )
+            {
+            __ALFLOGSTRING1( "CAlfTextStyle::SetTextColor panic error %d", err )
+            User::Invariant();
+            }     
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Returns the text size of this style in screen size independent units (twips).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAlfTextStyle::TextSizeInTwips(TBool aIsDecoratedSize) const
+    {
+    TInt textSizeInTwips = 0;
+    
+    TPckgC<TInt> buf(aIsDecoratedSize);
+    TPckg<TInt> outBuf(textSizeInTwips);
+    
+    TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSizeInTwips, buf, outBuf);
+    
+    if ( err != KErrNone )
+        {
+        __ALFLOGSTRING1( "CAlfTextStyle::TextSizeInTwips ignore error %d", err )
+        } 
+        
+    return textSizeInTwips;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set text size
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetTextSizeInTwips(TInt aTextSizeInTwips, TBool aIsDecoratedSize)
+    {
+    if(!iData->iIsPreconfigured)
+        {
+        TInt2 params(aTextSizeInTwips, aIsDecoratedSize);
+        TPckgC<TInt2> buf(params);       
+        TBuf8<1> dum;
+        
+        TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSetTextSizeInTwips, buf, dum);
+
+        if ( err != KErrNone )
+            {
+            __ALFLOGSTRING1( "CAlfTextStyle::SetTextSizeInTwips panic error %d", err )
+            User::Invariant();
+            }     
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Get text size
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAlfTextStyle::TextSizeInPixels(TBool aIsDecoratedSize) const
+	{
+	TInt textSizeInPixels = 0;
+
+    TPckgC<TInt> buf(aIsDecoratedSize);
+	TPckg<TInt> outBuf(textSizeInPixels);
+	
+	TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSizeInPixels, buf, outBuf);
+	
+	if ( err != KErrNone )
+		{
+	    __ALFLOGSTRING1( "CAlfTextStyle::TextSizeInPixels ignore error %d", err )
+		}
+	        
+	return textSizeInPixels;
+	}
+    
+ // ---------------------------------------------------------------------------
+ // Set text size
+ // ---------------------------------------------------------------------------
+ //
+EXPORT_C void CAlfTextStyle::SetTextSizeInPixels(TInt aTextSizeInPixels, TBool aIsDecoratedSize)
+    {
+    if(!iData->iIsPreconfigured)
+        {
+        TInt2 params(aTextSizeInPixels, aIsDecoratedSize);
+        TPckgC<TInt2> buf(params);   
+        TBuf8<1> dum;
+        
+        TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSetTextSizeInPixels, buf, dum);
+
+        if ( err != KErrNone )
+            {
+            __ALFLOGSTRING1( "CAlfTextStyle::SetTextSizeInPixels panic error %d", err )
+            User::Invariant();
+            }
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Is bold
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfTextStyle::IsBold() const
+    {
+	TBufC8<1> inDum;
+	TBool isBold = EFalse;
+	TPckg<TBool> outBuf(isBold);
+	
+	TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleIsBold, inDum, outBuf);
+	
+	if ( err != KErrNone )
+		{
+	    __ALFLOGSTRING1( "CAlfTextStyle::IsBold ignore error %d", err )
+		}
+	        
+	return isBold;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set bold
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetBold(TBool aIsBold)
+    {
+    if(!iData->iIsPreconfigured)
+        {
+        TPckgC<TInt> buf(aIsBold);
+        TBuf8<1> dum;
+        
+        TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSetBold, buf, dum);
+
+        if ( err != KErrNone )
+            {
+            __ALFLOGSTRING1( "CAlfTextStyle::SetBold panic error %d", err )
+            User::Invariant();
+            }
+        }    
+    }
+    
+// ---------------------------------------------------------------------------
+// Is italic
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfTextStyle::IsItalic() const
+    {
+	TBufC8<1> inDum;
+	TBool isItalic = EFalse;
+	TPckg<TBool> outBuf(isItalic);
+	
+	TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleIsItalic, inDum, outBuf);
+	
+	if ( err != KErrNone )
+		{
+	    __ALFLOGSTRING1( "CAlfTextStyle::IsItalic ignore error %d", err )
+		}
+	        
+	return isItalic;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set italic
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetItalic(TBool aIsItalic)
+    {
+    if(!iData->iIsPreconfigured)
+	    {
+	    TPckgC<TInt> buf(aIsItalic);
+	    TBuf8<1> dum;
+	    
+	    TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSetItalic, buf, dum);
+	
+	    if ( err != KErrNone )
+	        {
+	        __ALFLOGSTRING1( "CAlfTextStyle::SetItalic panic error %d", err )
+	        User::Invariant();
+	        }
+	    }    
+    }
+    
+// ---------------------------------------------------------------------------
+// Is underlined
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfTextStyle::IsUnderline() const
+    {
+	if(iData->iIsPreconfigured)
+		{
+	    TBufC8<1> inDum;
+	    TBool isUnderline = EFalse;
+	    TPckg<TBool> outBuf(isUnderline);
+	    
+	    TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleIsUnderline, inDum, outBuf);
+	    
+	    if ( err != KErrNone )
+	        {
+	        __ALFLOGSTRING1( "CAlfTextStyle::IsUnderline ignore error %d", err )
+	        } 
+	        
+	    return isUnderline;
+		}	
+    if(iData->iLocalDefinitionFlags & KUnderlineDefined)
+        {
+        return iData->iIsUnderline;
+        }
+    return iData->iManager->TextStyle(iData->iParentId)->IsUnderline();
+    }
+    
+// ---------------------------------------------------------------------------
+// Set underlined
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetUnderline(TBool aIsUnderline)
+    {
+    if(!iData->iIsPreconfigured)
+        {
+        iData->iIsUnderline = aIsUnderline;
+        iData->iLocalDefinitionFlags |= KUnderlineDefined;
+        
+	    TPckgC<TInt> buf(aIsUnderline);
+	    TBuf8<1> dum;
+	    
+	    TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSetUnderline, buf, dum);
+	
+	    if ( err != KErrNone )
+	        {
+	        __ALFLOGSTRING1( "CAlfTextStyle::SetUnderline panic error %d", err )
+	        User::Invariant();
+	        }
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Is strike through
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfTextStyle::IsStrikeThrough() const
+    {
+	if(iData->iIsPreconfigured)
+		{
+	    TBufC8<1> inDum;
+	    TBool isStrikeThrough = EFalse;
+	    TPckg<TBool> outBuf(isStrikeThrough);
+	    
+	    TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleIsStrikeThrough, inDum, outBuf);
+	    
+	    if ( err != KErrNone )
+	        {
+	        __ALFLOGSTRING1( "CAlfTextStyle::IsStrikeThrough ignore error %d", err )
+	        } 
+	        
+	    return isStrikeThrough;
+		}	
+    if(iData->iLocalDefinitionFlags & KStrikeThroughDefined)
+        {
+        return iData->iIsStrikeThrough;
+        }
+    return iData->iManager->TextStyle(iData->iParentId)->IsStrikeThrough();
+    }
+    
+// ---------------------------------------------------------------------------
+// Set strike through
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetStrikeThrough(TBool aIsStrikeThrough)
+    {
+    if(!iData->iIsPreconfigured)
+        {
+        iData->iIsStrikeThrough = aIsStrikeThrough;
+        iData->iLocalDefinitionFlags |= KStrikeThroughDefined;
+        
+	    TPckgC<TInt> buf(aIsStrikeThrough);
+	    TBuf8<1> dum;
+	    
+	    TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSetStrikeThrough, buf, dum);
+	
+	    if ( err != KErrNone )
+	        {
+	        __ALFLOGSTRING1( "CAlfTextStyle::SetStrikeThrough panic error %d", err )
+	        User::Invariant();
+	        }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Get the typeface
+// ---------------------------------------------------------------------------
+//
+void CAlfTextStyle::GetTypeface( TTypeface& aTypeface ) const
+	{
+    TBufC8<1> inDum;
+	TPckg<TTypeface> outBuf( aTypeface );
+	
+	TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleGetTypeface, inDum, outBuf);
+	
+	if ( err != KErrNone )
+		{
+	    __ALFLOGSTRING1( "CAlfTextStyle::GetTypeface ignore error %d", err )
+		}
+	        
+	return;
+	}
+	
+// ---------------------------------------------------------------------------
+// Get the typeface
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CAlfTextStyle::TypefaceNameL( ) const
+	{
+       TBufC8<1> inDum;
+       TTypeface aTypeface;
+	TPckg<TTypeface> outBuf( aTypeface );
+	
+	TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleGetTypeface, inDum, outBuf);
+	
+	if ( err != KErrNone )
+		{
+	    __ALFLOGSTRING1( "CAlfTextStyle::TypefaceName ignore error %d", err )
+		}
+        return aTypeface.iName.AllocL();	        
+	}
+	
+ // ---------------------------------------------------------------------------
+ // Set Text Pane Height In Pixels
+ // ---------------------------------------------------------------------------
+ //
+EXPORT_C void CAlfTextStyle::SetTextPaneHeightInPixels(TInt aTextPaneHeight, TBool aIsDecoratedSize)
+    {
+    if(!iData->iIsPreconfigured)
+        {
+        TInt2 params(aTextPaneHeight, aIsDecoratedSize);
+        TPckgC<TInt2> buf(params);   
+        TBuf8<1> dum;
+        
+        TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleSetTextPaneHeightInPixels, buf, dum);
+
+        if ( err != KErrNone )
+            {
+            __ALFLOGSTRING1( "CAlfTextStyle::SetTextPaneHeightInPixels panic error %d", err )
+            User::Invariant();
+            }
+        }
+    }
+	
+	
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAlfTextStyle::ConstructL(CAlfEnv& aEnv, TInt aId, TInt aImplementationId, const TDesC8& aConstructionParams)
+    {
+	if(!iData)
+		{
+	    iData = new (ELeave) TPrivateData;
+	    iData->iComms = NULL;
+	    iData->iId = 0;
+	    iData->iLocalDefinitionFlags = 0;
+	    iData->iManager = 0;
+	    iData->iParentId = 0;
+	    iData->iFontStyleId = 0;
+	    iData->iIsUnderline = EFalse;
+	    iData->iIsStrikeThrough = EFalse;
+	    iData->iIsPreconfigured = EFalse;
+		}
+	
+    if (!iData->iComms)
+        {
+        iData->iComms = CAlfGenComponent::NewL(
+            aEnv,
+            aImplementationId, 
+            0,
+            aConstructionParams);  
+        }    
+    iData->iId = aId;
+    iData->iManager = &aEnv.TextStyleManager();
+    iData->iIsPreconfigured = (aImplementationId == EAlfPreconfiguredTextStyleCreate) ? ETrue : EFalse;
+    iData->iServerHandle = KErrNotFound;
+    }
+
+// ---------------------------------------------------------------------------
+// Return Alf general component instance
+// ---------------------------------------------------------------------------
+//
+CAlfGenComponent* CAlfTextStyle::Comms() const
+	{
+	return iData->iComms;
+	}
+	
+// ---------------------------------------------------------------------------
+// Return serverside id
+// ---------------------------------------------------------------------------
+//
+TInt CAlfTextStyle::ServerHandle() const
+    {
+    if (iData->iServerHandle != KErrNotFound)
+        {
+        return iData->iServerHandle;    
+        }
+    else
+        {
+        TPckg<TInt> buf(iData->iServerHandle);   
+        TBuf8<1> dum;        
+        TInt err = iData->iComms->DoSynchronousCmd(EAlfTextStyleServerHandle, dum, buf);        
+        if ( err != KErrNone )
+            {
+            __ALFLOGSTRING1( "CAlfTextStyle::ServerHandle panic error %d", err )
+            User::Invariant();
+            }
+        return iData->iServerHandle;
+        }            
+    }
+#else
+NONSHARABLE_CLASS(CTextBitmapProvider):public CBase, public MAlfBitmapProvider
+    {
+    public: 
+    virtual void ProvideBitmapL(TInt /*aId*/, CFbsBitmap*& aBitmap, CFbsBitmap*& aMaskBitmap)
+        {
+        aBitmap = iColorBitmap;
+        iColorBitmap = 0;
+        aMaskBitmap = iAlphaBitmap;
+        iAlphaBitmap= 0;
+        }
+        
+    ~CTextBitmapProvider()
+        {
+        delete iColorBitmap;
+        delete iAlphaBitmap;
+        }
+        
+    CFbsBitmap* iColorBitmap;
+    CFbsBitmap* iAlphaBitmap;
+    };
+    
+// Private data
+struct CAlfTextStyle::TPrivateData
+    {
+    CAlfTextStyleManager* iManager; // Not owned.
+    TInt iId; // Owned.
+    TInt iParentId; // Owned.
+    TInt iFontStyleId; // Owned
+    TInt iLocalDefinitionFlags; // Owned.
+    TRgb iTextColor; // Owned.
+    TBool iIsUnderline; // Owned.
+    TBool iIsStrikeThrough; // Owned.
+    THuiFont iFont; // cool
+    CTextBitmapProvider* iBitmapProvider;
+    };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CAlfTextStyle::CAlfTextStyle()
+	: iData(NULL)
+	{
+	}
+    
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CAlfTextStyle::~CAlfTextStyle()
+	{
+    if(iData)
+	    {
+    	//delete iData->iComms;
+    	//iData->iComms = NULL;
+	    delete iData->iBitmapProvider;
+	    }
+	delete iData;
+	iData = NULL;
+	}
+
+// ---------------------------------------------------------------------------
+// Constructs a new CAlfTextStyle object
+// ---------------------------------------------------------------------------
+//
+CAlfTextStyle* CAlfTextStyle::NewL(CAlfEnv& aEnv, TInt aId, TInt aImplementationId, const TDesC8& aConstructionParams)
+	{
+	CAlfTextStyle* self = CAlfTextStyle::NewLC(aEnv, aId, aImplementationId, aConstructionParams);        
+    CleanupStack::Pop(self);
+    return self;			
+	}
+
+// ---------------------------------------------------------------------------
+// Constructs a new CAlfTextStyle object
+// ---------------------------------------------------------------------------
+//
+CAlfTextStyle* CAlfTextStyle::NewLC(CAlfEnv& aEnv, TInt aId, TInt aImplementationId, const TDesC8& aConstructionParams)
+	{
+	CAlfTextStyle* self = new( ELeave ) CAlfTextStyle();
+    CleanupStack::PushL(self);
+    self->ConstructL(aEnv, aId, aImplementationId, aConstructionParams);
+    return self;			
+	}
+
+// ---------------------------------------------------------------------------
+// Return font style id
+// ---------------------------------------------------------------------------
+//
+TInt CAlfTextStyle::FontStyleId() const
+    {
+	return iData->iFontStyleId;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set font style id
+// ---------------------------------------------------------------------------
+//
+void CAlfTextStyle::SetFontStyleId(TInt aFontStyleId)
+    {
+	iData->iFontStyleId = aFontStyleId;
+    ReportChanged();
+    }
+    
+// ---------------------------------------------------------------------------
+// Return parent id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAlfTextStyle::ParentId() const
+    {
+	return iData->iParentId;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set parent id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetParentId(TInt aParentId)
+    {
+    iData->iParentId = aParentId;
+    ReportChanged();
+    }
+
+// ---------------------------------------------------------------------------
+// Return Id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAlfTextStyle::Id() const
+    {
+	return iData->iId;
+    }
+    
+// ---------------------------------------------------------------------------
+// Return text color
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TRgb CAlfTextStyle::TextColor() const
+    {
+    if(iData->iLocalDefinitionFlags & KTextColorDefined)
+        {
+        return iData->iTextColor;
+        }
+    return iData->iManager->TextStyle(iData->iParentId)->TextColor();
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the color of the text rasterized with this style.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetTextColor(const TRgb& aTextColor)
+    {
+    iData->iTextColor = aTextColor;
+    iData->iLocalDefinitionFlags |= KTextColorDefined;
+    ReportChanged();
+    }
+    
+// ---------------------------------------------------------------------------
+// Returns the text size of this style in screen size independent units (twips).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAlfTextStyle::TextSizeInTwips(TBool /*aIsDecoratedSize*/) const
+    {
+    TFontSpec spec = Font()->FontSpec();
+    TInt size = spec.iHeight;
+            
+    return size;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set text size
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetTextSizeInTwips(TInt aTextSizeInTwips, TBool /*aIsDecoratedSize*/)
+    {
+	TFontSpec spec = OwnFont()->FontSpec();
+    
+    spec.iHeight = aTextSizeInTwips;
+    Font()->SetFontSpec(spec);
+    iData->iLocalDefinitionFlags |= KTextSizeDefined;
+    ReportChanged();
+    }
+    
+// ---------------------------------------------------------------------------
+// Get text size
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAlfTextStyle::TextSizeInPixels(TBool /*aIsDecoratedSize*/) const
+	{
+    TFontSpec spec = Font()->FontSpec();
+    CWsScreenDevice* screenDevice = CCoeEnv::Static()->ScreenDevice();
+    TInt textsizeInPix = screenDevice->VerticalTwipsToPixels(spec.iHeight);
+            
+    return textsizeInPix;
+ 	}
+    
+ // ---------------------------------------------------------------------------
+ // Set text size
+ // ---------------------------------------------------------------------------
+ //
+EXPORT_C void CAlfTextStyle::SetTextSizeInPixels(TInt aTextSizeInPixels, TBool /*aIsDecoratedSize*/)
+    {
+    TFontSpec spec = OwnFont()->FontSpec(); 
+    CWsScreenDevice* screenDev = CCoeEnv::Static()->ScreenDevice();
+    
+    TInt textsizeInTwips = screenDev->VerticalPixelsToTwips(aTextSizeInPixels);
+    spec.iHeight = textsizeInTwips;
+    Font()->SetFontSpec(spec);
+    iData->iLocalDefinitionFlags |= KTextSizeDefined;
+    ReportChanged();
+	}
+    
+// ---------------------------------------------------------------------------
+// Is bold
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfTextStyle::IsBold() const
+    {
+    TFontSpec spec = Font()->FontSpec();
+    return spec.iFontStyle.StrokeWeight();
+    }
+    
+// ---------------------------------------------------------------------------
+// Set bold
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetBold(TBool aIsBold)
+    {
+    TFontSpec spec = OwnFont()->FontSpec();
+	spec.iFontStyle.SetStrokeWeight((aIsBold ? EStrokeWeightBold : EStrokeWeightNormal));
+    Font()->SetFontSpec(spec);
+    iData->iLocalDefinitionFlags |= KStrokeWeightDefined;    
+    ReportChanged();
+    }
+    
+// ---------------------------------------------------------------------------
+// Is italic
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfTextStyle::IsItalic() const
+    {
+    TFontSpec spec = Font()->FontSpec();
+    return spec.iFontStyle.Posture();
+    }
+    
+// ---------------------------------------------------------------------------
+// Set italic
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetItalic(TBool aIsItalic)
+    {
+    TFontSpec spec = OwnFont()->FontSpec();
+	spec.iFontStyle.SetPosture((aIsItalic ? EPostureItalic : EPostureUpright));
+    Font()->SetFontSpec(spec);
+    iData->iLocalDefinitionFlags |= KPostureDefined;
+    ReportChanged();
+    }
+    
+// ---------------------------------------------------------------------------
+// Is underlined
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfTextStyle::IsUnderline() const
+    {
+    if(iData->iLocalDefinitionFlags & KUnderlineDefined)
+        {
+        return iData->iIsUnderline;
+        }
+    return iData->iManager->TextStyle(iData->iParentId)->IsUnderline();
+    }
+    
+// ---------------------------------------------------------------------------
+// Set underlined
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetUnderline(TBool aIsUnderline)
+    {
+    iData->iIsUnderline = aIsUnderline;
+    iData->iLocalDefinitionFlags |= KUnderlineDefined;
+    ReportChanged();
+    }
+    
+// ---------------------------------------------------------------------------
+// Is strike through
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfTextStyle::IsStrikeThrough() const
+    {
+    if(iData->iLocalDefinitionFlags & KStrikeThroughDefined)
+        {
+        return iData->iIsStrikeThrough;
+        }
+    return iData->iManager->TextStyle(iData->iParentId)->IsStrikeThrough();
+    }
+    
+// ---------------------------------------------------------------------------
+// Set strike through
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfTextStyle::SetStrikeThrough(TBool aIsStrikeThrough)
+    {
+    iData->iIsStrikeThrough = aIsStrikeThrough;
+    iData->iLocalDefinitionFlags |= KStrikeThroughDefined;
+    ReportChanged();
+    }
+
+// ---------------------------------------------------------------------------
+// Get the typeface
+// ---------------------------------------------------------------------------
+//
+void CAlfTextStyle::GetTypeface( TTypeface& aTypeface ) const
+	{
+    TFontSpec spec = Font()->FontSpec();
+    aTypeface = spec.iTypeface; // Structure copy
+	}
+	
+// ---------------------------------------------------------------------------
+// Get the typeface
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CAlfTextStyle::TypefaceNameL( ) const
+	{
+	return Font()->FontSpec().iTypeface.iName.AllocL();
+	}
+	
+ // ---------------------------------------------------------------------------
+ // Set Text Pane Height In Pixels
+ // ---------------------------------------------------------------------------
+ //
+EXPORT_C void CAlfTextStyle::SetTextPaneHeightInPixels(TInt aTextPaneHeight, TBool /*aIsDecoratedSize*/)
+    {
+    TFontSpec oldFontSpec = Font()->FontSpec(); 
+    
+    // now generate a font with the new text pane height 
+    CWsScreenDevice* screenDev = CCoeEnv::Static()->ScreenDevice();
+    TAknFontSpecification aknFs(Font()->Category(), oldFontSpec, screenDev);
+    aknFs.SetTextPaneHeight(aTextPaneHeight);
+
+    // and get its corresponding spec
+    TFontSpec newFontSpec;
+    TInt foundIndex(KErrNotFound);
+    AknFontProvider::GetFontSpecFromMetrics(*screenDev, 0, aknFs, newFontSpec, foundIndex);
+
+    if(foundIndex != KErrNotFound)
+        {
+        TInt textsizeInTwips = screenDev->VerticalPixelsToTwips(newFontSpec.iHeight);
+        newFontSpec.iHeight = textsizeInTwips;
+        OwnFont()->SetFontSpec(newFontSpec);
+        iData->iLocalDefinitionFlags |= KTextSizeDefined;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CAlfTextStyle::RasterizeLineL
+// Rasterizes the given string on to the target texture using this text style.
+// ---------------------------------------------------------------------------
+//
+void CAlfTextStyle::RasterizeLineL(const TDesC& aTextLine, CAlfTexture** aTargetTexture)
+	{
+	// Calculate the pixel extents of the text line.
+	TSize textureSize = LineExtentsL(aTextLine);
+	
+	//TSize maxTextureSize = (*aTargetTexture)->MaxTextureSize();
+
+    if (!iData->iBitmapProvider)
+        {
+        iData->iBitmapProvider = new (ELeave) CTextBitmapProvider();
+        }
+    
+    if ( !iData->iBitmapProvider->iColorBitmap || textureSize != iData->iBitmapProvider->iColorBitmap->SizeInPixels())  
+        {
+        // could resize existing instead..    
+        delete iData->iBitmapProvider->iColorBitmap;
+        iData->iBitmapProvider->iColorBitmap = 0;
+        // Create target alpha bitmap to rasterize the text onto.
+	    iData->iBitmapProvider->iColorBitmap = new (ELeave) CFbsBitmap();    
+	    User::LeaveIfError(iData->iBitmapProvider->iColorBitmap->Create(textureSize, EGray256));
+        }
+	
+	// Create the bitmap device to be used in rasterization.
+    CFbsBitmapDevice* device = CFbsBitmapDevice::NewL(iData->iBitmapProvider->iColorBitmap);
+	CleanupStack::PushL(device);
+	
+	// Create drawing context.
+	CFbsBitGc* gc = 0;
+	User::LeaveIfError(device->CreateContext(gc));
+	CleanupStack::PushL(gc);
+	
+	// Prepare the bitmap for drawing.
+	gc->SetBrushColor(KRgbBlack);
+	gc->Clear();
+	
+	// Draw the text onto the bitmap.    
+	gc->SetPenColor(KRgbWhite);
+		
+	// Do underlining
+	gc->SetUnderlineStyle(IsUnderline() ? EUnderlineOn : EUnderlineOff);
+	// Do strikethrough
+	gc->SetStrikethroughStyle(IsStrikeThrough() ? EStrikethroughOn : EStrikethroughOff);
+	
+	//if(iClippingEnabled)
+	//{
+    //	gc->SetClippingRect(iClipRect);
+	//}
+    
+	// Rasterize text string using the configured font.
+	Font()->RasterizeLineL(aTextLine, *gc);
+	
+	// Destroy graphics context and drawing device.
+	CleanupStack::PopAndDestroy(gc);
+	CleanupStack::PopAndDestroy(device);
+    
+
+	delete iData->iBitmapProvider->iAlphaBitmap;
+	iData->iBitmapProvider->iAlphaBitmap = NULL;
+	
+    // todo: proper flagging, e.g. use directly        
+    *aTargetTexture = &CAlfEnv::Static()->TextureManager().CreateTextureL(KAlfAutoGeneratedTextureId, 
+                                                                        iData->iBitmapProvider,
+                                                                        EAlfTextureFlagDefault); 
+	}
+
+// ---------------------------------------------------------------------------
+// THuiTextStyle::LineExtentsL
+// Provides dimensions of the rasterization of the given string. 
+// ---------------------------------------------------------------------------
+//
+TSize CAlfTextStyle::LineExtentsL(const TDesC& aTextLine)
+	{    
+	// Retrieve the non-decorated line extents from the used font.
+	return Font()->LineExtentsL(aTextLine);
+	}
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAlfTextStyle::ConstructL(CAlfEnv& aEnv, TInt aId, TInt aImplementationId, const TDesC8& /*aConstructionParams*/)
+    {
+	if(!iData)
+		{
+	    iData = new (ELeave) TPrivateData;
+	    iData->iId = 0;
+	    iData->iLocalDefinitionFlags = 0;
+	    iData->iManager = 0;
+	    iData->iParentId = 0;
+	    iData->iFontStyleId = aImplementationId;
+	    iData->iIsUnderline = EFalse;
+	    iData->iIsStrikeThrough = EFalse;
+		iData->iBitmapProvider = 0;
+		}
+	
+/*    if (!iData->iComms)
+        {
+        iData->iComms = CAlfGenComponent::NewL(
+            aEnv,
+            aImplementationId, 
+            0,
+            aConstructionParams);  
+        }*/
+           
+    iData->iId = aId;
+    //iData->iManager = &aEnv.TextStyleManager();
+    //iData->iIsPreconfigured = (aImplementationId == EAlfPreconfiguredTextStyleCreate) ? ETrue : EFalse;
+    //iData->iServerHandle = KErrNotFound;
+    iData->iBitmapProvider = new (ELeave) CTextBitmapProvider();
+    }
+
+CAlfGenComponent* CAlfTextStyle::Comms() const
+	{
+    return 0;
+	}
+	
+TInt CAlfTextStyle::ServerHandle() const
+    {
+    return KErrNotFound;
+    }
+	
+THuiFont* CAlfTextStyle::Font() const
+    {
+    if(iData->iLocalDefinitionFlags & KFontDefined)
+        {
+        return &iData->iFont;
+        }
+        
+    return iData->iManager->TextStyle(iData->iParentId)->Font();
+    }
+    
+THuiFont* CAlfTextStyle::OwnFont()
+    {
+    if(!(iData->iLocalDefinitionFlags & KFontDefined))
+        {
+        SetFont(iData->iManager->TextStyle(iData->iParentId)->Font());
+        }
+    
+    return Font();
+    }
+
+void CAlfTextStyle::SetFont(THuiFont* aFont)
+    {
+    if (aFont)
+        {
+        iData->iFont = *aFont;
+        iData->iLocalDefinitionFlags |= KFontDefined;
+        }
+    else    
+        {
+        iData->iLocalDefinitionFlags &= ~KFontDefined;
+        }
+        
+    ReportChanged();
+    }
+
+void CAlfTextStyle::ReportChanged()
+    {
+    if (iData->iManager)
+        { // when creating platform style, manager is not ready yet
+        iData->iManager->RefreshVisuals(iData->iId);    
+        }
+    }
+
+void CAlfTextStyle::SetManager(CAlfTextStyleManager* aManager)
+    {
+    iData->iManager = aManager;
+    }
+#endif