uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h
changeset 0 15bf7259bb7c
child 3 d8a3531bc6b8
child 13 8f67d927ea57
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,422 @@
+/*
+* 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 CHuiCanvasVisual.
+*
+*/
+
+
+
+#ifndef __HUICANVASVISUAL_H__
+#define __HUICANVASVISUAL_H__
+
+
+#include <gdi.h>
+#include <bitdraw.h>
+#include <e32base.h>
+#include <uiacceltk/HuiOwnedPointer.h>
+#include <uiacceltk/HuiLayout.h>    
+#include <uiacceltk/HuiDisplay.h>    
+
+
+/* Forward declarations. */
+class CHuiControl;
+class THuiCanvasDrawImageParams;
+class THuiCanvasTextParameters;
+class CHuiCanvasGc;
+class MHuiCanvasPainter;
+
+ 
+/** Public initial values for ws painter */	
+#define KHuiWsDefaultUserClipRect TRect(0,0,0,0)
+#define KHuiWsDefaultLastPrintPosition TPoint(0,0)
+#define KHuiWsDefaultPenColor KRgbBlack  
+#define KHuiWsDefaultPenStyle CGraphicsContext::ESolidPen  
+#define KHuiWsDefaultPenSize TSize(1,1)  
+#define KHuiWsDefaultDrawMode CGraphicsContext::EDrawModePEN  
+#define KHuiWsDefaultLinePosition TPoint(0,0)  
+#define KHuiWsDefaultOrigin TPoint(0,0)  
+#define KHuiWsDefaultBrushUsed EFalse  
+#define KHuiWsDefaultBrushColor KRgbWhite  
+#define KHuiWsDefaultBrushOrigin TPoint(0,0)  
+#define KHuiWsDefaultBrushStyle CGraphicsContext::ENullBrush  
+#define KHuiWsDefaultCharJustExcess 0  
+#define KHuiWsDefaultCharJustNum 0  
+#define KHuiWsDefaultWordJustExcess 0  
+#define KHuiWsDefaultWordJustNum 0  
+#define KHuiWsDefaultDitherOrigin TPoint(0,0)  
+#define KHuiWsDefaultDotLength 0  
+#define KHuiWsDefaultDotMask 0  
+#define KHuiWsDefaultDotParam 0  
+#define KHuiWsDefaultDotDirection 1  
+#define KHuiWsDefaultShadowMode CFbsDrawDevice::ENoShadow  
+#define KHuiWsDefaultStrikethrough EStrikethroughOff  
+#define KHuiWsDefaultUnderline EUnderlineOff  
+#define KHuiWsDefaultUserDisplayMode ENone  
+#define KHuiWsDefaultShadowColor KRgbGray
+#define KHuiWsDefaultFadeColor 0x80FFFFFF
+
+enum THuiCanvasPaintType
+    {
+    /** Transparent or semitransparent */
+    EHuiCanvasPaintTypeTransparent,
+    
+    /** Fully opaque */
+    EHuiCanvasPaintTypeOpaque            
+    };
+
+NONSHARABLE_STRUCT (THuiCanvasPaintedArea)
+    {
+    /** Painted area in the canvas */
+    THuiRealRect iPaintedRect;    
+    
+    /** Paint type of the area */
+    TInt iPaintType;
+    
+    /** Reserved for future */
+    TInt iFlags;
+    };
+
+enum THuiCanvasFlags
+    {
+    /** Disables canvas from drawing the canvas content */
+    EHuiCanvasFlagDisableCanvasContent    = 0x1,
+    /** Disables canvas from drawing the canvas background (if set) */
+    EHuiCanvasFlagDisableCanvasBackground = 0x2,
+    /** Canvas is drawn with external fade effect */
+    EHuiCanvasFlagExternalFade = 0x4,
+    /** Canvas drawing is clipped to own and parent canvas intersection */
+    EHuiCanvasFlagEnableCanvasClipping = 0x8,           
+    /** External fade effect (if enabled) is extended to children */
+    EHuiCanvasFlagExternalFadeToChildren = 0x10,    
+    /** External fade effect (if enabled) is set to a parent (or grandparent) */
+    EHuiCanvasFlagExternalFadeByParent = 0x40,    
+    /** Effect is excluded from parent (or grandparent) effect (if it has effect which is applied to children) */
+    EHuiCanvasFlagExcludeFromParentEffect = 0x80,
+    /** Hint flag which is used for optimizations. Tells if fade effect(s) exist in visual tree */
+    EHuiCanvasFlagExternalFadeExistsInsideVisualTree = 0x100 
+    };
+
+/**
+ * This class is used internally by the toolkit and thus should
+ * not be used by the applications directly.
+ */
+class CHuiCanvasVisual : public CHuiLayout
+    {
+public:
+
+    enum
+        {
+        /** @deprecated */
+        ECommandBufferHui,
+        /** @deprecated */
+        ECommandBufferSgc    
+        };
+	
+	enum
+	    {
+	    ECommandBufferAlf,
+	    ECommandBufferWs    
+	    };
+	    
+    /* Constructors and destructor. */
+
+    /**
+     * Constructs and appends a new Canvas visual to the owner control.
+     *
+     * @param aOwnerControl  Control that will own the new visual.    
+     * 
+     * @param aCanvasType The enumerator describing the type of concrete Canvas
+     * to be created.     
+     *
+     * @return  The new visual.
+     */
+    IMPORT_C static CHuiCanvasVisual* AddNewL(CHuiControl& aOwnerControl,
+                                            CHuiLayout* aParentLayout = 0);
+
+    /**
+     * Constructor.
+     */
+    CHuiCanvasVisual(MHuiVisualOwner& aOwner);
+
+    /**
+     * Second-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Destructor.
+     */
+    ~CHuiCanvasVisual();
+
+    /**
+     * Sets buffer that contains canvas drawing commands. This
+     * method clears previous buffer(s).
+     *
+     * @param aCommands Commanbuffer
+     */
+    IMPORT_C void SetCommandSetL( const TDesC8& aCommands );
+
+    /**
+     * Sets the type of commands in the buffer.
+     *
+     * @param aCommandType Type of the command buffer, either
+     * ECommandBufferHui or ECommandBufferSgc. In the future
+     * more command set types may be supported.
+     *
+     */
+    IMPORT_C void SetCommandType( TInt aCommandType );
+
+    /**
+     * Clears buffer(s) that contains canvas drawing commands. 
+     */
+    IMPORT_C void ClearCommandSet();
+    
+    IMPORT_C void SetTrackCommandSet( TFileName& aFileName, TBool aTrack );
+        
+    /**
+     * Adds buffer that contains more canvas drawing commands,
+     * those will be executed after the buffers that has been
+     * added previously.
+     * @param aMoreCommands Commanbuffer
+     */
+    IMPORT_C 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.
+     */
+    IMPORT_C void AddPartialCommandSetL( const TDesC8& aMoreCommands, TBool aLastPart );
+
+    /**
+     * Clears internal cached texts and images.
+     */
+    IMPORT_C void ClearCache();
+
+    /**
+     * Prepares internal cached texts and images.
+     */
+    IMPORT_C void PrepareCache();
+    
+    /**
+     * Sets the flag that tells the canvas to clear the background before
+     * doing a refresh. 
+     *
+     * Note1: EClearWithSkinBackground is not (yet) supported.
+     * Note2: EClearWithColor does not do alphablending, it just clears the area 
+     * and writes alpha values to the rendering surface. 
+     *
+     * @param aClearBackground  Background clearing mode. 
+     * @see SetBackgroundColor()
+     */
+    IMPORT_C void SetClearBackground(CHuiDisplay::TClearMode aClearBackground);
+
+    /**
+     * Sets the background color, if background clearing has
+     * been enabled.
+     *
+     * @param aBackgroundColor  The color to set the background to.
+     * @see SetClearBackgroundL()
+     */
+    IMPORT_C void SetBackgroundColor(const TRgb& aBackgroundColor);
+    
+    /**
+     * Sets the items that specify how to clear display before display refresh.
+     * Items may have overlapping rectangles, drawing order is same as item order
+     * in the parameter array. But having lots of overlapping drawing 
+     * causes negative performance impact.
+     * 
+     * This method is alternative to SetClearBackgroundL and SetBackgroundColor
+     * methods.
+     * 
+     * @see SetBackgroundColor()
+     * @see SetClearBackgroundL()
+     * @param aItems Array of items that specify how to clear the background.
+     */
+    IMPORT_C void SetBackgroundItems(const RArray<THuiDisplayBackgroundItem>& aItems);
+    
+    /**
+     * Returns the number of rectangular areas which contain something that is
+     * drawn by the visual.
+     *
+     * @return number of painted areas.
+     * @see PaintedArea()
+     */
+    IMPORT_C TInt PaintedAreaCount() const;
+    
+    /**
+     * Returns information of the painted area at given index. 
+     *
+     * @param aIndex Index of the painted area.
+     * @return Painted area info.
+     * @see PaintedAreaCount()()
+     */
+    IMPORT_C 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. 
+     *         
+     */
+    IMPORT_C TInt SetCapturingBufferL(CFbsBitmap* aTargetBuffer);
+    
+    /**
+     * Sets canvas flags
+     * @param aCanvasFlags flags to be set
+     *
+     */
+    IMPORT_C void SetCanvasFlags(TInt aCanvasFlags);
+
+    /**
+     * Clears canvas flags
+     * @param aCanvasFlags flags to be cleared.
+     *
+     */
+    IMPORT_C void ClearCanvasFlags(TInt aCanvasFlags);
+
+    /**
+     * Gets canvas flags
+     * @return flags
+     *
+     */
+    IMPORT_C TInt CanvasFlags();
+
+    /**
+     * Set external content visual to be drawn to the canvas visual.
+     * Giving a NULL pointer as a parameter removes the external content.
+     * @param aVisual the visual that is used as external content
+     *
+     */
+	IMPORT_C void SetExternalContentL(CHuiVisual* aVisual);
+
+    /**
+     * Return external content visual of the canvas visual.
+     * NULL return value means there is no external content.
+     * @return NULL or the visual that is used as external content
+     */
+    IMPORT_C CHuiVisual* ExternalContent();
+
+    /**
+     * Set parent canvas visual. Parent is used for determining clipping 
+     * region incase canvasflag EHuiCanvasFlagEnableCanvasClipping is set.
+     *
+     * @param aParent Canvas visual which is used to determine effective 
+     * clipregion.
+     */
+    IMPORT_C void SetParentCanvas(CHuiCanvasVisual* aParent);
+    
+    /**
+     * Gets reference to canvas gc
+     */
+    CHuiCanvasGc& CanvasGc() const;
+
+    IMPORT_C TBool IsBackgroundDrawingEnabled() const;
+
+    const TRegion& ClipRegion() const;
+    
+    void AddChildCanvas(CHuiCanvasVisual* aChild);
+
+    void RemoveChildCanvas(CHuiCanvasVisual* aChild);
+        
+    IMPORT_C TBool HasCommandBuffers(TBool aAskFromChildren = ETrue) const;
+    
+    // to handle background surface that may be set to the Window
+public:    
+    
+    IMPORT_C TBool LayerUsesAlphaFlag();
+    IMPORT_C void SetLayerUsesAlphaFlag(TBool aEnabled);
+    IMPORT_C TRect& LayerExtent(); 
+    IMPORT_C void SetLayerExtent(TRect& aExtent); 
+
+public:
+    
+    void SetSize(const THuiRealSize& aSize, TInt aTransitionTime=0);    
+    TBool ChildSize(TInt aOrdinal, TSize& aSize);    
+    TBool ChildPos(TInt aOrdinal, TPoint& aPos);
+    TInt ChildRect(TInt aOrdinal, THuiRealRect& aRect);        
+
+    
+private:
+    
+    void HandleBuffer(TRect& aDisplayRect, TInt aAction, CHuiGc* aGc) const;        
+
+    void SetCommandTypeL(TInt aCommandType);         
+ 
+    TBool IsContentDrawingLayered() const;
+    
+    TBool IsContentDrawingEnabled() const;
+
+    TBool IsExternalContentDrawingEnabled(TBool aIncludeChildren = EFalse) const;
+    
+    TBool IsCanvasClippingEnabled() const;
+    
+    TBool EffectActive() const;
+    
+public: // From CHuiVisual
+
+	TBool PrepareDrawL();
+	
+	void Draw(CHuiGc& aGc) const;
+
+ 	/**
+     * Draw the visual.
+     */
+    void DrawSelf(CHuiGc& aGc, const TRect& aDisplayRect) const;
+
+    TBool Changed() const;
+
+    IMPORT_C void SetChanged();
+    
+    IMPORT_C void ClearChanged();
+
+    void ExpandRectWithContent(TRect& aRect) const;
+    THuiRealPoint ConvertPoint(const THuiRealPoint& aPointInUnits) const;
+    void ExpandRect(TRect& aRectToExpand, const TRect& aNewRect) const;
+
+public:    
+    IMPORT_C void StoreRenderBufferL();
+    void DrawStoredVisualRenderBuffer() const;
+    void DrawStoredFullScreenRenderBuffer(CHuiGc& aGc) const;
+    IMPORT_C void FreeRenderBuffer();
+        
+private:
+       
+    THuiCanvasPaintedArea CanvasPaintedArea(TInt aIndex) const;
+    
+    void DrawChildren(CHuiGc& aGc) const;
+    void DrawCanvasChildren(CHuiGc& aGc, TInt aIncludeCanvasFlags, TInt aExcludeCanvasFlags) const;
+    TBool ChildTreeChanged(TInt aExcludeCanvasFlags) const;
+    
+private: 
+
+    struct THuiCanvasVisualData;
+    THuiCanvasVisualData* iCanvasVisualData;
+
+
+    };
+
+#endif  // __HUICANVASVISUAL_H__