--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/nga/SERVER/graphicscontextstate.cpp Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,141 @@
+// Copyright (c) 2008-2009 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:
+//
+
+#include "graphicscontextstate.h"
+#include "cliwin.h"
+
+/*------------------------------------------------------------------------------
+ Description: Resets internal status of the graphics context to pre-defined values.
+ -----------------------------------------------------------------------------*/
+void TInternalGcStatus::ResetInternalStatus(CWsClientWindow* aWin)
+ {
+ iDrawMode = CGraphicsContext::EDrawModePEN;
+ iPenColor = KRgbBlack;
+ iBrushColor = aWin ? aWin->BackColor() : KRgbWhite;
+ iPenStyle = CGraphicsContext::ESolidPen;
+ iBrushStyle = CGraphicsContext::ENullBrush;
+ iPenSize = TSize(1,1);
+ iFontHandle = NULL;
+ iUnderline = EUnderlineOff;
+ iStrikethrough = EStrikethroughOff;
+ iBrushPatternHandle = NULL;
+ iBrushOrigin = TPoint(0,0);
+ iCharExcessWidth = 0;
+ iCharNumChars = 0;
+ iWordExcessWidth = 0;
+ iWordNumChars = 0;
+ iOrigin = TPoint(0,0);
+ iShadowColor = KRgbGray;
+ }
+
+/*------------------------------------------------------------------------------
+ Description: Helper function to retrieve current data from the given buffer and
+ set graphics context.
+ -----------------------------------------------------------------------------*/
+void TInternalGcStatus::InternalizeGcAttributesL(MWsGraphicsContext* aGc, RReadStream& aReadStream)
+ {
+ aGc->SetDrawMode((MWsGraphicsContext::TDrawMode)(aReadStream.ReadUint8L()));
+
+ MWsGraphicsContext::TBrushStyle brushStyle = (MWsGraphicsContext::TBrushStyle) (aReadStream.ReadUint8L());
+ aGc->SetPenStyle((MWsGraphicsContext::TPenStyle) (aReadStream.ReadUint8L()));
+
+ TRgb penColor;
+ penColor.InternalizeL(aReadStream);
+ aGc->SetPenColor(penColor);
+
+ TRgb brushColor;
+ brushColor.InternalizeL(aReadStream);
+ aGc->SetBrushColor(brushColor);
+
+ TSize size;
+ aReadStream >> size;
+ aGc->SetPenSize(size);
+
+ aGc->ResetBrushPattern();
+ TInt brushHandle = aReadStream.ReadInt32L();
+ if(brushHandle)
+ {
+ aGc->SetBrushPattern(brushHandle);
+ if (!aGc->HasBrushPattern() && brushStyle == MWsGraphicsContext::EPatternedBrush)
+ {
+ // Panic may occur if trying to set EPatternedBrush when a bitmap has not been
+ // successfully set, so revert to null brush.
+ brushStyle = MWsGraphicsContext::ENullBrush;
+ }
+ }
+ // Wait until any brush pattern has been set before setting the brush style.
+ aGc->SetBrushStyle(brushStyle);
+
+ TInt wordExcessWidth = aReadStream.ReadUint32L();
+ TInt wordNumChars = aReadStream.ReadUint32L();
+ aGc->SetWordJustification(wordExcessWidth, wordNumChars);
+
+ TInt charExcessWidth = aReadStream.ReadUint32L();
+ TInt charNumChars = aReadStream.ReadUint32L();
+ aGc->SetCharJustification(charExcessWidth, charNumChars);
+
+ TRgb shadowColor;
+ shadowColor.InternalizeL(aReadStream);
+ aGc->SetTextShadowColor(shadowColor);
+
+ TPoint origin;
+ aReadStream >> origin;
+ aGc->SetOrigin(origin);
+
+ TPoint brushOrigin;
+ aReadStream >> brushOrigin;
+ aGc->SetBrushOrigin(brushOrigin);
+
+ aGc->SetUnderlineStyle((MWsGraphicsContext::TFontUnderline) (aReadStream.ReadUint8L()));
+ aGc->SetStrikethroughStyle((MWsGraphicsContext::TFontStrikethrough) (aReadStream.ReadUint8L()));
+
+ aGc->ResetFont();
+ TInt fontHandle = aReadStream.ReadInt32L();
+ if(fontHandle)
+ {
+ CFbsBitGcFont font;
+ TInt res = font.Duplicate(fontHandle);
+ if(res == KErrNone)
+ {
+ aGc->SetFont(&font);
+ font.Reset();
+ }
+ }
+ }
+
+/*------------------------------------------------------------------------------
+ Description: Helper function to save graphics context information into a given buffer.
+ -----------------------------------------------------------------------------*/
+void TInternalGcStatus::ExternalizeGcAttributesL(RWriteStream& aWriteStream)
+ {
+ aWriteStream.WriteUint8L(iDrawMode);
+ aWriteStream.WriteUint8L(iBrushStyle);
+ aWriteStream.WriteUint8L(iPenStyle);
+ iPenColor.ExternalizeL(aWriteStream);
+ iBrushColor.ExternalizeL(aWriteStream);
+ aWriteStream << iPenSize;
+ aWriteStream.WriteInt32L(iBrushPatternHandle);
+ aWriteStream.WriteUint32L(iWordExcessWidth);
+ aWriteStream.WriteUint32L(iWordNumChars);
+ aWriteStream.WriteUint32L(iCharExcessWidth);
+ aWriteStream.WriteUint32L(iCharNumChars);
+ iShadowColor.ExternalizeL(aWriteStream);
+ aWriteStream << iOrigin;
+ aWriteStream << iBrushOrigin;
+ aWriteStream.WriteUint8L(iUnderline);
+ aWriteStream.WriteUint8L(iStrikethrough);
+ aWriteStream.WriteInt32L(iFontHandle);
+ }
+