diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/bitstd.h --- a/epoc32/include/bitstd.h Tue Nov 24 13:55:44 2009 +0000 +++ b/epoc32/include/bitstd.h Tue Mar 16 16:12:26 2010 +0000 @@ -1,1 +1,576 @@ -bitstd.h +// 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 the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __BITSTD_H__ +#define __BITSTD_H__ + +#include +#include +#include +#include + +// 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* 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* 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 TOpenFontCharMetrics; +class CGraphicsAccelerator; +class CWsBitmap; +class MFastBlend; + +/** +Class used to extend the CFbsBitGc class to avoid BC break. Any data member which needs +to be added in CFbsBitGc should be added to this class. +@internalAll +@released +*/ +class CFbsBitGcExtraData:public CBase + { +public: + CFbsBitGcExtraData(); + ~CFbsBitGcExtraData(); + void Reset(); + inline TInt* PenArray(){return iPenArray;}; + inline TRgb ShadowColor(){return iShadowColor;} + inline void SetPenArray(TInt* aPenArray); + inline void SetShadowColor(const TRgb& aShadowColor); + inline void ResetPenArray(); +private: + TInt* iPenArray; + TRgb iShadowColor; + }; + +inline void CFbsBitGcExtraData::SetPenArray(TInt* aPenArray) + { + delete[] iPenArray; + iPenArray = aPenArray; + } + +inline void CFbsBitGcExtraData::SetShadowColor(const TRgb& aShadowColor) + { + iShadowColor = aShadowColor; + } + +inline void CFbsBitGcExtraData::ResetPenArray() + { + delete[] iPenArray; + iPenArray = NULL; + } + +/** +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* aPointList); + IMPORT_C void DrawPolyLineNoEndPoint(const CArrayFix* 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* 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); +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 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& aDitherOrigin,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); + void DoDrawCharacter(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData); + void DoDrawTextEx(CFont::TPositionParam& aParam,const CBitmapFont* font); + 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); + void DoDrawTextLarge(CFont::TPositionParam& aParam,const CBitmapFont* font); + 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); + 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); + 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* aPointList,TFillRule aFillRule); + void PolyFillLarge(const CArrayFix* 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* 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); +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