diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/inc/huicanvaswshwgc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/inc/huicanvaswshwgc.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,290 @@ +/* +* 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 CHuiCanvasWsHwGc. +* +*/ + + + +#ifndef __HUICANVASWSHWGC_H__ +#define __HUICANVASWSHWGC_H__ + +#include +#include "uiacceltk/HuiTextMesh.h" +#include "huicanvaswsgc.h" +#include "huicanvaspainter.h" +#include "huicanvasrenderbuffer.h" + +const TInt KHuiCanvasWsHwGcRegionGranularity = 10; + +/** + * This class is used internally by the toolkit and thus should + * not be used by the applications directly. + */ +NONSHARABLE_CLASS(CHuiCanvasWsHwGc) : public CHuiCanvasWsGc +{ + +public: + + /** + * Constructor. + */ + static CHuiCanvasWsHwGc* NewL(); + + /** + * Destructor. + */ + ~CHuiCanvasWsHwGc(); + +public: + + // CFbsBitGc functionality + virtual void WsBitBltL(TInt aBitmapHandle, TPoint aPoint); + virtual void WsBitBltRectL(TInt aBitmapHandle, TPoint aPoint, TRect aRect) ; + virtual void WsBitBltMaskedL(TInt aBitmapHandle, TInt aMaskHandle, TInt aInvertMask, TPoint aPoint, TRect aRect) ; + virtual void WsBitBltMaskedPointL(TInt aBitmapHandle, TInt aMaskHandle, TPoint aPoint1, TPoint aPoint2, TRect aRect) ; + virtual void WsResetClippingRegionL() ; + virtual void WsClearL(); + virtual void WsClearRectL(TRect& aRect) ; + virtual void WsResetBrushPatternL() ; + virtual void WsResetFontL() ; + virtual void WsDrawArcL(TPoint aPoint1, TPoint aPoint2, TRect aRect) ; + virtual void WsDrawPieL(TPoint aPoint1, TPoint aPoint2, TRect aRect) ; + virtual void WsDrawBitmap1L(TInt aBitmapHandle, TRect aRect) ; + virtual void WsDrawBitmap2L(TInt aBitmapHandle, TRect aRect1, TRect aRect2) ; + virtual void WsDrawBitmap3L(TInt aBitmapHandle, TPoint aPoint) ; + virtual void WsDrawBitmapMaskedL(TInt aBitmapHandle, TInt aMaskHandle, TInt aInvertMask, TRect& aRect1, TRect& aRect2) ; + virtual void WsDrawRoundRectL(TPoint aPoint, TRect& aRect) ; + virtual void WsDrawPolyLineL(CArrayFix* aPointerArray) ; + virtual void WsDrawPolyLineNoEndPointL(TPoint* aPointerArray, TInt aCount); + virtual void WsDrawPolygonL(CArrayFix* aPointerArray, TInt aFillRule ) ; + virtual void WsDrawEllipseL(TRect& aRect) ; + virtual void WsDrawLineL(TPoint& aStart, TPoint& aEnd) ; + virtual void WsDrawLineToL(TPoint& aPoint); + virtual void WsDrawLineByL(TPoint& aPoint) ; + virtual void WsDrawRectL(TRect& aRect) ; + virtual void WsDrawText1L(TPtr& aTextValue, THuiCanvasTextParameters& aTextParameters) ; + virtual void WsDrawText2L(TPtr& aTextValue, TPoint& aPoint,THuiCanvasTextParameters& aTextParameters) ; + virtual void WsDrawText3L(TPtr& aTextValue, TRect& aRect, THuiCanvasTextParameters& aTextParameters) ; + virtual void WsDrawText4L(TPtr& aTextValue, TRect& aRect, TInt aBaselineOffset, TInt aTextAlign, TInt aTextMargin,THuiCanvasTextParameters& aTextParameters) ; + virtual void WsDrawText5L(TPtr& aTextValue, TRect& aRect, TInt aBaselineOffset, TInt aTextAlign, TInt aTextMargin,TInt aTextWidth, THuiCanvasTextParameters& aTextParameters) ; + virtual void WsDrawTextVertical1L(TPtr& aTextValue, TInt aTextUp, THuiCanvasTextParameters& aTextParameters) ; + virtual void WsDrawTextVertical2L(TPtr& aTextValue, TInt aTextUp,TPoint& aPoint, THuiCanvasTextParameters& aTextParameters) ; + virtual void WsDrawTextVertical3L(TPtr& aTextValue, TInt aTextUp, TRect& aRect, THuiCanvasTextParameters& aTextParameters) ; + virtual void WsDrawTextVertical4L(TPtr& aTextValue, TRect& aRect, TInt aBaselineOffset, TInt aTextUp, TInt aTextAlign, TInt aTextMargin, THuiCanvasTextParameters& aTextParameters) ; + virtual void WsDrawTextVertical5L(TPtr& aTextValue, TRect& aRect, TInt aBaselineOffset, TInt aTextUp, TInt aTextAlign, TInt aTextMargin, TInt aTextWidth, THuiCanvasTextParameters& aTextParameters) ; + virtual void WsMoveToL( TPoint& aPoint) ; + virtual void WsMoveByL( TPoint& aPoint) ; + virtual void WsPlotL(TPoint& aPoint) ; + virtual void WsResetL() ; + virtual void WsSetBrushColorL( TRgb aColor) ; + virtual void WsSetBrushOriginL( TPoint& aPoint) ; + virtual void WsSetBrushStyleL( TInt aStyle) ; + virtual void WsSetClippingRegionL( RRegion& aRegion) ; + virtual void WsSetDrawModeL( TInt aDrawModew) ; + virtual void WsSetOriginL( TPoint& aOrigin); + virtual void WsSetPenColorL( TRgb aColor) ; + virtual void WsSetPenStyleL( TInt aStyle) ; + virtual void WsSetPenSizeL( TInt aWidth, TInt aHeight) ; + virtual void WsSetTextShadowColorL( TRgb aColor) ; + virtual void WsSetCharJustificationL( TInt aExcessiveWidth, TInt aNumGap) ; + virtual void WsSetWordJustificationL( TInt aExcessiveWidth, TInt aNumGap) ; + virtual void WsSetUnderlineStyleL( TInt aValue) ; + virtual void WsSetBrushPatternL( TInt aValue) ; + virtual void WsSetFontL( TInt aFontId) ; + virtual void WsCopyRectL( TPoint& aPoint, TRect& aRect) ; + virtual void WsCopySettingsL() ; + virtual void WsUpdateJustificationL( TPtr& aTextValue) ; + virtual void WsUpdateJustificationVerticalL( TInt aValue, TPtr& aTextValue) ; + virtual void WsSetFontNoDuplicateL( TInt aCurrentFont) ; + virtual void WsSetClippingRectL( TRect& aRect) ; + virtual void WsCancelClippingRectL() ; + virtual void WsSetFadedL( TInt& aFaded) ; + virtual void WsSetFadingParametersL( TInt aFaded1, TInt aFaded2) ; + virtual void WsFadeAreaL( RRegion& aRegion) ; + virtual void WsMapColorsL() ; + virtual void WsSetUserDisplayModeL( TInt aMode) ; + virtual void WsUseFontL(TInt aCurrentFont) ; + + // Extended CFbsBitGc functionality + virtual void WsCombinedBitBltMaskedL(TRect aDestinationRect, const RArray& aBlits); + + // Canvas functionality + + virtual void BeginActionL(TInt aAction, TRect aDisplayRect,const CHuiCanvasVisual& aUser, TBool aIsCachePrepared, const TRegion& aUpdateRegion); + virtual void EnableUpdateRegion(const TRegion& aUpdateRegion, TBool aClear); + virtual void DisableUpdateRegion(); + virtual void EndActionL(const TRegion& aUpdateRegion, TBool aUpdateDisplay); + virtual TInt SetCapturingBufferL(CFbsBitmap* aTarget); + virtual CHuiCanvasGc& CanvasGc() const; + virtual void SetPositionDelta( TPoint& aPoint ); + virtual void ClearCache(); + + virtual void SetRelativeOrientation(CHuiGc::TOrientation aOrientation); + + virtual TBool IsRenderBufferEnabled() const; + virtual TBool IsRenderBufferPrepared() const; + virtual TBool IsRenderBufferInitialized() const; + + virtual TInt EnableRenderbuffer(TBool aEnable = ETrue); + virtual THuiCanvasWsGcType Type() const; + + void BeginDrawL(TRect aDisplayRect,const CHuiCanvasVisual& aUser, TBool aIsCachePrepared, const TRegion& aUpdateRegion); + void EndDrawL(const TRegion& aUpdateRegion, TBool aUpdateDisplay); + void BeginScanL(TRect aDisplayRect,const CHuiCanvasVisual& aUser, TBool aIsCachePrepared, const TRegion& aUpdateRegion); + void EndScanL(const TRegion& aUpdateRegion, TBool aUpdateDisplay); + +public: + + void DoWsClearRectL(const THuiRealRect& aRect ); + +private: + + /** + * Constructor. + */ + CHuiCanvasWsHwGc(); + + /** + * Second-phase constructor. + */ + void ConstructL(); + + + THuiCachedGcParams CachedGcParams(); + + void ExpandDirtyRegion(TRect aNewRect); + + void AdjustCoordinates(TRect& aRect, TBool aUseWsOrigin = ETrue ); + + void AdjustCoordinates(TPoint& aPoint , TBool aUseWsOrigin = ETrue ); + + void DrawTextBrush( THuiRealRect& aRect ); + + TRect RoundedDisplayRect(); + + TBool IsRenderingEnabled() const; + + TBool IsRenderBufferUpdateOngoing() const; + + THuiCanvasDrawMode SelectCanvasDrawMode(TInt aWsDrawMode); + + void BindRenderBuffer(CHuiCanvasRenderBuffer* aRenderbuffer, const TRegion& aUpdateRegion); + + void UnBindRenderBuffer(CHuiCanvasRenderBuffer* aRenderbuffer); + + void UseBrushPattern(); + + void DiscardBrushPattern(); + + TBool IsDifferent(const TRgb& aFirst, const TRgb& aSecond, TBool aIgnoreAlpha); + + /** + * UseCanvasState + * + * Saves canvas state for color, opacity, drawmode, pen width and polygon drawmode + */ + void UseCanvasState(); + + /** + * UseWsState + * + * Restores canvas state (stored by the call of UseCanvasState) for color, + * opacity, drawmode, pen width and polygon drawmode + */ + void UseWsState(); + +private: + + /** + * CFbsBitGc attributes + */ + TInt iWsCurrentFont; + TPoint iWsPenPosition; + TPoint iWsOrigin; + TRgb iWsFadeColor; + TRgb iWsPenColor; + TRgb iWsBrushColor; + TInt iWsPenStyle; + TInt iWsDrawMode; + TInt iWsBrushStyle; + TInt iWsShadowMode; + TInt iWsStrikethrough; + TInt iWsUnderline; + TInt iWsUserDisplayMode; + TRgb iWsShadowColor; + TSize iWsPenSize; + TInt iWsBrushPattern; + TPoint iWsBrushOrigin; + + /** + * RRegionBuf is used instead of RRegion for better performance. + */ + RRegionBuf iWsClipRegion; + RRegionBuf iTempRegion; + + /** + * Canvas internal misc attributes + */ + TInt iAction; + CHuiCanvasGc* iCanvasGc; + CHuiCanvasVisual* iVisual; + TBool iAllCommandsSupported; + + /** + * The difference between the original position (when first drawn) of the + * window and the current position after visual position has been changed + */ + TPoint iPosDelta; + + /** + * Render buffer is (or is not) ready to be drawn into display + */ + TBool iRenderBufferPrepared; + + /** + * Render buffer is (or is not) used when drawing + */ + TBool iRenderBufferEnabled; + + /** + * Render buffer is (or is not) available when drawing. It may be unavailable for + * various reasons, e.g. when memory is low. + */ + TBool iRenderBufferAvailable; + + /** + * Render buffer is (or is not) initalized. It has just been created, resized or recycled. + */ + TBool iRenderBufferInitialized; + + /** + * Relative orientation to display orientation. E.g. after layout switch display is in + * EOrientationCCW90 but stored old drawing commands have orientation EOrientationNormal. In that + * case setting iRelativeOrientation to EOrientationCW90 causes drawing commands to appear + * at their original orientation in the physical screen. + * + */ + CHuiGc::TOrientation iRelativeOrientation; + + TRgb iOldColor; + TReal32 iOldOpacity; + THuiCanvasDrawMode iOldDrawMode; + TInt iOldPenWidth; + THuiFillMode iOldPolygonDrawMode; +#ifdef __WINS__ + TInt iPushCount; +#endif +}; +#endif // __HUICANVASWSHWGC_H__