diff -r 000000000000 -r 5d03bc08d59c graphicsdeviceinterface/directgdi/inc/directgdicontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicsdeviceinterface/directgdi/inc/directgdicontext.h Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,211 @@ +// Copyright (c) 2007-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: +// Declaration of a Graphics Device Interface (GDI) Context, which hooks +// directly into a platform specific adaptation (typically hardware accelerated). +// +// + +#ifndef DIRECTGDICONTEXT_H +#define DIRECTGDICONTEXT_H + +/** +@file +@publishedPartner +@prototype +*/ + +#include +#include +#include +#include + +// Forward declarations. +// +class CFbsBitmap; +class RDirectGdiImageTarget; +class MDirectGdiEngine; +class CDirectGdiDriver; +class RDirectGdiDrawableSource; + + +/** +This class typically delegates to a platform specific rendering engine +which uses a generic interface and provides a platform specific mechanism. +The rendering engine may or may not take advantage of hardware acceleration, +depending on its implementation. + +@publishedPartner +@prototype +@deprecated + +@see CBitmapContext +*/ +NONSHARABLE_CLASS(CDirectGdiContext): public CBase + { +public: + IMPORT_C static CDirectGdiContext* NewL(CDirectGdiDriver& aDriver); + IMPORT_C virtual ~CDirectGdiContext(); + IMPORT_C TInt Activate(RDirectGdiImageTarget& aTarget); + IMPORT_C void NoJustifyAutoUpdate(); + IMPORT_C void SetJustifyAutoUpdate(); + // The following are equivalent to CFbsBitGc functionality which maps + // to client’s CWindowGc requests + IMPORT_C void BitBlt(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap); + IMPORT_C void BitBlt(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect); + IMPORT_C void BitBltMasked(const TPoint& aDestPos, + const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect, + const CFbsBitmap& aMaskBitmap, TBool aInvertMask); + IMPORT_C void BitBltMasked(const TPoint& aDestPos, + const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect, + const CFbsBitmap& aMaskBitmap, const TPoint& aMaskPos); + IMPORT_C void ResetClippingRegion(); + IMPORT_C void Clear(); + IMPORT_C void Clear(const TRect& aRect); + IMPORT_C void ResetBrushPattern(); + IMPORT_C void ResetFont(); + 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 TRect& aDestRect, const CFbsBitmap& aSourceBitmap); + IMPORT_C void DrawBitmap(const TRect& aDestRect, + const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect); + IMPORT_C void DrawBitmapMasked(const TRect& aDestRect, + const CFbsBitmap& aSourceBitmap,const TRect& aSourceRect, + const CFbsBitmap& aMaskBitmap, TBool aInvertMask); + IMPORT_C void DrawRoundRect(const TRect& aRect, const TSize& aCornerSize); + IMPORT_C void DrawPolyLine(const TArray& aPointList); + IMPORT_C void DrawPolyLineNoEndPoint(const TArray& aPointList); + IMPORT_C void DrawPolygon(const TArray& aPointList, DirectGdi::TFillRule aFillRule=DirectGdi::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, const DirectGdi::TTextParameters* aParam); + IMPORT_C void DrawText(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TPoint& aPosition); + IMPORT_C void DrawText(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aClipRect); + IMPORT_C void DrawText(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aClipFillRect, TInt aBaselineOffset, + DirectGdi::TTextAlign aAlignment = DirectGdi::ELeft, TInt aMargin = 0); + IMPORT_C void DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, TBool aUp); + IMPORT_C void DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TPoint& aPosition, TBool aUp); + IMPORT_C void DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aClipRect, TBool aUp); + IMPORT_C void DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aClipRect, TInt aBaselineOffset, + TBool aUp, DirectGdi::TTextAlign aVerticalAlignment = DirectGdi::ELeft, TInt aMargin = 0); + IMPORT_C void DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aClipRect, TInt aBaselineOffset, + TInt aTextWidth, TBool aUp, DirectGdi::TTextAlign aVerticalAlignment = DirectGdi::ELeft, TInt aMargin = 0); + IMPORT_C void MoveTo(const TPoint& aPoint); + IMPORT_C void MoveBy(const TPoint& aVector); + IMPORT_C void Plot(const TPoint& aPoint); + IMPORT_C void Reset(); + IMPORT_C void SetBrushColor(const TRgb& aColor); + IMPORT_C void SetBrushOrigin(const TPoint& aOrigin); + IMPORT_C void SetBrushStyle(DirectGdi::TBrushStyle aBrushStyle); + IMPORT_C void SetClippingRegion(const TRegion& aRegion); + IMPORT_C void SetDrawMode(DirectGdi::TDrawMode aDrawMode); + IMPORT_C void SetOrigin(const TPoint& aPoint = TPoint(0, 0)); + IMPORT_C void SetPenColor(const TRgb& aColor); + IMPORT_C void SetPenStyle(DirectGdi::TPenStyle aPenStyle); + IMPORT_C void SetPenSize(const TSize& aSize); + IMPORT_C void SetTextShadowColor(const TRgb& aColor); + IMPORT_C void SetCharJustification(TInt aExcessWidth, TInt aNumChars); + IMPORT_C void SetWordJustification(TInt aExcessWidth, TInt aNumGaps); + IMPORT_C void SetUnderlineStyle(DirectGdi::TFontUnderline aUnderlineStyle); + IMPORT_C void SetStrikethroughStyle(DirectGdi::TFontStrikethrough aStrikethroughStyle); + IMPORT_C void SetBrushPattern(const CFbsBitmap& aBitmap); + IMPORT_C void SetBrushPattern(TInt aFbsBitmapHandle); + IMPORT_C void SetFont(const CFont* aFont); + + // CFbsBitGc functionality used by Wserv for its internal operations. Compatibility of these functions is not guaranteed in future releases. + IMPORT_C void CopyRect(const TPoint& aOffset, const TRect& aRect); /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C void CopySettings(const CDirectGdiContext& aGc); /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C void UpdateJustification(const TDesC& aText, const DirectGdi::TTextParameters* aParam); /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C void UpdateJustificationVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, TBool aUp); /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C void SetFontNoDuplicate(const CDirectGdiFont* aFont); /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C TBool HasBrushPattern() const; /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C TBool HasFont() const; /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C void ExternalizeL(RWriteStream& aWriteStream); /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C void InternalizeL(RReadStream& aReadStream); /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C TRgb BrushColor() const; /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C TRgb PenColor() const; /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + IMPORT_C TRgb TextShadowColor() const; /**< WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.*/ + + // New functionality for image based resource + IMPORT_C void DrawResource(const TPoint& aPos, + const RDirectGdiDrawableSource& aSource, + DirectGdi::TGraphicsRotation aRotation=DirectGdi::EGraphicsRotationNone); + IMPORT_C void DrawResource(const TRect& aDestRect, + const RDirectGdiDrawableSource& aSource, + DirectGdi::TGraphicsRotation aRotation=DirectGdi::EGraphicsRotationNone); + IMPORT_C void DrawResource(const TRect& aDestRect, + const RDirectGdiDrawableSource& aSource, const TRect& aSrcRect, + DirectGdi::TGraphicsRotation aRotation=DirectGdi::EGraphicsRotationNone); + // New functionality for non-image based resource + IMPORT_C void DrawResource(const TRect& aDestRect, + const RDirectGdiDrawableSource& aSource, const TDesC8& aParam); + IMPORT_C TInt GetInterface(TUid aInterfaceId, TAny*& aInterface); + +private: + CDirectGdiContext(CDirectGdiDriver& aDirectGdiDriver); + void ConstructL(); + void CleanUpBrushPattern(); + void DrawText(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TPoint& aPosition, DirectGdi::TTextAlign aAlignment, + CFont::TTextDirection aDirection, const TRect* aClipRect = NULL, const TRect* aFillRect = NULL); + void DoDrawText(CFont::TPositionParam& aParam, const TInt aEnd, const TRect& aClipRect); + void DoDrawTextEx(CFont::TPositionParam& aParam, const TInt aEnd, const TRect& aClipRect, const TInt aUnderlineStrikethroughOffset); + void CalculateClipRect2PlusBaselineOffsetAndMargin(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TPoint& aPosition, TBool aUp, + TRect& aClipRect2, TInt& aBaselineOffset, TInt& aMargin); + void DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect* aClipRect1, const TRect* aClipRect2, const TRect* aFillRect, + TInt aBaselineOffset, TInt aTextWidth, TBool aUp, DirectGdi::TTextAlign aVert, TInt aMargin); + void DoDrawTextVertical(CFont::TPositionParam& aParam, TBool aUp, const TInt aEnd, TRect& aClipRect); + void DoBitBltMasked(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect, + const CFbsBitmap& aMaskBitmap, TBool aInvertMask, const TPoint& aMaskPos); + TBool ValidateBitmap (const CFbsBitmap& aBitmap); + TBool ValidateSourceAndMaskBitmaps (const CFbsBitmap& aSourceBitmap, const CFbsBitmap& aMaskBitmap); + TRect IntersectBitmapWithRect(const CFbsBitmap& aBitmap, const TRect& aRect) const; + void Rotate(TPoint& aPoint, const TPoint& aOrigin, TBool aUp); + void GetUnderlineMetrics(TInt& aTop, TInt& aBottom); + void GetStrikethroughMetrics(TInt& aTop, TInt& aBottom); + void FillRect(const TRect& aRect, const TRgb& aColor, const TRect& aClipRect); + TInt BaselineCorrection(); +private: + /** Engine that will perform the action for most operations. + The implementation may take advantage of hardware acceleration. + */ + MDirectGdiEngine* iEngine; + + CDirectGdiDriver& iDriver; /**< For constructing and obtaining a reference to a rendering engine instance. */ + TBool iActivated; /**< Flag for whether context has been successfully activated. */ + RRegion iClippingRegion; /**< Local copy of clipping region.*/ + TPoint iOrigin; /**< The origin of the drawing engine coordinate system. */ + CDirectGdiFont iFont; /**< The current font. */ + TInt iCharJustExcess; /**< Amount of space to be used for letterspacing. */ + TInt iCharJustNum; /**< Number of glyph groups to be letterspaced. */ + TInt iWordJustExcess; /**< Amount of space to be used for wordspacing. */ + TInt iWordJustNum; /**< Number of spaces to be used for wordspacing. */ + TPoint iLastPrintPosition; /**< Current text position. */ + DirectGdi::TFontStrikethrough iStrikethrough; /**< Font stike-through flags. */ + DirectGdi::TFontUnderline iUnderline; /**< Font underline flags. */ + TRgb iPenColor; /**< The current pen colour. The default pen colour is black. */ + TSize iPenSize; /**< The current pen size. */ + DirectGdi::TPenStyle iPenStyle; /**< The current pen style. */ + DirectGdi::TDrawMode iDrawMode; /**< The current drawing mode. */ + TRgb iTextShadowColor; /**< Colour for text shadows. */ + TRgb iBrushColor; /**< The current brush colour, the default brush colour is white. */ + DirectGdi::TBrushStyle iBrushStyle; /**< The current brush style. */ + CFbsBitmap iBrushPattern; /**< The currently selected brush pattern. */ + TBool iBrushPatternUsed; + TPoint iBrushOrigin; /**< The current brush origin. */ + TBool iAutoUpdateJustification; + }; + +#endif