graphicsdeviceinterface/bitgdi/inc/BITSTD.H
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/bitgdi/inc/BITSTD.H	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,566 @@
+// Copyright (c) 1997-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:
+//
+
+#ifndef __BITSTD_H__
+#define __BITSTD_H__
+
+#include <e32std.h>
+#include <gdi.h>
+#include <fbs.h>
+#include <bitbase.h>
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <bitgdi/bitgcextradata.h>
+#endif
+
+// For use when testing the code, allows the fast blending to be disabled so back to back comparisons
+// can done be to check either timing or exact output.
+//#define __ALLOW_FAST_BLEND_DISABLE__
+
+/**
+ @publishedAll
+ @released 
+*/
+class CFbsBitGcFont : public CFbsFont
+	{
+public:
+	IMPORT_C CFbsBitGcFont();
+	IMPORT_C virtual ~CFbsBitGcFont();
+	IMPORT_C CBitmapFont* Address() const;
+	IMPORT_C TInt Duplicate(TInt aHandle);
+	IMPORT_C void Reset();
+	IMPORT_C void operator=(const CFbsBitGcFont& aFont);
+protected:
+	TBool iCopy;
+	};
+
+
+/**
+A bitmap managed by the font and bitmap server.
+@publishedAll
+@released 
+*/
+class CFbsBitGcBitmap : public CFbsBitmap
+
+	{
+public:
+	IMPORT_C CBitwiseBitmap* Address() const;
+	IMPORT_C void LockHeap() const;
+	IMPORT_C void UnlockHeap() const;
+	};
+
+/**
+ @publishedAll
+ @released 
+*/
+class TEllipse
+	{
+public:
+	/**	
+	Enumeration for the ellipse production life cycle
+	*/
+	enum TEllipseStatus
+		{
+		/**
+		Ellipse has been initialised but has no area
+		*/
+		EInitialised,
+		/**
+		The ellipse is drawn as two parabolas. These are in two sectors, the top and bottom
+		half of the rectangle. The first sector means the top parabola has been produced.
+		*/
+		EFirstSector,
+		/**
+		The parabola that occupies the bottom half of the rectangle has been produced. 
+		*/
+		ESecondSector,
+		/**
+		The ellipse is complete
+		*/
+		EComplete,
+		/**
+		The ellipse has either a height or width of two units or less
+		and so takes the appearance of a line
+		*/
+		ELine
+		};
+public:
+	IMPORT_C void Construct(const TRect& aRect);
+	IMPORT_C TBool SingleStep(TPoint& aTopLeft,TPoint& aTopRight,TPoint& aBottomLeft,TPoint& aBottomRight);
+	IMPORT_C TBool NextStep(TPoint& aTopLeft,TPoint& aTopRight,TPoint& aBottomLeft,TPoint& aBottomRight);
+	IMPORT_C TPoint Intersection(const TRect& aRect,const TPoint& aPoint);
+protected:
+	IMPORT_C TBool Output(TPoint& aTopLeft,TPoint& aTopRight,TPoint& aBottomLeft,TPoint& aBottomRight);
+protected:
+	TEllipseStatus iStatus;
+	TInt iA;
+	TInt iB;
+	TInt64 iASquared;
+	TInt64 iBSquared;
+	TInt64 iASquBSqu;
+	TInt iX;
+	TInt iY;
+	TInt iXAdj;
+	TInt iYAdj;
+	TPoint iOffset;
+	TInt64 iD1;
+	TInt64 iD2;
+	};
+
+/**
+ @publishedAll
+ @released 
+*/
+class CPolygonFiller : public CBase
+
+	{
+public:
+
+	/**
+	Describes how pixels are to be displayed in the polygon. aUsage should be select to
+	one of these values before CPolygonFiller::Construct is used.
+	*/
+	enum TUsage
+		{
+		/**
+		A request for all pixel runs in sequential order
+		*/
+		EGetAllPixelRunsSequentially,
+		/**
+		A request for all pixel runs in sequential order but only for specified lines.
+		*/
+		EGetPixelRunsSequentiallyForSpecifiedScanLines
+		};
+public:
+	IMPORT_C CPolygonFiller();
+	IMPORT_C ~CPolygonFiller();
+	IMPORT_C void Construct(const CArrayFix<TPoint>* aPointArray,CGraphicsContext::TFillRule aFillRule,TUsage aUsage=EGetAllPixelRunsSequentially); // N.B. this cannot fail
+	IMPORT_C void Construct(const TPoint* aPointList,TInt aNumPoints, CGraphicsContext::TFillRule aFillRule, TUsage aUsage=EGetAllPixelRunsSequentially); // N.B. this cannot fail
+	IMPORT_C void Reset();
+	IMPORT_C void GetNextPixelRun(TBool& aExists, TInt& aScanLine, TInt& aStart, TInt& aEnd);
+	IMPORT_C void GetNextPixelRunOnSpecifiedScanLine(TBool& aExists, TInt aScanLine, TInt& aStart, TInt& aEnd);
+private: // data-types for the fast algorithm
+	struct SFastEdge
+		{
+		TInt upperVertex;
+		TInt lowerVertex;
+		TInt firstVertex;
+		};
+	struct SFastScanLineIntersection;
+	struct SFastActiveEdge
+		{
+		SFastEdge* edgePtr;
+		TLinearDDA lineGenerator;
+		SFastScanLineIntersection* scanLineIntersectionPtr;
+		};
+	struct SFastScanLineIntersection
+		{
+		TInt firstPixel;
+		TInt lastPixel;
+		SFastActiveEdge* activeEdgePtr;
+		};
+private: // data-types for the slow algorithm
+	struct SSlowScanLineIntersection
+		{
+		TInt firstPixel;
+		TInt lastPixel;
+		TInt firstVertexOfEdge;
+		};
+private: // data-types for both algorithms
+	struct SFastData
+		{
+		TPoint* vertexList;
+		SFastEdge* edgeList;
+		SFastActiveEdge* activeEdgeList;
+		SFastScanLineIntersection* scanLineIntersectionList;
+		TInt numActiveEdges;
+		TInt numScanLineIntersections;
+		TInt nextEdgeToActivate;
+		};
+	struct SSlowData
+		{
+		enum {EStoreSize=8};
+		TLinearDDA lineGenerator;
+		SSlowScanLineIntersection scanLineIntersectionList[EStoreSize];
+		TInt numIntersectionsWithSameFirstPixelPreviouslyMet;
+		TInt numIntersectionsWithSameFirstPixelMetThisTime;
+		TInt numScanLineIntersections;
+		TBool scanLineComplete;
+		TInt firstPixelOfLastIntersectionInPrevBuffer;
+		};
+private:
+	void Construct(CGraphicsContext::TFillRule aFillRule,TUsage aUsage);
+	void FastHandleVertexIntersection(TInt& aCurrentActiveEdge, TBool aIsLowerVertex);
+	void SetFastIntersection(SFastActiveEdge& aActiveEdge, SFastScanLineIntersection& aScanLineIntersection);
+	void SlowHandleVertexIntersection(SSlowScanLineIntersection& aScanLineIntersection, TInt& aVertexStartingCurrentEdge,TBool aIsLowerVertex);
+	void JumpToCurrentScanLine(TLinearDDA& aLineGenerator, const TPoint& aUpper, const TPoint& aLower,TPoint& aStartPos, TPoint& aEndPos) const;
+	const TPoint& Point(TInt aIndex);
+private:
+	const CArrayFix<TPoint>* iPointArray; // not owned by the class
+	const TPoint* iPointList; // not owned by the class
+	CGraphicsContext::TFillRule iFillRule;
+	TBool iUseFastAlgorithm;
+	TInt iNumVertexes;
+	TBool iToggler; // used by EAlternate fill-rule
+	TInt iNestingLevel; // used by EWinding fill-rule
+	TInt iScanLineIntersection;
+	TInt iRightMostPixelOnScanLine;
+	TInt iFirstVertex;
+	TBool iPolygonIsAllHorizontal;
+	TInt iFirstScanLine;
+	TInt iLastScanLine;
+	TInt iCurrentScanLine;
+	SFastData iFastData;
+	SSlowData iSlowData;
+private:
+	friend class TCompareEdgesUpperY;
+	friend class TCompareActiveEdgesFirstVertex;
+	friend class TCompareScanLineIntersectionsFirstPixel;
+	friend class TSwapEdges;
+	friend class TSwapActiveEdges;
+	friend class TSwapScanLineIntersections;
+	};
+
+class CFbsDevice;
+class CFbsDrawDevice;
+class TOpenFontCharMetrics;
+class CGraphicsAccelerator;
+class CWsBitmap;
+class MFastBlend;
+class CFbsRasterizer;
+class CFbsBitGcExtraData;
+
+/** 
+Concrete implementation of a bitmapped graphics context.
+
+The class provides new functionality, and implementations of the pure virtual 
+functions defined in CGraphicsContext and CBitmapContext. 
+@publishedAll
+@released
+*/
+class CFbsBitGc : public CBitmapContext
+	{
+public:
+
+
+/** Defines possible rotation values. */
+	enum TGraphicsOrientation
+		{
+	/** Normal orientation is supported. */
+		EGraphicsOrientationNormal,
+	/** A 90 degree rotation is supported. */
+		EGraphicsOrientationRotated90,
+	/** A 180 degree rotation is supported. */
+		EGraphicsOrientationRotated180,
+	/** A 270 degree rotation is supported. */
+		EGraphicsOrientationRotated270
+		};
+public:
+	IMPORT_C static CFbsBitGc* NewL();
+	IMPORT_C virtual ~CFbsBitGc();
+	IMPORT_C void Activate(CFbsDevice* aDevice);
+	IMPORT_C void ActivateNoJustAutoUpdate(CFbsDevice* aDevice);
+	IMPORT_C void BitBlt(const TPoint& aPoint,const CFbsBitGc& aGc);
+	IMPORT_C void BitBlt(const TPoint& aPoint,const CFbsBitGc& aGc,const TRect& aSourceRect);
+	IMPORT_C void BitBlt(const TPoint& aPoint,const CFbsBitmap* aBitmap);
+	IMPORT_C void BitBlt(const TPoint& aPoint,const CFbsBitmap* aBitmap,const TRect& aSourceRect);
+	IMPORT_C void BitBltMasked(const TPoint& aPoint,const CFbsBitmap* aBitmap,const TRect& aSourceRect,const CFbsBitmap* aMaskBitmap,TBool aInvertMask);
+	IMPORT_C void CancelClipping();
+	IMPORT_C void CancelClippingRect();
+	IMPORT_C void CancelClippingRegion();
+	IMPORT_C void Clear();
+	IMPORT_C void Clear(const TRect& aRect);
+	IMPORT_C void CopyRect(const TPoint& aOffset,const TRect& aRect);
+	IMPORT_C void CopySettings(const CFbsBitGc& aGc);
+	IMPORT_C CGraphicsDevice* Device() const;
+	IMPORT_C void DiscardBrushPattern();
+	IMPORT_C void DiscardFont();
+	IMPORT_C void DrawArc(const TRect& aRect,const TPoint& aStart,const TPoint& aEnd);
+	IMPORT_C void DrawPie(const TRect& aRect,const TPoint& aStart,const TPoint& aEnd);
+	IMPORT_C void DrawBitmap(const TPoint& aTopLeft,const CFbsBitmap* aSource);
+	IMPORT_C void DrawBitmap(const TRect& aDestRect,const CFbsBitmap* aSource);
+	IMPORT_C void DrawBitmap(const TRect& aDestRect,const CFbsBitmap* aSource,const TRect& aSourceRect);
+	IMPORT_C void DrawBitmapMasked(const TRect& aDestRect,const CFbsBitmap* aBitmap,const TRect& aSourceRect,const CFbsBitmap* aMaskBitmap,TBool aInvertMask);
+	IMPORT_C void DrawBitmapMasked(const TRect& aDestRect,const CWsBitmap* aBitmap,const TRect& aSourceRect,const CWsBitmap* aMaskBitmap,TBool aInvertMask);
+	IMPORT_C void DrawRoundRect(const TRect& aRect,const TSize& aEllipse);
+	IMPORT_C void DrawPolyLine(const CArrayFix<TPoint>* aPointList);
+	IMPORT_C void DrawPolyLineNoEndPoint(const CArrayFix<TPoint>* aPointList);
+	IMPORT_C void DrawPolyLine(const TPoint* aPointList,TInt aNumPoints);
+	IMPORT_C void DrawPolyLineNoEndPoint(const TPoint* aPointList,TInt aNumPoints);
+	IMPORT_C TInt DrawPolygon(const CArrayFix<TPoint>* aPointList,CGraphicsContext::TFillRule aFillRule=CGraphicsContext::EAlternate);
+	IMPORT_C TInt DrawPolygon(const TPoint* aPointList,TInt aNumPoints,CGraphicsContext::TFillRule aFillRule=CGraphicsContext::EAlternate);
+	IMPORT_C void DrawEllipse(const TRect& aRect);
+	IMPORT_C void DrawLine(const TPoint& aStart,const TPoint& aEnd);
+	IMPORT_C void DrawLineTo(const TPoint& aPoint);
+	IMPORT_C void DrawLineBy(const TPoint& aVector);
+	IMPORT_C void DrawRect(const TRect& aRect);
+	IMPORT_C void DrawText(const TDesC& aText);
+	IMPORT_C void DrawText(const TDesC& aText,const TPoint& aPosition);
+	IMPORT_C void DrawText(const TDesC& aText,const TRect& aBox);
+	IMPORT_C void DrawText(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TTextAlign aHrz=ELeft,TInt aMargin=0);
+	IMPORT_C void DrawText(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TInt aTextWidth,TTextAlign aHrz=ELeft,TInt aMargin=0);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,TBool aUp);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,const TPoint& aPosition,TBool aUp);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,const TRect& aBox,TBool aUp);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TInt aTextWidth,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
+	IMPORT_C void MapColors(const TRect& aRect,const TRgb* aColors,TInt aNumPairs=2,TBool aMapForwards=ETrue);
+	IMPORT_C void MoveTo(const TPoint& aPoint);
+	IMPORT_C void MoveBy(const TPoint& aVector);
+	IMPORT_C void OrientationsAvailable(TBool aOrientation[4]);
+	IMPORT_C void Plot(const TPoint& aPoint);
+	IMPORT_C void RectDrawnTo(TRect& aRect);
+	IMPORT_C void Reset();
+	IMPORT_C void Resized();
+	IMPORT_C void SetBrushColor(const TRgb& aColor);
+	IMPORT_C void SetBrushOrigin(const TPoint& aOrigin);
+	IMPORT_C void SetBrushStyle(TBrushStyle aBrushStyle);
+	IMPORT_C void SetClippingRegion(const TRegion* aRegion);
+	IMPORT_C void SetClippingRect(const TRect& aRect);
+	IMPORT_C void SetDitherOrigin(const TPoint& aPoint);
+	IMPORT_C void SetDrawMode(TDrawMode);
+	IMPORT_C void SetOrigin(const TPoint& aPoint=TPoint(0,0));
+	IMPORT_C void SetPenColor(const TRgb& aColor);
+	IMPORT_C void SetPenStyle(TPenStyle);
+	IMPORT_C void SetPenSize(const TSize& aSize);
+	IMPORT_C void SetCharJustification(TInt aExcessWidth,TInt aNumGaps);
+	IMPORT_C void SetWordJustification(TInt aExcessWidth,TInt aNumChars);
+	IMPORT_C void SetUnderlineStyle(TFontUnderline aUnderlineStyle);
+	IMPORT_C void SetUserDisplayMode(TDisplayMode aDisplayMode);
+	IMPORT_C void SetStrikethroughStyle(TFontStrikethrough aStrikethroughStyle);
+	IMPORT_C void SetShadowMode(TBool aShadowMode = EFalse);
+	inline void SetFadeMode(TBool aFadeMode = EFalse);			//Deprecated
+	inline void SetFadingParameters(TUint8 aBlackMap = 0);		//Deprecated
+	IMPORT_C void SetFaded(TBool aFaded);		//Virtual from CBitmapContext
+	IMPORT_C void SetFadingParameters(TUint8 aBlackMap,TUint8 aWhiteMap);	//Virtual from CBitmapContext
+	IMPORT_C TBool SetOrientation(TGraphicsOrientation aOrientation);
+	IMPORT_C void ShadowArea(const TRegion* aRegion);
+	IMPORT_C void FadeArea(const TRegion* aRegion);
+	IMPORT_C void UpdateJustification(const TDesC& aText);
+	IMPORT_C void UpdateJustificationVertical(const TDesC& aText,TBool aUp);
+	IMPORT_C void UseBrushPattern(const CFbsBitmap* aBitmap);
+	IMPORT_C TInt UseBrushPattern(TInt aFbsBitmapHandle);
+	IMPORT_C void UseFont(const CFont* aFont);
+	IMPORT_C TInt UseFont(TInt aFontHandle);
+	IMPORT_C void UseFontNoDuplicate(const CFbsBitGcFont* aFont);
+	IMPORT_C TBool IsBrushPatternUsed() const;
+	IMPORT_C TBool IsFontUsed() const;
+	inline static TInt16 Load16(const TUint8* aPtr) { return TInt16(aPtr[0]+(aPtr[1]<<8)); }
+	IMPORT_C TInt AlphaBlendBitmaps(const TPoint& aDestPt,
+									const CFbsBitmap* aSrcBmp1,
+									const CFbsBitmap* aSrcBmp2,
+									const TRect& aSrcRect1,
+									const TPoint& aSrcPt2,
+									const CFbsBitmap* aAlphaBmp,
+									const TPoint& aAlphaPt);
+	IMPORT_C TInt AlphaBlendBitmaps(const TPoint& aDestPt,
+									const CFbsBitmap* aSrcBmp,
+									const TRect& aSrcRect,
+									const CFbsBitmap* aAlphaBmp,
+									const TPoint& aAlphaPt);
+	IMPORT_C void ExternalizeL(RWriteStream& aWriteStream);
+	IMPORT_C void InternalizeL(RReadStream& aReadStream);
+	IMPORT_C TInt SetClippingRegion(const TRegion& aRegion);
+
+	IMPORT_C TInt AlphaBlendBitmaps(const TPoint& aDestPt,
+											const CWsBitmap* aSrcBmp,
+											const TRect& aSrcRect,
+											const CWsBitmap* aAlphaBmp,
+											const TPoint& aAlphaPt);
+	IMPORT_C TRgb BrushColor();
+	IMPORT_C TRgb PenColor();	
+	IMPORT_C void ChangeDevice(CFbsDevice* aDevice);
+	// New DrawText API's that take in extra paramemters such as context. Extensible.
+	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam);
+	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition);
+	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox);
+	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TTextAlign aHrz=ELeft,TInt aMargin=0);
+	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TInt aTextWidth,TTextAlign aHrz=ELeft,TInt aMargin=0);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,TBool aUp);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition,TBool aUp);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TBool aUp);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
+	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TInt aTextWidth,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
+	IMPORT_C void UpdateJustification(const TDesC& aText,const TTextParameters* aParam);
+	IMPORT_C void UpdateJustificationVertical(const TDesC& aText,const TTextParameters* aParam,TBool aUp);
+private:
+	CFbsBitGc();
+	void AddRect(const TRect& aRect);
+	TBool AnalyseEllipse(const TRect& rc, TPoint& srad, TPoint& erad, TInt& startq, TInt& endq, TBool* quads);
+	void BitMultiply(TUint32* aBinaryDataPtr,TInt aBitLength,TInt aMultiplier);
+	void CheckDevice() const;
+	TBool CheckDevice(const TRect& aRect) const;
+	TUint32* ClipBinaryArray(TUint32* aArray,TUint32* aArrayLimit,TInt aArrayWordWd,TInt& aDataWd,TInt& aDataHt,TPoint& aPos);
+	void ClipFillLine(TPoint,TPoint);
+	void CopyCharWord(TUint32* aBinaryDataPtr,const TUint8* aData,TInt aBitShift);
+	void CopyCharLine(TUint32* aBinaryDataPtr,TInt aBufferWords,const TUint8* aData,TInt aBitShift,TInt aCharWidth);
+	void DrawText(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition,TTextAlign aAlignment,
+				  CFont::TTextDirection aDirection,const TRect* aBox = NULL);
+	void DoBitBlt(const TPoint& aDest,CFbsDevice* aDevice,const TRect& aSourceRect);
+	void DoBitBlt(const TPoint& aDest,CBitwiseBitmap* aBitmap,TUint32* aBase,TInt aStride,const TRect& aSourceRect);
+	void DoBitBltMasked(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
+	void DoBitBltMaskedFlicker(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
+	void DoBitBltMaskedNonFlicker(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
+	void DoBitBltMaskedNonFlickerSolid(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
+	void DoBitBltMaskedNonFlickerPatterned(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
+	void DoBitBltAlpha(const TPoint& aDest, CBitwiseBitmap* aSourceBitmap,
+					   TUint32* aSourceBase, const TRect& aSourceRect,
+					   CBitwiseBitmap* aMaskBitmap, TUint32* aMaskBase,
+					   const TPoint& aAlphaPoint, TInt aShadowMode, TBool aInvertMask);
+	void DoBitBltAlpha(const TPoint& aDestPt,
+					   const CBitwiseBitmap* aSrcBmp1,
+					   TUint32* aSrcBmpDataAddr1,
+					   const CBitwiseBitmap* aSrcBmp2,
+					   TUint32* aSrcBmpDataAddr2,
+					   const CBitwiseBitmap* aAlphaBmp,
+					   TUint32* aAlphaBmpDataAddr,
+					   const TRect& aSrcRect1,
+					   const TPoint& aSrcPt2,
+					   const TPoint& aAlphaPt,
+					   TInt aShadowMode);
+	void DoCopyRect(const TPoint&,const TRect&);
+	void DoDrawBitmap(const TRect&,CBitwiseBitmap*,TUint32* aBase,TInt aStride,const TRect&,const TPoint& aDitherOrigin);
+	void DoDrawBitmapMasked(const TRect& aDestRect,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin);
+	void DoDrawLine(TPoint aStart,TPoint aEnd,TBool aDrawStartPoint);
+	void DoDrawDottedWideLine(const TPoint& pt1,const TPoint& pt2,TBool drawstart,const TRect& screenrect);
+	void DoDrawSolidWideLine(const TPoint& pt1,const TPoint& pt2,TBool drawstart,const TRect& screenrect);
+	void DoDrawText(CFont::TPositionParam& aParam,const TInt aEnd);
+	void DoDrawCharacter(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData);
+	void DoDrawTextEx(CFont::TPositionParam& aParam,const CBitmapFont* font,const TInt aEnd, const TInt aUnderlineStrikethroughOffset);
+	void DoDrawCharacterEx(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
+		TBool aBold,TBool aItalic,TInt aSemiAscent);
+	void DoDrawCharacterAntiAliased(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData, const TGlyphBitmapType aGlyphType);
+	void DoDrawTextLarge(CFont::TPositionParam& aParam,const CBitmapFont* font,const TInt aEnd);
+	void DoDrawCharacterLarge(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
+		TBool aBold,TBool aItalic,TInt aSemiAscent,TInt aWidthFactor,TInt aHeightFactor);
+	void DoDrawCharacterExLarge(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
+		TBool aBold,TBool aItalic,TInt aSemiAscent,TInt aWidthFactor,TInt aHeightFactor);
+	void DoDrawCharacterMultiplied(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
+		TBool aBold,TBool aItalic,TInt aSemiAscent,TInt aWidthMultiplier,TInt aHeightMultiplier);
+	void DoDrawTextVertical(CFont::TPositionParam& aParam,const CBitmapFont* font,TBool aUp,const TInt aEnd);
+	void DoDrawCharacterVertical(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
+		TBool aBold,TBool aItalic,TInt aSemiAscent,TInt aWidthFactor,TInt aHeightFactor,TBool aUp);
+	void DoDrawCharacterVerticalAntiAliased(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,TBool aUp, TGlyphBitmapType aGlyphBitmapType);
+	void DoPlot(const TPoint& pt);
+	void EllipseFill(const TRect& aRect);
+	void EllipseOutline(const TRect& aRect);
+	void EllipseOutlineWide(const TRect& aRect);
+	void GetStrikethroughMetrics(TInt& aTop,TInt& aBottom);
+	void OutputCharLine(TPoint aPrintPos,TUint32* aBuffer,TInt aDataLength,TInt aNum,TBool aBold,TInt aWidthFactor,TInt aHeightFactor);
+	void OutputCharLineMultiplied(TPoint aPrintPos,TUint32* aBuffer,TInt aDataLength,TInt aNum,TBool aBold,TInt aWidthMultiplier,TInt aHeightMultiplier);
+	void OutputCharLineVertical(TPoint aPrintPos,TUint32* aBuffer,TInt aDataLength,TInt aNum,TBool aBold,TInt aWidthFactor,TInt aHeightFactor,TBool aUp);
+	void PenAllocate();
+	void PenDrawClipped(TPoint aPoint);
+	void PenDrawDeferred(TPoint aPoint,TInt* aArray,TInt aFirstElement);
+	void PieArcOutline(const TRect& aRect,const TPoint& aStartRadius,const TPoint& aEndRadius,TBool aDoPie);
+	void PieFill(const TRect& ellrect, const TPoint& aStartIntersect, const TPoint& aEndIntersect,
+		TInt aStartQuadrant, TInt aEndQuadrant, const TBool* aQuadrants);
+	void PieShell(const TRect& ellrect, const TPoint& startradius, const TPoint& endradius,
+		const TBool* quads, TInt startquad, TInt endquad);
+	void PieTriangles(TBool aInside,const TPoint& aStart,const TPoint& aEnd);
+	void PieSliver(const TRect& ellrect,const TPoint& startradius,const TPoint& endradius,TInt quad);
+	void PolyFill(const CArrayFix<TPoint>* aPointList,TFillRule aFillRule);
+	void PolyFillLarge(const CArrayFix<TPoint>* aPointList,TFillRule aFillRule);
+	void PolyFill(const TPoint* aPointList,TInt aNumPoints,TFillRule aFillRule);
+	void PolyFillLarge(const TPoint* aPointList,TInt aNumPoints,TFillRule aFillRule);
+	void PolyOutline(const CArrayFix<TPoint>* aPointList);
+	void PolyOutline(const TPoint* aPointList,TInt aNumPoints);
+	void RectFill(const TRect& aRect);
+	void RoundRectFill(const TRect& aRect,TSize aSize);
+	void RoundRectOutline(const TRect& aRect,TSize aSize);
+	void SetupDevice() const;
+	void ShadowFadeArea(const TRegion* aRegion,TInt8 aShadowMode);
+	TBool UserClipRect(TRect& aRect);
+	CGraphicsAccelerator* GraphicsAccelerator();
+	TUint MemoryOffsetForPixelPitch(TUint aX, TDisplayMode aDisplayMode);
+	TUint32* GetScanLineOffsetPtr(CBitwiseBitmap* aSrce, TUint32*& aSlptr, TInt aLength, TPoint aPixel,TUint32* aBase, TLineScanningPosition& aLineScanningPosition, TUint aXOffset);
+	void APIExGetUnderlineMetrics(TAny*& aOutput);
+	TInt APIExSetShadowColor(TAny* aShadowColor);
+	TInt APIExGetShadowColor(TAny*& aShadowColor);
+	TInt FastBlendInterface(const CBitwiseBitmap* aSource, const CBitwiseBitmap* aMask, MFastBlend*& aFastBlend) const;
+	TInt APIExIsFbsBitGc(TAny*& aIsCFbsBitGc);
+	TDisplayMode ScanLineBufferDisplayMode(CFbsDrawDevice* aDrawDevice);
+	TInt BaselineCorrection();
+	CFbsRasterizer* PrepareRasterizerForExtendedBitmap(const CFbsBitmap& aBitmap);
+	CFbsRasterizer* PrepareRasterizerForExtendedBitmap(const CFbsBitmap& aBitmap, const TRect& aDestRect, const TPoint& aOffset);
+	CFbsRasterizer* PrepareRasterizerForExtendedBitmap(const CFbsBitmap& aBitmap, const TRect& aDestRect, const TRect& aSourceRect);
+protected:
+	/** This function should not be used by externals but must retain the
+	same ordinal number to maintain BC, thus is exported.*/
+	IMPORT_C TInt APIExtension(TUid aUid, TAny*& aOutput, TAny* aInput);
+	
+private:
+	IMPORT_C void Reserved_CGraphicsContext_2();
+
+	IMPORT_C void Reserved_CBitmapContext_1();
+	IMPORT_C void Reserved_CBitmapContext_2();
+	IMPORT_C void Reserved_CBitmapContext_3();
+	
+	IMPORT_C virtual void Reserved_CFbsBitGc_1();	
+	IMPORT_C virtual void Reserved_CFbsBitGc_2();	
+	IMPORT_C virtual void Reserved_CFbsBitGc_3();	
+	IMPORT_C virtual void Reserved_CFbsBitGc_4();	
+	IMPORT_C virtual void Reserved_CFbsBitGc_5();	
+	
+private:
+	CFbsBitGcBitmap iBrushBitmap;
+	TBool iBrushUsed;
+	TRgb iBrushColor;
+	TPoint iBrushOrigin;
+	TBrushStyle iBrushStyle;
+	TRect iClipRect;
+	TRegionFix<1> iDefaultRegion;
+	const TRegion* iDefaultRegionPtr;
+	TRect iUserClipRect;
+	CFbsDevice* iDevice;
+	TPoint iDitherOrigin;
+	TInt iDotLength;
+	TInt iDotMask;
+	TInt iDotParam;
+	TInt iDotDirection;
+	TDrawMode iDrawMode;
+	TRect iDrawnTo;
+	CFbsBitGcFont iFont;
+	TInt iCharJustExcess;
+	TInt iCharJustNum;
+	TInt iWordJustExcess;
+	TInt iWordJustNum;
+	TPoint iLastPrintPosition;
+	TPoint iLinePosition;
+	TPoint iOrigin;
+	CFbsBitGcExtraData* iFbsBitGcExtraData;
+	TRgb iPenColor;
+	TPenStyle iPenStyle;
+	TSize iPenSize;
+	TInt8 iShadowMode;
+	TInt8 iAutoUpdateJustification;
+	TUint8 iFadeBlackMap;
+	TUint8 iFadeWhiteMap;
+	TFontStrikethrough iStrikethrough;
+	TFontUnderline iUnderline;
+	TDisplayMode iUserDisplayMode;
+	RRegion iClippingRegion;
+#if defined(__ALLOW_FAST_BLEND_DISABLE__)
+	TBool iFastBlendDisabled;
+#endif
+	};
+
+inline void CFbsBitGc::SetFadeMode(TBool aFadeMode /*=EFalse*/)
+	{SetFaded(aFadeMode);}
+inline void CFbsBitGc::SetFadingParameters(TUint8 aBlackMap /*=0*/)
+	{SetFadingParameters(aBlackMap,255);}		//255 is the value of white map when not fading
+
+#endif
+