svgt_plat/nvg_api/inc/nvg.h
changeset 0 d46562c3d99d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgt_plat/nvg_api/inc/nvg.h	Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,348 @@
+/*
+* 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:
+*
+*/
+
+#ifndef NVG_H
+#define NVG_H
+
+#include <e32base.h>
+#include <VG/openvg.h>
+#include <VG/vgu.h>
+
+#include <fbs.h>
+
+class TDereferencer;
+class MNVGIcon;
+class CNvgFitToViewBoxImpl;
+class MVGImageBinder;
+class TNVGEngineInternal;
+
+enum TNvgAlignStatusType
+    {
+    ENvgPreserveAspectRatio_None,
+    ENvgPreserveAspectRatio_XminYmin,
+    ENvgPreserveAspectRatio_XmidYmin,
+    ENvgPreserveAspectRatio_XmaxYmin,
+    ENvgPreserveAspectRatio_XminYmid,
+    ENvgPreserveAspectRatio_XmidYmid,
+    ENvgPreserveAspectRatio_XmaxYmid,
+    ENvgPreserveAspectRatio_XminYmax,
+    ENvgPreserveAspectRatio_XmidYmax,
+    ENvgPreserveAspectRatio_XmaxYmax
+    };
+
+enum TNvgMeetOrSliceType
+    {
+    ENvgMeet,
+    ENvgSlice
+    };
+
+enum TNvgBitEncoding
+    {
+    EEightBitEncoding = 1,
+    ESixteenBitEncoding ,
+    EThirtyTwoBitEncoding,
+    EFloatEncoding
+    };
+
+class CNvgEngine :  public CBase
+    {
+public :    
+    /**
+     * @brief  constructor
+     * @version
+     * @param   None
+     * @return  None
+     */
+    IMPORT_C static CNvgEngine* NewL();
+    
+    /**
+     * @berief Destructor
+     */
+    IMPORT_C ~CNvgEngine();
+    
+    /**
+     * @brief  Set the angle for rotation of the NVG graphic
+     * @version
+     * @param    aAngle counter-clockwise rotation by a given angle (expressed in degrees)
+     *              aX, aY  point around which the rotation must take place
+     * @return  None
+     */
+    IMPORT_C void Rotate(TReal32 aAngle, TReal32 aX, TReal32 aY) __SOFTFP;
+	
+	/**
+     * @brief  Gets the viewbox width and height from the NVG bytedata
+     * @version
+     * @param   aBuf NVG byte data of the file
+     * @return  None
+     */
+    IMPORT_C TSize ContentDimensions(const TDesC8& aBuf);
+	
+	/**
+     * @brief  Render NVG onto the bitmap
+     * @version
+     * @param    aBuf  byte data of NVG file
+     *           aSize Size in pixels of the target
+     *           aDstBitmap Target bitmap
+     *           aMask Target mask
+     * @return  None
+     */
+    IMPORT_C TInt DrawNvg(const TDesC8& aBuf, const TSize& aSize, CFbsBitmap* aDstBitmap, CFbsBitmap* aMask );
+   
+    /**
+     * @brief   Creates NVGIcon, openVG objects are cached
+     * @param   aBuf  byte data of NVG file
+     *          aSize Size in pixels of the target
+     * @return  NVG icon object on success, 0 on failure
+     */
+    IMPORT_C MNVGIcon * CreateNVGIcon(const TDesC8& aBuf, const TSize& aSize);
+    
+	/**
+     * @brief  Set the preserve aspect ratio for the NVG file
+     * @version
+     * @param  
+     * @return  None
+     */
+    IMPORT_C void SetPreserveAspectRatio( TNvgAlignStatusType aPreserveAspectSetting, TNvgMeetOrSliceType aSmilFitSetting );
+
+	/**
+     * @brief  Reset the OpenVG handles in NVG Engine
+     * @version
+     * @param  
+     * @return  None
+     */
+    IMPORT_C void ResetNvgState();
+    
+	/**
+     * @brief  Sets the BackGround Colour for the target
+     * @version
+     * @param  aRGBA8888Color colour in 32 bit RGBA format
+     * @return  None
+     */
+    IMPORT_C void SetBackgroundColor( TUint32 aRGBA8888Color );
+    
+    /**
+     * @fn      SetVGImageBinder
+     * @brief   Sets the callback for binding image to surface, nvgengine doesn't owns the implementation
+     * @param   aImageBinder    an implementation for MVGImageBinder, ownership is with the caller
+     */
+    void SetVGImageBinder(MVGImageBinder * aImageBinder)
+        {
+        iVGImageBinder = aImageBinder;
+        }
+    
+    /**
+     * @fn      OpenVGErrorToSymbianError
+     * @brief   Converts OpenVg errors to symbian error type
+     */
+    static TInt OpenVGErrorToSymbianError( TInt aError );
+
+private :
+    
+    /**
+     * Checks whether the given matrix is identity
+     */
+    TBool IsIdentity(VGfloat array[]);
+    
+    /**
+     * Draws the nvg icon
+     */
+    void DoDrawNVGL(const TDesC8& aBuf, const TSize& aSize, CFbsBitmap* aDstBitmap, CFbsBitmap* aMask);
+    
+    /**
+     * Draws the nvg-tlv icon
+     */
+    TInt DrawTLVL(const TDesC8& aBuf, const TSize& aTargetSize, CFbsBitmap* aDstBitmap, CFbsBitmap* aMask);
+    
+    /**
+     * Draws the nvg-cs icon
+     */
+    TInt DrawCommandSectionL(TDereferencer * aIconData, const TSize& aTargetSize, CFbsBitmap* aDstBitmap, CFbsBitmap* aMask);
+    
+	/**
+     * Constructor
+     */
+    CNvgEngine();
+    
+    /**
+     * Constructor
+     */
+    void ConstructL();
+	
+	/**
+     * SetPaint gradient or solid in OpenVG
+     */
+    TInt SetFillPaintL(TDereferencer * aIconData);
+	
+	/**
+     * SetColor in OpenVG
+     */
+    TInt SetColorRampL(TDereferencer * aIconData);
+	
+	/**
+     * Call vgDrawPath in OpenVG
+     */
+    void DrawPathL(TDereferencer * aIconData);
+    
+    /**
+     * call SetTranslate in OpenVG
+     */
+    void SetTransformL(TDereferencer * aIconData, TUint32 &transVal,const VGfloat* aCurrentMatrix);
+    
+    /**
+     * Set stroke color in Openvg
+     */
+    void SetStrokePaintL(TDereferencer * aIconData);
+
+    /**
+     * Sets the stroke Width
+     */
+    void SetStrokeWidth(const TUint8* aBuf);
+    
+    /**
+     * Sets the miter limit
+     */
+     void SetStrokeMiterLimit(const TUint8* aBuf);
+     
+
+	/**
+     * Generate Mask for modes not supported by custom binding API
+     */
+    void GenerateMask(CFbsBitmap* aMask);
+   
+   
+    /**
+     * To clear the background of the target
+     */
+    void ClearBackground();
+       
+    /**
+     * Stores the callres matrix mode and matricies
+     */
+    void UpdateClientMatrices();
+    
+    /**
+     * Restores the callres matrix mode and matricies
+     */
+    void RestoreClientMatrices();
+    
+    /**
+     * Point transforms according to the given matrix
+     */
+    TPoint GetTranslatedPoint(VGfloat aTRMatrix[9], TPoint aPoint);
+
+    /**
+     * Gives the minimum of the given arguments
+     */
+    VGfloat MinVal4(VGfloat x1, VGfloat x2, VGfloat x3, VGfloat x4 );
+
+    /**
+     * Gives the maximum of the given arguments
+     */
+    VGfloat MaxVal4(VGfloat x1, VGfloat x2, VGfloat x3, VGfloat x4 );
+    
+    /**
+     * Initializes the OpenVg handles
+     */
+    TInt InitializeGC();
+    
+    /**
+     * Create the path handle
+     */
+    TInt CreatePathHandle(TInt16 aPathDataType, TReal32 aScale, TReal32 aBias);
+
+    /**
+     * Applies the rotation
+     */
+    void ApplyRotation();
+
+    /**
+     * Applies the scissoring
+     */
+    void ApplyScissoring(VGfloat aMatrix[], const TSize& aTargetSize);
+    
+    /**
+     * Applies viewbox to viewport transformation
+     */
+    void ApplyViewboxToViewPortTransformationL(const TSize& aTargetSize, TReal32 aViewboxX, TReal32 aViewboxY,
+                                            TReal32 aViewboxW, TReal32 aViewboxH);
+
+    /**
+     * Executes the nvg-cs commands
+     */
+    void ExecuteNVGCSCommandLoopL(TUint16 aCommandCount, TDereferencer * aIconData, TDereferencer * aOffsetVector,
+                                              TDereferencer * aCommandSection, TInt aNVGVersion);
+
+private :
+        
+    CFbsBitmap*         iDstBimtap;             //! Target Bitmap onto which the drawing will be rendered
+    TSize               iCurrentBufferSize;     //! Width and height of the target bitmap
+	
+	VGPath     iPath;          //! The path elements are appended to this path	
+	VGPaint    iPaintFill;     //! Paint handle for fill
+	VGPaint    iPaintStroke;   //! Paint handle for stroke
+	
+    VGPaint    iGradPaintFill;
+    VGPaint    iGradPaintStroke;        
+    VGPaint    iUserStrokePaint;
+    TUint32    iUserStrokePaintColor;
+
+	TInt   iFillAlpha;       //! For fill alpha value	
+	TInt   iStrokeAlpha;     //! Set alpha value for stroke
+			
+	VGboolean idoFill;       //! Flags for fill
+	VGboolean idoStroke;     //! Flags for stroke
+	
+	VGfloat * iColorRamps;                     //! This member variable is not used just kept for BC
+	CNvgFitToViewBoxImpl * iFitToViewBoxImpl;  //! This member variable is not used just kept for BC
+	
+	VGfloat iRotateAngle;   //! Rotation angle in degrees	
+	TBool iRotateApplied;   //! Is rotation angle specified
+	
+	/*
+	 * caller's matrix mode and matricies, must be restored after operation
+	 */
+    VGint               iMatrixMode;
+    TReal32             iImageMatrix[9];
+    TReal32             iPathMatrix[9];
+    TReal32             iFillPaintMatrix[9];
+    TReal32             iStrokePaintMatrix[9];
+    
+    TInt16              iLastPathDataType;
+		
+	TNvgAlignStatusType iPreserveAspectSetting;    //! Aspect Ratio setting
+    TNvgMeetOrSliceType iSmilFitSetting;           //! SMIL Fit setting
+    
+    TUint32     iBackgroundColor;
+    
+	TReal32 iCentreX;      //! Rotate center x-coordinate
+	TReal32 iCentreY;      //! Rotate center y-coordinate
+	
+    MVGImageBinder *    iVGImageBinder;     //! image binder
+
+    /**
+     * This class is added to maintain BC.
+     * If you want to add new member variable you can add in this class, without breaking BC.
+     * It is better to add members which are depend on macro's in this class.
+     */
+    TNVGEngineInternal  *iInternal;         
+    
+#ifdef    OPENVG_OBJECT_CACHING
+    VGPath CreatePath();
+#endif
+};
+
+#endif