uiacceltk/hitchcock/AlfRenderStage/inc/alfrsgc.h
changeset 0 15bf7259bb7c
child 3 d8a3531bc6b8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/AlfRenderStage/inc/alfrsgc.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,397 @@
+/*
+* Copyright (c) 2008 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:   AlfRenderStage provides a method for redirect avkon drawing to a graphics accelerator
+*
+*/
+
+#ifndef CALFRSGC_H_
+#define CALFRSGC_H_
+
+#include <graphics/wsgraphicscontext.h>
+#include <s32mem.h>
+#include <e32std.h>
+#include <gdi.h>
+
+class CAlfRsSendBuffer;
+class CFbsBitGc;
+class CFbsScreenDevice;
+
+const TInt KAlfRsGcMaxClippingRects = 20;
+
+/**
+ *  This class serializes commands sent to graphics context by using CAlfRsSendBuffer . 
+ *  
+ *  @lib alfrenderstage.lib
+ *  @since S60 v5.2
+ */
+
+NONSHARABLE_CLASS(CAlfGraphicsContext) : public CBase, public MWsGraphicsContext
+		{
+	public: // New methods
+
+        /**
+         * NewL
+         * 
+         * Constructor
+         *
+         * @param   aAlfSendBuffer Send buffer
+         * @return  New instance of the class
+         */
+		static CAlfGraphicsContext* NewL( CAlfRsSendBuffer& aAlfSendBuffer );
+
+        /**
+         * C++ destructor
+         */
+		~CAlfGraphicsContext();
+
+        /**
+         * ResetDrawCommandCount
+         *
+         * Each call of command which requires drawing increases iDrawCommandCount. This is used for
+         * skipping serialization of draw commands that have no effect on screen. @See  DrawCommandCount.
+         */
+        void ResetDrawCommandCount() 
+            {
+            iDrawCommandCount = 0; 
+            };
+
+        /**
+         * DrawCommandCount
+         *
+         * @return Amount of effective draw commands since last call of ResetDrawCommand.
+         */
+        TInt DrawCommandCount()
+            {
+            return iDrawCommandCount; 
+            };
+    
+#ifdef _OPTIMIZE_WS_COMMANDS_ADVANCED_
+        /**
+         * CheckDelayedClipping
+         * 
+         * Assertains if the previous clipping (EAlfSetClipRegion) command can be delayed or skipped.
+         * 
+         * @param   aClippingRect
+         * @return  previous clipping command status 
+         */
+        TBool CheckDelayedClipping( TRect aClippingRect );
+#endif
+#ifdef _OPTIMIZE_WS_COMMANDS_BASIC_     
+        /**
+         * FlushStateL
+         * 
+         * Flushes all the modified Gc states.
+         * 
+         * @param aRollbackClippingState contains states that should be rollbacked after flush.
+         *        Currently this is relevant only for clipping.
+         * 
+         */
+        void FlushStateL(  TInt& aRollbackClippingState );
+#endif
+        
+	public: // From MWsGraphicsContext
+	    
+        /**
+         * Following commands are serialized
+         */
+
+	    void BitBlt(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap);
+		void BitBlt(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect);
+		void BitBltMasked(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect, const CFbsBitmap& aMaskBitmap, TBool aInvertMask);
+		void BitBltMasked(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect, const CFbsBitmap& aMaskBitmap, const TPoint& aMaskPos);
+		void ResetClippingRegion();
+		void Clear();
+		void Clear(const TRect& aRect);
+		void ResetBrushPattern();
+		void ResetFont();
+		void DrawArc(const TRect& aRect, const TPoint& aStart, const TPoint& aEnd);
+		void DrawPie(const TRect& aRect, const TPoint& aStart, const TPoint& aEnd);
+		void DrawBitmap(const TRect& aDestRect, const CFbsBitmap& aSourceBitmap);
+		void DrawBitmap(const TRect& aDestRect,	const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect);
+		void DrawBitmap(const TPoint &aTopLeft, const CFbsBitmap &aSource);
+		void DrawBitmapMasked(const TRect& aDestRect, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect, const CFbsBitmap& aMaskBitmap, TBool aInvertMask);
+		void DrawRoundRect(const TRect& aRect, const TSize& aEllipse);
+		void DrawPolyLine(const TArray<TPoint>& aPointList);
+		void DrawPolyLine(const CArrayFix<TPoint>* aPointList);
+		void DrawPolyLine(const TPoint *aPointList, TInt aNumPoints);
+		void DrawPolyLineNoEndPoint(const TArray<TPoint>& aPointList);
+		void DrawPolyLineNoEndPoint(const CArrayFix<TPoint>* aPointList);
+		void DrawPolyLineNoEndPoint(const TPoint *aPointList, TInt aNumPoints);
+		void DrawPolygon(const CArrayFix<TPoint>* aPointList, TFillRule aFillRule=EAlternate);
+		void DrawPolygon(const TArray<TPoint>& aPointList, TFillRule aFillRule=EAlternate);
+		void DrawPolygon(const TPoint *aPointList, TInt aNumPoints, TFillRule aFillRule=EAlternate);
+		void DrawEllipse(const TRect& aRect);
+		void DrawLine(const TPoint& aStart, const TPoint& aEnd);
+		void DrawLineTo(const TPoint& aPoint);
+		void DrawLineBy(const TPoint& aVector);
+		void DrawRect(const TRect& aRect);
+
+	    void DrawText(const TDesC& aText,const TTextParameters* aParam);
+	    void DrawText(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition);
+	    void DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipRect);
+        void DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipFillRect,TInt aBaselineOffset,TTextAlign aHrz=ELeft,TInt aMargin=0);
+	    void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,TBool aUp);
+        void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition,TBool aUp);
+        void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipRect,TBool aUp);
+        void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipRect,TInt aBaselineOffset,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
+        void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipRect,TInt aBaselineOffset,TInt aTextWidth,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
+
+
+		void MoveTo(const TPoint& aPoint);
+		void MoveBy(const TPoint& aVector);
+		void Plot(const TPoint& aPoint);
+		void Reset();
+		void SetBrushColor(const TRgb& aColor);
+		void SetBrushOrigin(const TPoint& aOrigin);
+		void SetBrushStyle(TBrushStyle aBrushStyle);
+		void SetClippingRegion(const TRegion& aRegion);
+		void SetDrawMode(TDrawMode aDrawMode);
+		void SetOrigin(const TPoint& aPoint = TPoint(0, 0));
+		void SetPenColor(const TRgb& aColor);
+		void SetPenStyle(TPenStyle aPenStyle);
+		void SetPenSize(const TSize& aSize);
+		void SetTextShadowColor(const TRgb& aColor);
+		void SetCharJustification(TInt aExcessWidth, TInt aNumChars);
+		void SetWordJustification(TInt aExcessWidth, TInt aNumGaps);
+		void SetUnderlineStyle(TFontUnderline aUnderlineStyle);
+		void SetStrikethroughStyle(TFontStrikethrough aStrikethroughStyle);
+		void SetBrushPattern(const CFbsBitmap& aBitmap);
+		void SetBrushPattern(TInt aFbsBitmapHandle);
+		void SetFont(const CFont* aFont);
+		void CopyRect(const TPoint& aOffset, const TRect& aRect);
+
+		void UpdateJustification(const TDesC& aText,const TTextParameters* aParam);
+		void UpdateJustificationVertical(const TDesC& aText,const TTextParameters* aParam,TBool aUp);
+
+		void SetFontNoDuplicate(const CFont* aFont);
+		TBool HasBrushPattern() const;
+		TBool HasFont() const;
+		void InternalizeL(RReadStream& aReadStream);
+		void ExternalizeL(RWriteStream& aWriteStream);
+		TRgb BrushColor() const;
+		TRgb PenColor() const;
+		TRgb TextShadowColor() const;
+		void CopySettings(const MWsGraphicsContext& aGc);
+		void SetFaded(TBool aFaded);
+		void SetFadingParameters(TUint8 aBlackMap, TUint8 aWhiteMap);
+		void FadeArea(const TRegion *aRegion);
+		void MapColors(const TRect &aRect, const TRgb *aColors, TInt aNumPairs=2, TBool aMapForwards=ETrue);
+		void SetUserDisplayMode(TDisplayMode aDisplayMode);
+		TInt UseFont(TInt aFontHandle);
+
+        /**
+         * GetError
+         * 
+         * Return current error status of MWsGraphicsContext
+         *
+         * @return 
+         */
+		TInt GetError()
+		    {
+		    return KErrNone; // @todo
+		    }
+
+		/**
+         * Origin
+         * 
+         * The origin of the GC relative to the screen's origin
+         *
+         * @return Origin
+         */
+		TPoint Origin() const;
+
+        /**
+         * ClippingRegion
+         * 
+         * The clipping region currently being used
+         *
+         * @return Clipping region
+         */
+		const TRegion& ClippingRegion()
+	       {
+	       return iClippingRegion;
+	       }
+		
+		/**
+		 * Push
+		 * 
+		 * Saves the state of the GC to an internal buffer.  Several GC states can be saved in a FILO.
+		 * Do not restore a GC (using Pop()) that wasn't properly saved!
+		 *
+		 * @return KErrNone if successful, else one of the system-wide error codes
+		 */
+		TInt Push()
+		    {
+		    return KErrNotSupported; // @todo
+		    }
+		
+		/**
+		 * Pop
+		 * 
+		 * Restores the last GC state that was saved.
+		 */
+		void Pop()
+		    {
+		    // @todo
+		    }
+
+    private: // New methods
+        
+        /**
+         * C++ constructor
+         *
+         * @param aAlfSendBuffer
+         */
+        CAlfGraphicsContext( CAlfRsSendBuffer& aAlfSendBuffer );
+
+        /**
+         * ConstructL
+         *
+         * Construct
+         */
+        void ConstructL( );
+
+        /**
+         * DoReset
+         * 
+         * Reset all context variables to their default values
+         */
+        void DoReset();
+        
+	private:
+
+        /**
+         * locally cached context variables.
+         */
+	    TPoint iOrigin;
+	
+        /**
+         * clipping regions are in screen coordinates
+         */
+	    RRegionBuf<KAlfRsGcMaxClippingRects> iClippingRegion;
+	    
+	    TRect  iClippingRect;
+	    
+	    TInt iFontHandle;
+	    	    
+	    TRgb iTextShadowColor;
+	    
+	    TBool iBrushPatternSet;
+	    
+	    TInt iBrushPattern;
+	    
+	    TRgb iPenColor;
+	    
+	    TRgb iBrushColor;
+	    
+	    TSize iPenSize;
+	    
+	    TInt iDrawMode;
+	    
+	    TPoint iLinePosition;
+	    
+	    TBool iBrushUsed;
+	    
+	    TPoint iBrushOrigin;
+        
+	    TInt iBrushStyle;
+        
+	    TInt iCharJustExcess;
+        
+	    TInt iCharJustNum;
+        
+	    TInt iWordJustExcess;
+        
+	    TInt iWordJustNum;
+        
+	    TPoint iDitherOrigin;
+        
+	    TInt iDotLength;
+        
+	    TInt iDotMask;
+        
+	    TInt iDotParam;
+        
+	    TInt iDotDirection;
+        
+	    TInt iShadowMode;
+        
+	    TInt iStrikethrough;
+        
+	    TInt iUnderline;
+        
+	    TInt iUserDisplayMode;
+        
+	    TInt iPenStyle;
+        
+	    /**
+	     * Not owned.
+	     */
+		CAlfRsSendBuffer& iSendBuffer;
+
+		/*
+		 * Increased whenever command that requires actual drawing is called.
+		 */
+		TInt  iDrawCommandCount;
+		
+#ifdef _OPTIMIZE_WS_COMMANDS_ADVANCED_
+		
+		RRegionBuf<5> iDelayedClippingRegion;
+		RRegionBuf<5> iDelayedDrawRegion;
+
+		enum TRollbackStates
+		    {
+		    ERollbackClippingState = 1 
+		    //ERollbackFontState = 2
+		    };
+
+		RRegionBuf<20> iPreviousClippingRegion;
+
+#endif
+		
+#ifdef _OPTIMIZE_WS_COMMANDS_BASIC_		
+
+		TInt iRollback;
+
+		enum TDelayedContextState
+            {
+            EModifiedPenStyle = 1,
+            EModifiedBrushStyle = 2,
+            EModifiedPenColor = 4,
+            EModifiedBrushColor = 8,
+            
+            EModifiedClipRect = 16,
+            EModifiedClipReset = 32,
+            
+            EModifiedJustification = 64,
+            EModifiedBrushPattern1 = 128,
+            EModifiedBrushPattern2 = 256,
+            
+            EModifiedSetFontNoDuplicate = 512,
+            EModifiedResetFont = 1024
+            };
+		
+		TInt iPreviousPenStyle;
+		TInt iPreviousBrushStyle;
+		TRgb iPreviousPenColor;
+		TRgb iPreviousBrushColor;
+		TInt iPreviousBrushPattern;
+		TInt iPreviousFontHandle;
+	    
+        TInt32 iDelayedContextState;
+
+#endif
+
+		};
+#endif /*CALFRSGC_H_*/