diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/inc/huicanvasgc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/inc/huicanvasgc.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,257 @@ +/* +* Copyright (c) 2006-2007 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: Definition of CHuiCanvasGc +* +*/ + + + +#ifndef __HUICANVASGC_H__ +#define __HUICANVASGC_H__ + + +#include +#include +#include +#include +#include + +const TInt KHuiCanvasGcRegionGranularity = 10; + +struct THuiRealLine + { + THuiRealLine(){} + THuiRealLine(const THuiRealPoint& aStart, const THuiRealPoint& aEnd):iStart(aStart),iEnd(aEnd){} + + THuiRealPoint iStart; + THuiRealPoint iEnd; + + private: + TInt iSpare1; + TInt iSpare2; + }; + +enum THuiCanvasClipMode + { + /** Clipping is disabled */ + EHuiCanvasClipModeNone, + + /** Normal clipping, clipping is set immediately when clip methods are called */ + EHuiCanvasClipModeNormal, + + /** Delayed clipping, clipping is actually set just before every CHuiCanvasGc draw operation and only if really needed */ + EHuiCanvasClipModeDelayed + }; + +enum THuiCanvasDrawMode + { + /** Drawing is done by blending */ + EHuiCanvasDrawModeBlend, + + /** Drawing is done by writing alpha values directly without blending */ + EHuiCanvasDrawModeNormal + }; + +/* Forward declarations. */ +class CHuiCanvasRenderBuffer; +class CHuiCanvasVisual; +class MHuiTexture; +class CHuiTexture; + +class CHuiCanvasGc : public CBase + { +public: + enum TClipRectVisibility + { + EFullyOutside, + EFullyInside, + EPartialOverlap, + EUnknown + }; + + /** + * Constructor. + */ + IMPORT_C CHuiCanvasGc(); + + /** + * Destructor. + */ + IMPORT_C ~CHuiCanvasGc(); + + /** General */ + IMPORT_C virtual void SetGc( CHuiGc& aGc ); + IMPORT_C virtual void SetVisual(const CHuiCanvasVisual& aVisual); + + /** Clipping ops */ + IMPORT_C void SetClippingMode(THuiCanvasClipMode aClipMode); + IMPORT_C void Clip(const TRect& aClipRect); + IMPORT_C void ClipRegion(const TRegion& aClipRegion); + IMPORT_C void CancelClipping(); + + /** Drawing ops. Although these are virtual, render specific code is typically at DoDrawXXX method overrides */ + IMPORT_C virtual void DrawImage(const CHuiTexture& aImage, const THuiRealRect& aDestinationRect); + IMPORT_C virtual void DrawImage(const CHuiTexture& aImage, const THuiRealRect& aDestinationRect, const THuiRealRect& aSourceRect); + IMPORT_C virtual void DrawImage(const CHuiTexture& aImage, const THuiRealRect& aDestinationRect, const THuiRealRect& aSourceRect, CHuiGc::TStretchMode aStretchMode); + IMPORT_C virtual void DrawImage(const CHuiCanvasRenderBuffer& aImage, const THuiRealPoint& aDestinationPoint); + IMPORT_C virtual void DrawText(const CHuiTextMesh& aTextMesh, const THuiRealRect& aDestinationRect); + IMPORT_C virtual void DrawLines(RArray& aLines); + IMPORT_C virtual void DrawEllipse(const THuiRealRect& aDestinationRect); + IMPORT_C virtual void DrawPoints(RArray& aPoints); + IMPORT_C virtual void DrawPolygon(RArray& aPoints); + IMPORT_C virtual void DrawRects(RArray& aRects); + IMPORT_C virtual void DrawPie(const THuiRealRect& aDestinationRect, const THuiRealPoint& aStart, const THuiRealPoint& aEnd); + IMPORT_C virtual void DrawArc(const THuiRealRect& aDestinationRect, const THuiRealPoint& aStart, const THuiRealPoint& aEnd); + IMPORT_C virtual void DrawRoundRect(const THuiRealRect& aDestinationRect, const THuiRealSize& aSize); + + /** Setters */ + IMPORT_C virtual void SetTextStyle(TInt aStyleId); + IMPORT_C virtual void SetPenColor(const TRgb& aColor); + IMPORT_C virtual void SetPenWidth(const TReal32& aWidth); + IMPORT_C virtual void SetOpacity(const TReal32& aOpacity); + IMPORT_C virtual void SetPolygonDrawMode(THuiFillMode aPolygonDrawMode); + IMPORT_C virtual void SetPolygonFillTexture(CHuiTexture* aTexture); + IMPORT_C virtual void SetPolygonFillTextureOrigin(const TPoint& aOrigin); + IMPORT_C virtual void SetTextAlign(THuiAlignHorizontal aAlignHorizontal, THuiAlignVertical aAlignVertical); + IMPORT_C virtual void SetDefaults(); + IMPORT_C virtual void SetDrawMode(THuiCanvasDrawMode aDrawMode); + + /** Transformations */ + IMPORT_C virtual void LoadIdentity(); + IMPORT_C virtual void Translate(const TReal32& aX, const TReal32& aY, const TReal32& aZ); + IMPORT_C virtual void Scale(const TReal32& aX, const TReal32& aY, const TReal32& aZ); + IMPORT_C virtual void Rotate(const TReal32& aAngle, const TReal32& aX, const TReal32& aY, const TReal32& aZ); + IMPORT_C virtual void PushTransformationMatrix(); + IMPORT_C virtual void PopTransformationMatrix(); + + /** Getters */ + IMPORT_C virtual TInt TextStyle() const; + IMPORT_C virtual TInt TextVerticalAlign() const; + IMPORT_C virtual TInt TextHorizontalAlign() const; + IMPORT_C virtual TReal32 PenWidth() const; + IMPORT_C virtual THuiFillMode PolygonDrawMode() const; + IMPORT_C virtual CHuiTexture* PolygonFillTexture() const; + IMPORT_C virtual TPoint PolygonFillTextureOrigin() const; + + /** Background drawing */ + IMPORT_C virtual void Clear(const THuiRealRect& aRect); + IMPORT_C virtual void ClearWithSkinBackground(const THuiRealRect& aRect); + IMPORT_C virtual void ClearWithBackgroundItems(const THuiRealRect& aRect, const RArray& aItems); + + /** Render buffer handling */ + IMPORT_C virtual CHuiCanvasRenderBuffer* CreateRenderBufferL(const TSize& aSize); + IMPORT_C virtual void ClearRenderBuffer( CHuiCanvasRenderBuffer& aImage, const TRect & aRect ); + + /** Misc */ + IMPORT_C void EnableBlendingIfNeeded(const CHuiTexture* aTexture = NULL); + + /** Misc getters */ + CHuiCanvasVisual* Visual() const; + TRgb PenColor() const; + TReal32 Opacity() const; + CHuiGc* Gc() const; + THuiCanvasDrawMode DrawMode() const; + + /** Clipping helpers */ + TClipRectVisibility IsClipped(const TRegion& aTestedRegion, const TRegion& aClippingRegion) const; + + /** Restores gc state (partially) */ + void RestoreState() const; + + /** Restores gc state (uses gc state dirty flags (if renderer supports) to avoid unnecessary restore ops */ + IMPORT_C virtual void RestoreFlaggedState() const; + + /** + * Enables (or disables) effective opacity, which means that visuals effective opacity is + * used to calculate real pen opacity. By default effective opacity is enabled. + * */ + void EnableEffectiveOpacity(TBool aEnable); + +protected: + + /** Misc clipping related methods */ + IMPORT_C virtual TInt MaxNumberOfClipRects() const; + IMPORT_C TClipRectVisibility EnableDelayedClippingIfNeeded(const THuiRealRect& aUpdatedRect); + IMPORT_C TClipRectVisibility EnableDelayedClippingIfNeeded(const RArray& aUpdatedPoints); + IMPORT_C TClipRectVisibility EnableDelayedClippingIfNeeded(const RArray& aUpdatedLines); + IMPORT_C TClipRectVisibility EnableDelayedClippingIfNeeded(const RArray& aUpdatedRects); + IMPORT_C void DisableDelayedClippingIfNeeded(); + IMPORT_C TBool ClipNext(); + + /** Drawing ops steup/cleanup helpers */ + IMPORT_C void Setup(); + IMPORT_C void Cleanup(); + + /** Clipping helpers */ + TClipRectVisibility IsClipped(const TRect& aRect) const; + TClipRectVisibility IsClipped(const TPoint& aPoint) const; + + TClipRectVisibility IsClipped(const TRect& aRect, const TRegion& aClippingRegion) const; + TClipRectVisibility IsClipped(const TPoint& aPoint, const TRegion& aClippingRegion) const; + + /** Drawing ops implementations, render specific code typically overrides these */ + IMPORT_C virtual void DoDrawRects(RArray& aRects); + IMPORT_C virtual void DoDrawLines(RArray& aLines); + IMPORT_C virtual void DoDrawArc(const THuiRealRect& aDestinationRect, const THuiRealPoint& aStart, const THuiRealPoint& aEnd); + IMPORT_C virtual void DoDrawRoundRect(const THuiRealRect& aDestinationRect, const THuiRealSize& aSize); + IMPORT_C virtual void DoDrawPolygon(RArray& aPoints); + IMPORT_C virtual void DoDrawPoints(RArray& aPoints); + IMPORT_C virtual void DoDrawPie(const THuiRealRect& aDestinationRect, const THuiRealPoint& aStart, const THuiRealPoint& aEnd); + IMPORT_C virtual void DoDrawRenderBuffer(const CHuiCanvasRenderBuffer& aImage, const THuiRealPoint& aDestinationPoint); + IMPORT_C virtual void DoClearRenderBuffer( CHuiCanvasRenderBuffer& aImage, const TRect & aRect ); + +protected: + + /** General attributes */ + CHuiGc* iGc; + CHuiCanvasVisual* iVisual; + + /** Drawing attributes */ + TRgb iPenColor; + TReal32 iPenWidth; + TReal32 iOpacity; + THuiFillMode iPolygonDrawMode; + THuiAlignVertical iVerticalTextAlign; + THuiAlignHorizontal iHorizontalTextAlign; + TInt iTextStyleId; + THuiCanvasDrawMode iDrawMode; + + /** Clipping attributes */ + RRegionBuf iClippingRegion; + THuiCanvasClipMode iClipMode; + + /** Delayed clipping attributes */ + RRegionBuf iDelayedClipRegion; + TInt iDelayedClipCount; + TBool iDelayedClipRectPushed; + TClipRectVisibility iDelayedClipVisibility; + + /** Setup/cleanup attributes */ + TRgb iOldPencolor; + TInt iOldPenAlpha; + + /** Temp region */ + mutable RRegionBuf iTempRegion; + mutable RRegionBuf iTempRegion2; + + /** Flag to decide wheter pen alpha is to be multiplied with visual effective opacity */ + TBool iEffectiveOpacityEnabled; + + /** Polygon fill texture, NOT owned */ + CHuiTexture* iPolygonFillTexture; + TPoint iPolygonFillTextureOrigin; + }; + +#endif +