--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/inc/huicanvaswspainter.h Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,384 @@
+/*
+* 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 CHuiCanvasWsPainter.
+*
+*/
+
+
+
+#ifndef __HUICANVASWSPAINTER_H__
+#define __HUICANVASWSPAINTER_H__
+
+#include "huicanvaspainter.h"
+#include "uiacceltk/HuiCanvasCmdBufferReader.h"
+
+#include <e32base.h>
+#include <uiacceltk/HuiOwnedPointer.h>
+#include <uiacceltk/HuiVisual.h>
+#include <uiacceltk/HuiDisplay.h>
+#include <uiacceltk/huilowmemoryobserver.h>
+#include "huicanvaswshwgc.h"
+
+const TInt KHuiCanvasWsPainterRegionGranularity = 10;
+
+class CHuiCanvasWsSwGc;
+class CHuiCanvasWsHwGc;
+class CAlfCommandDebug;
+class CHuiCanvasWsBitGc;
+
+/**
+ * This class is used internally by the toolkit and thus should
+ * not be used by the applications directly.
+ */
+NONSHARABLE_CLASS(CHuiCanvasWsPainter) : public CHuiCanvasPainter, public MHuiMemoryLevelObserver
+ {
+public:
+
+ /**
+ * Constructor.
+ */
+ static CHuiCanvasWsPainter* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CHuiCanvasWsPainter();
+
+public: // From CHuiCanvasPainter
+
+ /**
+ * Sets buffer that contains canvas drawing commands. This
+ * method clears previous buffer(s), so this is eqvivalent
+ * to calling both ClearCommandSet and AddCommandSetL.
+ *
+ * @param aCommands Commanbuffer
+ */
+ virtual void SetCommandSetL( const TDesC8& aCommands );
+
+ /**
+ * Clears buffer(s) that contains canvas drawing commands.
+ */
+ virtual void ClearCommandSet();
+
+ /**
+ * Adds buffer that contains more canvas drawing commands,
+ * those will be executed after the buffers that has been
+ * added previously.
+ * @param aMoreCommands Commanbuffer
+ */
+ virtual void AddCommandSetL( const TDesC8& aMoreCommands );
+
+ /**
+ * Adds partial buffer that contains more canvas drawing commands. These
+ * commands are appended to the commands set previously with this method
+ * until param aLastPart has value ETrue. After that whole command set
+ * will be added among possibly already existing command sets and
+ * it will be drawable.
+ *
+ * @param aMoreCommands Commanbuffer
+ * @param aLastPart EFalse if there are more commands to be added into this
+ * command set before it is wanted to be available for drawing. ETrue if
+ * command set is ready and no more parts are expected.
+ */
+ virtual void AddPartialCommandSetL( const TDesC8& aMoreCommands, TBool aLastPart );
+
+#ifdef HUI_DEBUG_TRACK_DRAWING
+ virtual void SetTrackCommandSet( TFileName& aFileName, TBool aTrack );
+#endif
+
+ /**
+ * Clears internal cached texts and images.
+ */
+ virtual void ClearCache();
+
+ /**
+ * Handles the command buffer(s), either draws or performs a scan.
+ *
+ * @param aDisplayRect Area where painter is supposed to draw
+ * @param aAction Action that painter is supposed to do with the buffer.
+ * @param aUser Canvas visual using this painter
+ * @param aGc Toolkit graphics context
+ */
+ virtual void HandleBufferL(TRect& aDisplayRect, TInt aAction, const CHuiCanvasVisual& aUser, CHuiGc* aGc, TPoint aPos ) ;
+ virtual void HandleBufferL(TRect& aDisplayRect, TInt aAction, const CHuiCanvasVisual& aUser, CHuiGc* aGc, TPoint aPos, TPtrC8 aCommands, CHuiCanvasCommandBuffer *buf);
+
+ /**
+ * Returns the number of rectangular areas which contain something that is
+ * drawn by the painter.
+ *
+ * @return number of painted areas.
+ * @see PaintedArea()
+ */
+ virtual TInt PaintedAreaCount() const;
+
+ /**
+ * Returns information of the painted area at given index.
+ *
+ * @aIndex Index of the painted area.
+ * @return Painted area info.
+ * @see PaintedAreaCount()
+ */
+ virtual THuiCanvasPaintedArea PaintedArea(TInt aIndex);
+
+ /**
+ * Draws content of the window in pixel format to the given bitmap.
+ * This method may not be supported in all commanbuffertype/renderer combinations.
+ *
+ * @param aTargetBuffer where content of the window is to be drawn. NULL if the drawing
+ * is to be stopped.
+ *
+ * @return KErrNotSupported if the current renderer/painter does not support the
+ * feature. Leave happens in other unexpected error situtations.
+ *
+ */
+ virtual TInt SetCapturingBufferL(CFbsBitmap* aTarget);
+
+ /**
+ * Tells painter to enable/disable render buffer (if it is supported by the
+ * painter implementation)
+ *
+ * @return KErrNotSupported if the current renderer/painter does not support the
+ * feature.
+ */
+ virtual TInt EnableRenderBuffer(TBool aEnable = ETrue);
+
+ /**
+ * Returns reference to canvas gc which is used by this painter.
+ */
+ virtual CHuiCanvasGc& CanvasGc() const;
+ CHuiCanvasWsGc *CanvasWsGc() const { return iCanvasWsGc; }
+private:
+
+ /**
+ * From MHuiMemoryLevelObserver
+ */
+ void SetMemoryLevel(THuiMemoryLevel aLevel);
+
+ /**
+ * Constructor.
+ */
+ CHuiCanvasWsPainter();
+
+ /**
+ * Second-phase constructor.
+ */
+ void ConstructL();
+
+private:
+
+ void DoHandleAllBuffersL(TRect& aDisplayRect, TInt aAction, const CHuiCanvasVisual& aUser, CHuiGc* aGc, TPoint& aPos,
+ TBool aIgnoreUnChangedBuffers,
+ TBool aIgnoreClippedBuffers,
+ TBool aIgnoreHandledBuffers,
+ TBool aClearBeforeHandlingBuffers);
+ void DoHandleBufferL(TInt aIndex, TRect& aDisplayRect, TInt aAction, const CHuiCanvasVisual& aUser, CHuiGc* aGc, TPoint& aPos);
+ void DoHandleBufferStringL(TInt aIndex, TRect& aDisplayRect, TInt aAction, const CHuiCanvasVisual& aUser, CHuiGc* aGc, TPoint& aPos, TPtr8 aCommandBuffer, CHuiCanvasCommandBuffer *aBuffer);
+
+ void DoPeekBufferL(TInt aIndex);
+ void DoDigestPaddingL();
+
+ TBool RemoveRedundantBuffers();
+ void RemoveBuffersWithOldDisplayRect();
+ void RemoveBuffersWithEmptyUpdateRegion();
+ void RemoveBuffersWithOverlappingUpdateRegion();
+ void RemoveBuffersWithoutRealDrawing();
+ void DestroyBuffer(TInt aIndex);
+ void UpdateBufferUpdateRegions(TPoint aPos);
+
+public:
+ void EnableRenderBufferIfNeeded(TBool aEnable);
+private:
+
+ void SelectGcL();
+ CHuiGc::TOrientation CalculateRelativeOrientation();
+ TRect DirtyRect()const;
+ TBool IsBufferCompletelyOutisideClippingRegion(const CHuiCanvasCommandBuffer& aCommandbuffer) const;
+ void RenewAllBuffers();
+
+ void WsSetUpdateRegionL(TInt aIndex);
+ void WsBitBltL() ;
+ void WsBitBltRectL() ;
+ void WsBitBltMaskedL() ;
+ void WsCombinedBitBlitMaskedL();
+ void WsBitBltMaskedPointL() ;
+ void WsResetClippingRegionL() ;
+ void WsClearL() ;
+ void WsClearRectL() ;
+ void WsResetBrushPatternL() ;
+ void WsResetFontL() ;
+ void WsDrawArcL() ;
+ void WsDrawPieL() ;
+ void WsDrawBitmap1L() ;
+ void WsDrawBitmap2L() ;
+ void WsDrawBitmap3L() ;
+ void WsDrawBitmapMaskedL() ;
+ void WsDrawRoundRectL() ;
+ void WsDrawPolyLineL();
+ void WsDrawPolyLineNoEndPointL() ;
+ void WsDrawPolygonL() ;
+ void WsDrawEllipseL() ;
+ void WsDrawLineL() ;
+ void WsDrawLineToL() ;
+ void WsDrawLineByL() ;
+ void WsDrawRectL() ;
+ void WsDrawText1L() ;
+ void WsDrawText2L() ;
+ void WsDrawText3L() ;
+ void WsDrawText4L() ;
+ void WsDrawText5L() ;
+ void WsDrawTextVertical1L() ;
+ void WsDrawTextVertical2L() ;
+ void WsDrawTextVertical3L() ;
+ void WsDrawTextVertical4L() ;
+ void WsDrawTextVertical5L() ;
+ void WsMoveToL() ;
+ void WsMoveByL() ;
+ void WsPlotL() ;
+ void WsResetL() ;
+ void WsSetBrushColorL() ;
+ void WsSetBrushOriginL() ;
+ void WsSetBrushStyleL() ;
+ void WsSetClippingRegionL() ;
+ void WsSetDrawModeL() ;
+ void WsSetOriginL() ;
+ void WsSetPenColorL() ;
+ void WsSetPenStyleL() ;
+ void WsSetPenSizeL() ;
+ void WsSetTextShadowColorL() ;
+ void WsSetCharJustificationL() ;
+ void WsSetWordJustificationL() ;
+ void WsSetUnderlineStyleL() ;
+ void WsSetStrikethroughStyleL() ;
+ void WsSetBrushPatternL() ;
+ void WsSetFontL() ;
+ void WsContentTagL();
+ void WsCopyRectL() ;
+ void WsUpdateJustificationL() ;
+ void WsUpdateJustificationVerticalL() ;
+ void WsSetFontNoDuplicateL() ;
+ void WsCopySettingsL() ;
+ void WsSetClippingRectL() ;
+ void WsCancelClippingRectL() ;
+ void WsSetFadedL() ;
+ void WsSetFadingParametersL() ;
+ void WsFadeAreaL() ;
+ void WsMapColorsL() ;
+ void WsSetUserDisplayModeL() ;
+ void WsUseFontL() ;
+ void WsSetShapeRegionL( TInt aIndex );
+
+private:
+
+ /** Region which this painter updates with current command buffers */
+ RRegionBuf<KHuiCanvasWsPainterRegionGranularity> iFullUpdateRegion;
+
+ /** Window shape region */
+ RRegionBuf<KHuiCanvasCommandBufferRegionGranularity> iShapeRegion;
+
+ /** Command buffer reader instance */
+ CHuiCanvasCmdBufferReader* iWsCommandBufferReader;
+
+ /** Pointer to active canvaswsgc instance */
+ CHuiCanvasWsGc *iCanvasWsGc;
+
+ /** Fully bitgdi based version of canvaswsgc */
+ CHuiCanvasWsBitGc *iCanvasWsBitGc;
+
+ /** Partially SW/HW based version of canvaswsgc */
+ CHuiCanvasWsSwGc *iCanvasWsSwGc;
+
+ /** Fully HW accelerated canvaswsgc */
+ CHuiCanvasWsHwGc *iCanvasWsHwGc;
+
+ /** Flag to tell whether cache has been cleared */
+ TBool iCacheCleared;
+
+ /** Use of render buffer has been disabled/enabled automatically */
+ TBool iAutomaticRenderBufferUsage;
+
+ /** Flags to tell whether the window shape region has been changed */
+ TBool iShapeRegionClearingPending;
+ TBool iShapeRegionClippingPending;
+
+ #ifdef __ALF_SYMBIAN_RWINDOW_CLEARING_BUG_WORKAROUND__
+ TRgb iTestBrushColor;
+ TRect iTestFullDisplayRect;
+ #endif
+
+ // Stream read optimizations
+ struct TStructBitBlitRect
+ {
+ TPoint iPoint;
+ TInt iBitmapHandle;
+ TRect iRect;
+ };
+
+ struct TStructBitBlitMasked
+ {
+ TPoint iPoint;
+ TInt iBitmapHandle;
+ TRect iRect;
+ TInt iMaskHandle;
+ TInt iInvertMask;
+ };
+
+ struct TStructDrawBitmapMasked
+ {
+ TRect iRect1;
+ TInt iBitmapHandle;
+ TRect iRect2;
+ TInt iMaskHandle;
+ TInt iInvertMask;
+ };
+
+ struct TStructDrawTextGeneral
+ {
+ TRect iRect;
+ TInt iValue1;
+ TInt iValue2;
+ TInt iValue3;
+ TInt iValue4;
+
+ };
+
+ class TBlitStruct
+ {
+ public:
+ TBlitStruct( TInt aHandle, TInt aMaskHandle, TPoint aTl ) : iHandle( aHandle ), iMaskHandle( aMaskHandle ), iTl( aTl ){};
+ TInt iHandle;
+ TInt iMaskHandle;
+ TPoint iTl;
+ };
+
+ TStructBitBlitMasked iStructBitBlitMasked;
+
+ TStructBitBlitRect iStructBitBlitRect;
+
+ TStructDrawBitmapMasked iStructDrawBitmapMasked;
+
+ TStructDrawTextGeneral iStructDrawTextGeneral;
+
+ THuiCanvasTextParameters iTextParametersGeneral;
+
+ /** Private temp region for general purpose, used to avoid excessive allocations of RRegion heap objects */
+ mutable RRegionBuf<KHuiCanvasWsPainterRegionGranularity> iTempRegion;
+ mutable RRegionBuf<KHuiCanvasWsPainterRegionGranularity> iTempCurrentSubRegion;
+ mutable RRegionBuf<KHuiCanvasWsPainterRegionGranularity> iTempIntersectingRegion;
+
+#ifdef HUI_DEBUG_TRACK_DRAWING
+ CAlfCommandDebug* iCommandDebugger;
+#endif
+ };
+
+#endif // __HUICANVASWSPAINTER_H__