uiacceltk/hitchcock/coretoolkit/inc/huicanvasgc.h
changeset 0 15bf7259bb7c
--- /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 <e32base.h>
+#include <uiacceltk/HuiVisual.h>
+#include <uiacceltk/HuiGc.h>
+#include <uiacceltk/HuiDisplay.h>
+#include <uiacceltk/HuiTexture.h>
+
+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<THuiRealLine>& aLines);    
+    IMPORT_C virtual void DrawEllipse(const THuiRealRect& aDestinationRect);
+	IMPORT_C virtual void DrawPoints(RArray<THuiRealPoint>& aPoints);
+	IMPORT_C virtual void DrawPolygon(RArray<THuiRealPoint>& aPoints);
+	IMPORT_C virtual void DrawRects(RArray<THuiRealRect>& 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<THuiDisplayBackgroundItem>& 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<THuiRealPoint>& aUpdatedPoints);
+    IMPORT_C TClipRectVisibility EnableDelayedClippingIfNeeded(const RArray<THuiRealLine>& aUpdatedLines);
+    IMPORT_C TClipRectVisibility EnableDelayedClippingIfNeeded(const RArray<THuiRealRect>& 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<THuiRealRect>& aRects);
+    IMPORT_C virtual void DoDrawLines(RArray<THuiRealLine>& 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<THuiRealPoint>& aPoints);        
+	IMPORT_C virtual void DoDrawPoints(RArray<THuiRealPoint>& 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<KHuiCanvasGcRegionGranularity> iClippingRegion;
+    THuiCanvasClipMode iClipMode;
+
+    /** Delayed clipping attributes */    
+    RRegionBuf<KHuiCanvasGcRegionGranularity> iDelayedClipRegion;
+    TInt  iDelayedClipCount;
+    TBool iDelayedClipRectPushed;
+    TClipRectVisibility iDelayedClipVisibility;
+    
+    /** Setup/cleanup attributes */    
+    TRgb iOldPencolor;
+    TInt iOldPenAlpha;    
+
+    /** Temp region */    
+    mutable RRegionBuf<KHuiCanvasGcRegionGranularity> iTempRegion;
+    mutable RRegionBuf<KHuiCanvasGcRegionGranularity> 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        
+