diff -r 000000000000 -r 88edb906c587 svgt_plat/nvg_api/inc/nvg.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/nvg_api/inc/nvg.h Wed Nov 03 18:56:10 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 +#include +#include + +#include + +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