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