diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/inc/huicanvaswspainter.h --- /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 +#include +#include +#include +#include +#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 iFullUpdateRegion; + + /** Window shape region */ + RRegionBuf 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 iTempRegion; + mutable RRegionBuf iTempCurrentSubRegion; + mutable RRegionBuf iTempIntersectingRegion; + +#ifdef HUI_DEBUG_TRACK_DRAWING + CAlfCommandDebug* iCommandDebugger; +#endif + }; + +#endif // __HUICANVASWSPAINTER_H__